Логирование
Тема дорожной карты · Observability
Логи — это неизменяемые записи дискретных событий с отметками времени, зафиксированных в системе; они образуют второй столп наблюдаемости наряду с метриками и трассировками. В отличие от метрик, которые агрегируют измерения во времени, логи фиксируют точный контекст отдельных событий — идентификаторы запросов, идентификаторы пользователей, сообщения об ошибках и стектрейсы, — что делает их незаменимыми при диагностике конкретных инцидентов. Современные лучшие практики логирования делают акцент на структурированных логах (JSON или logfmt) вместо обычного текста, чтобы поля можно было индексировать и эффективно запрашивать в централизованных системах логирования, таких как ELK Stack или Loki. Данные логов должны коррелироваться с трассировками (через общие поля trace_id) и метриками, чтобы дать инженерам полную картину наблюдаемости в ходе расследования. Объём данных логов в крупных системах требует стратегий сэмплирования, уровней логов и политик хранения, чтобы держать затраты на хранение под контролем без потери критически важных сигналов наблюдаемости.
Как это работает
Логирование захватывает дискретные события с контекстом. Современное логирование = структурированный JSON ({"level":"error","trace_id":"...","msg":"DB connection failed","db":"users","attempt":3}). Шлите через vector / fluent-bit / promtail в log-store (Loki — label-indexed, Elasticsearch — full-text, ClickHouse — аналитика). Sample на источнике для high-volume потоков. Всегда включайте trace_id + service + version + level + timestamp.
Когда применять
Structured JSON логирование — с первого дня; console.log и printf — tech debt с момента > 1 сервиса. Loki — для cost-effective storage (порядки дешевле Elasticsearch на том же объёме), когда full-text search не критичен. Сокращайте объём логов — high-cardinality логи дороги везде. trace_id в каждый лог; ключ join к traces.
Типичные ошибки
Ловушки Логирование: логирование на DEBUG в production (взрыв объёма + цена); логирование кредитных карт/токенов (PII-утечка в storage); нет ротации локальных логов (/var/log забивается + крэшит хост); нет структурированных полей = только grep-расследование; log retention навсегда (стоимость storage растёт).