Структурированные логи
Тема дорожной карты · Observability
Структурированное логирование — это практика формирования лог-записей в виде машиночитаемых пар «ключ-значение» — как правило, JSON или logfmt — вместо произвольных текстовых строк. Вместо того чтобы писать "User 42 logged in from 192.168.1.1", структурированное логирование даёт {"event": "user_login", "user_id": 42, "ip": "192.168.1.1", "timestamp": "..."}, что позволяет точно индексировать и фильтровать данные по любому полю. Этот подход кардинально улучшает наблюдаемость, поскольку системы агрегирования логов, такие как Loki, Elasticsearch и Datadog, могут запрашивать поля напрямую без хрупкого парсинга через регулярные выражения. Структурированные логи также бесшовно интегрируются с распределённой трассировкой: наличие поля trace_id позволяет инженерам переходить от записи лога непосредственно к соответствующей трассировке в Jaeger или Grafana Tempo. Переход на структурированное логирование требует поддержки со стороны библиотек — такие инструменты, как zap (Go), structlog (Python) или logback (Java), делают структурированную запись логов идиоматической в своих экосистемах.
Как это работает
Структурированные логи захватывает дискретные события с контекстом. Современное логирование = структурированный 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 растёт).