Log streams

Тема дорожной карты · Loki

Поток логов в Grafana Loki представляет все строки логов с одинаковым набором пар «ключ-значение» меток, образуя единую непрерывную хронологическую последовательность, которая хранится и сжимается вместе в виде чанка. Каждый поток логов уникально идентифицируется своим отпечатком меток, поэтому добавление или удаление даже одного значения метки создаёт совершенно новый отдельный поток в хранилище Loki. Promtail и другие агенты отправки логов динамически создают потоки логов по мере обнаружения новых комбинаций меток из таких целей, как файлы, журналы systemd или поды Kubernetes. При написании LogQL-запросов поток или несколько потоков логов сначала выбираются выражением селектора потоков вроде {namespace="default", app="frontend"}, и только после этого применяются операции фильтрации или метрики. Поддержание управляемого общего числа активных потоков логов является ключом к эффективности Loki, поскольку каждый поток соответствует открытому чанку, удерживаемому в памяти Ingester-а.

Как это работает

Log streams: в Loki log stream — уникальная комбинация labels. Labels — key-value pairs (e.g., {app="nginx", env="prod", pod="nginx-7d"}), идентифицирующие источник. Loki индексирует labels, НЕ содержимое лога — поэтому design labels тщательно критичен. High-cardinality labels (user_id, request_id, timestamp) взрывают индекс + убивают perf. Структурированные логи (JSON) намного легче фильтровать + extract из них чем free text — логируйте в JSON.

Когда применять

Держите labels мало + low-cardinality — app, env, namespace, level хороши; user_id, trace_id, timestamp плохи (high cardinality). Используйте содержимое лога (не labels) для filter по request-specific значениям через LogQL |= или |~. Всегда structured-log (JSON) — Promtail/Loki парсят поля без дорогого regex.

Типичные ошибки

Ловушки Log streams: добавляют request_id или user_id как label (cardinality explosion → Loki умирает); слишком мало labels (один огромный stream, не масштабируется ingest); inconsistent labels между сервисами (queries становятся per-service спагетти); unstructured logs, требующие regex на каждом query.

Связанные понятия

Полезные ресурсы