Log Streams и Labels
Тема дорожной карты · Loki
В Grafana Loki поток логов — это последовательность записей, которые имеют одинаковый набор меток; каждая уникальная комбинация меток определяет отдельный поток, хранящийся в виде собственного сжатого чанка. Потоки логов являются основной единицей хранения в Loki: когда Promtail отправляет логи с метками вида {job="api", env="staging"}, Loki создаёт новый поток или дополняет существующий, соответствующий этому точному набору меток. Записи внутри потока логов должны поступать в хронологическом порядке; записи вне очерёдности отклоняются Ingester-ом, если не включена опция unordered_writes. Правильный выбор меток для потоков логов напрямую влияет на производительность запросов: слишком много значений меток (высокая кардинальность) приводит к избыточной фрагментации потоков и медленным запросам, тогда как слишком мало меток вынуждает LogQL сканировать больше данных. Понимание взаимосвязи между метками и потоками логов необходимо для проектирования эффективного развёртывания Grafana Loki.
Как это работает
Log Streams и Labels: в 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 и Labels: добавляют request_id или user_id как label (cardinality explosion → Loki умирает); слишком мало labels (один огромный stream, не масштабируется ingest); inconsistent labels между сервисами (queries становятся per-service спагетти); unstructured logs, требующие regex на каждом query.