Labels в Loki
Тема дорожной карты · Loki
Метки — это фундаментальные строительные блоки модели индексирования Grafana Loki: каждый поток логов идентифицируется уникальной комбинацией пар «ключ-значение», например {job="nginx", env="production"}. Вместо того чтобы индексировать содержимое логов, Loki хранит и запрашивает данные логов путём сопоставления этих меток, что позволяет поддерживать небольшой размер индекса и низкие затраты на хранение по сравнению с решениями на основе полнотекстового индексирования. Метки прикрепляются к потокам логов во время записи агентом Promtail или другими агентами отправки логов и не могут быть изменены после создания потока, поэтому их тщательный выбор критически важен для производительности. Стандартные ключи меток в среде Kubernetes включают job, instance, namespace, pod и container, что соответствует соглашениям об именовании меток в Prometheus. В LogQL вы ссылаетесь на метки в селекторах потоков, например {job="nginx"}, чтобы сузить набор сканируемых потоков логов перед применением выражений фильтрации.
Как это работает
Labels в Loki: в 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.
Типичные ошибки
Ловушки Labels в Loki: добавляют request_id или user_id как label (cardinality explosion → Loki умирает); слишком мало labels (один огромный stream, не масштабируется ingest); inconsistent labels между сервисами (queries становятся per-service спагетти); unstructured logs, требующие regex на каждом query.