Уровни логирования и структурные логи
DEBUG/INFO/WARN/ERROR, зачем уровни, structured logging в JSON и что нельзя писать в логи.
Зачем у логов уровни
Если писать в лог всё подряд одинаково, в потоке невозможно отличить рутинное событие от аварии. Поэтому у каждой записи есть уровень важности. От тихих к громким:
- DEBUG — детали для отладки: значения переменных, шаги алгоритма. В проде обычно выключены, иначе лог захлёбывается.
- INFO — нормальные события: «сервис стартовал», «обработан заказ».
- WARN — что-то подозрительное, но работа продолжается: «повтор запроса», «приближается лимит».
- ERROR — операция упала: «не удалось списать платёж».
Уровень логирования настраивается: в проде ставят INFO, и тогда DEBUG
не пишется вообще. При разборе инцидента уровень временно опускают до
DEBUG, чтобы увидеть детали.
Фильтровать по уровню — основа работы с логами. По journald это -p:
journalctl -u myapp -p err # только ERROR и критичнее
Плоский лог против структурного
Обычный лог — строка текста:
2026-06-18 10:14 ERROR payment failed for order 4821, gateway timeout
Человеку читать удобно, машине — нет. Чтобы найти все ошибки по заказу 4821, приходится парсить строку регэкспами, а формат у каждого сервиса свой. На масштабе это не работает.
Структурный лог (structured logging) пишет ту же запись как JSON с полями:
{"ts":"2026-06-18T10:14:02Z","level":"error","msg":"payment failed",
"order_id":4821,"reason":"gateway_timeout","service":"payments"}
Теперь система сбора логов индексирует поля, и можно искать запросом:
level=error AND order_id=4821. Это фильтр по полям вместо парсинга текста.
Поэтому в сервисах, которые отдают логи в централизованную систему,
пишут структурно.
Пара слов про названия
Стек для логов часто называют «ELK» — Elasticsearch, Logstash, Kibana. Как родовое имя это слово уже неточно, и вот почему.
В 2021 году Elastic перевела Elasticsearch и Kibana с открытой Apache 2.0 на SSPL, лицензию с ограничениями для тех, кто продаёт продукт как услугу. AWS сделала форк последней открытой версии и назвала его OpenSearch; проект развивается отдельно и живёт во многих облаках под своим именем. В 2024 Elastic добавила к SSPL опцию AGPL, то есть вернула Elasticsearch в разряд открытых, но OpenSearch к тому моменту уже разошёлся своей дорогой.
Плюс сама конфигурация сменилась: Logstash во многих установках заменили на легковесный Filebeat, и тот же стек стали звать «Elastic Stack». Отдельно от этого семейства выросли Loki (Grafana) и ClickHouse-решения.
Так что в разговоре «ELK» обычно означает просто «централизованные логи с поиском». Уточняй, что за система на самом деле — от этого зависят и запросы, и лицензия.
Что нельзя писать в логи
Логи хранятся, пересылаются и часто доступны многим. Туда нельзя класть секреты и персональные данные:
- пароли, токены, ключи, номера карт,
- содержимое запросов с чувствительными данными,
- персональные данные в открытом виде.
Утёкший в лог токен — это тот же утёкший токен. Чувствительные поля
маскируют (card: ****1234) или не логируют вовсе.
Что важно запомнить
Уровни логов (DEBUG, INFO, WARN, ERROR) отделяют рутину от аварий; в проде обычно пишут от INFO, при разборе опускают до DEBUG.
Структурные логи (JSON с полями) ищутся фильтром по полям, а не парсингом текста, поэтому их используют для централизованного сбора.
Секреты и персональные данные в логи не попадают: лог хранится и пересылается, утечка в него — это утечка.
В следующих уроках логи соединяются с метриками и трейсами в полноценный мониторинг.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс