Stream selector
Тема дорожной карты · Loki
Селектор потоков — обязательная первая часть каждого LogQL-запроса в Grafana Loki: именно он определяет, какие потоки логов будут включены в результат запроса. Селектор потоков записывается в виде набора совпадающих меток в фигурных скобках, например {job="nginx", env="production"}, и Loki использует его для быстрого поиска по индексу без сканирования содержимого логов. Совпадатели меток поддерживают четыре оператора: = (точное совпадение), != (неравенство), =~ (совпадение с регулярным выражением) и !~ (несовпадение с регулярным выражением), что даёт гибкость при выборе потоков, например {job=~"nginx|apache"}. Селектор потоков должен соответствовать хотя бы одной метке, чтобы быть корректным — пустой селектор {} допускается только в определённых административных контекстах и на больших развёртываниях может привести к таймауту. Написание точного селектора потоков, сужающего набор релевантных потоков, — это самая важная оптимизация в запросе Grafana Loki, поскольку она напрямую контролирует количество чанков, которые должны быть получены и проверены Querier-ом.
Как это работает
Stream selector (Log Query Language): Prometheus-style query language для Loki. Stream selector {app="nginx", env="prod"} выбирает streams; filters |= "error", != "debug", |~ "5\d\d", !~ "regex" сужают log lines. Parsers | json / | logfmt / | pattern "<...>" extract structured fields. | line_format "{{.method}} {{.path}}" переформатирует lines. Extracted labels потом фильтрабельны дальше. LogQL — сердце Loki, fluency здесь умножает productivity.
Когда применять
Всегда начинайте с самого селективного stream selector — он бьёт по label-индексу. Фильтруйте максимум до парсинга (фильтры дёшевы, парсинг дорог). | json если логи JSON — авто-extract всех полей. | pattern вместо regex для structured-but-not-JSON логов (быстрее).
Типичные ошибки
Ловушки Stream selector: stream selector слишком широк ({job=~".*"} — сканирует всё); regex когда literal работает (медленнее); не используют | json на JSON-логах (regex hunt за полями); путаница label-фильтров {k="v"} vs line-фильтров | k="v" (разная семантика).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…