Раздел 40 · Elasticsearch и ELK

Типичные ошибки логирования

junior~20 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

У «Гонца» стоит весь стек, а жалоба «оплата не работает» всё ещё разбирается час. В логе только failed, время от контейнера, DEBUG съел диск, секрет остался в исходной строке. Дорогой фотоаппарат не спасает снимок с закрытым объективом. Качество наблюдаемости зависит от того, что и как ты записываешь.

Ошибки до отправки

«Что-то пошло не так» без service.name, времени и контекста не связывает запись с запросом. Пиши структурированное событие: @timestamp, log.level, message, сервис, идентификатор операции и тип ошибки. Не логируй всё тело HTTP «для надёжности»: оно может содержать секреты и объёмные данные.

Уровни служат договором с дежурным: INFO про обычный ход, WARN про отклонение, ERROR про ошибку операции. Не делай любой отказ карты ERROR инфраструктуры. Не выбрасывай все успешные события, если по ним считаешь число запросов: исчезнет знаменатель доли ошибок.

Проверь не только красивую строку

Ниже исправленный пайплайн для вложенных ECS-полей. Он оставляет INFO, убирает DEBUG и не отправляет сырой обрезанный JSON с возможным секретом.

Убери удаление event.original: секрет вновь появится в исходной копии первой строки. Верни защиту. Замени [log][level] на [level]: DEBUG перестанет удаляться, потому что такого поля нет. Схема и условия должны говорить на одном языке. Для JSON с буквальным ключом log.level путь Logstash будет [log.level], а не [log][level].

Маскировка в этом примере ограничена известными полями. Она не доказывает, что произвольная message безопасна. Главная защита остаётся в приложении.

Ошибки по дороге

ОшибкаПоследствиеЧто проверить
время приёма вместо времени событиясдвиг таймлайна@timestamp, timezone и date-failure
потерян registry агентаповторная отправкапостоянный путь состояния
очередь без контроля дискалоги отстают или теряютсяразмер очереди и lag
сломанный grok молча выбрасывает строкиисчезают доказательствадоля parse-failure, карантин
bulk 200 считают успехом всех записейдокументы отклонены незаметноerrors, результаты items

Схема доставки «хотя бы один раз» допускает дубликаты. Перезапуск контейнера и ротация файла не гарантируют сохранность бесконечного хвоста. Проверяй сбои на стенде и сравни число отправленных и принятых событий по определённому договору.

Ошибки в хранилище и поиске

Индекс без ILM растёт до заполнения диска. Тысяча маленьких индексов на каждую pod-replica создаёт накладные расходы. Динамический маппинг с пользовательскими ключами превращает каждое имя в новое поле. message годится для text-поиска, service.name и trace.id для keyword-фильтров.

Перед диагнозом «логи потерялись» проверь data view и окно времени. Перед добавлением серверов измерь, где очередь и нагрузка. Перед публикацией дашборда подпиши единицы, источники и смысл числа.

Короткая приёмка всего блока

  1. По одному запросу клиента найди связанные события и объясни время.
  2. Покажи, как сломанное событие становится видимой ошибкой обработки без утечки.
  3. Докажи, что новая backing-генерация получает схему и policy.
  4. Опиши восстановление доставки после недоступности приёмника и риск дубликатов.
  5. У правила тревоги назови владельца, действие и критерий восстановления.

С этого начинается рабочий конвейер, а не с наличия трёх контейнеров ELK. Ты уже можешь собрать маршрут от строки до расследования и объяснить его границы. Следующий шаг для собственного проекта: взять один сервис, один измеримый вопрос дежурного и проверить весь путь на его реальных обезличенных событиях.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.