Loki
Тема дорожной карты · Observability
Grafana Loki — горизонтально масштабируемая, высокодоступная система агрегации логов, разработанная для экономичности за счёт индексирования только меток метаданных, а не полного содержимого логов. В отличие от Elasticsearch, который индексирует каждое поле, Loki хранит потоки логов, индексированные по наборам меток (например, {app="api", env="production"}), и извлекает содержимое логов путём сканирования сжатых чанков — компромисс, который кардинально снижает затраты на хранение для случаев наблюдаемости с большим объёмом данных. Логи доставляются в Loki с помощью Promtail, плагина Fluent Bit для Loki или экспортера логов OpenTelemetry, настраиваемых в promtail-config.yaml или otel-collector-config.yaml. Язык запросов Loki, LogQL, поддерживает как фильтрацию потоков логов ({app="api"} |= "error"), так и метрические запросы, производные от логов, что позволяет вычислять SLI напрямую из данных логов. Как часть стека Grafana LGTM (Loki, Grafana, Tempo, Mimir), Loki нативно интегрируется с Grafana для унифицированной наблюдаемости на основе логов, метрик и трассировок.
Как это работает
Loki захватывает дискретные события с контекстом. Современное логирование = структурированный 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.
Типичные ошибки
Ловушки Loki: логирование на DEBUG в production (взрыв объёма + цена); логирование кредитных карт/токенов (PII-утечка в storage); нет ротации локальных логов (/var/log забивается + крэшит хост); нет структурированных полей = только grep-расследование; log retention навсегда (стоимость storage растёт).