Filter expressions

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

Выражения фильтрации в LogQL добавляются после селектора потоков для поиска по содержимому строк логов внутри выбранных потоков Grafana Loki. Наиболее распространённые операторы фильтрации: |= (строка содержит подстроку), != (строка не содержит подстроку), |~ (строка совпадает с регулярным выражением) и !~ (строка не совпадает с регулярным выражением), например {job="nginx"} |= "error" != "healthcheck". Несколько выражений фильтрации можно объединять в одном LogQL-запросе — они вычисляются слева направо, поэтому размещение наиболее избирательного фильтра первым сокращает количество строк, обрабатываемых последующими этапами. По умолчанию выражения фильтрации чувствительны к регистру; для поиска без учёта регистра можно использовать фильтр по регулярному выражению с флагом (?i), например |~ "(?i)error". В отличие от сопоставления меток, выражения фильтрации выполняют линейное сканирование сырых строк логов в каждом чанке — именно поэтому в Grafana Loki всегда применяется строгий селектор потоков для минимизации объёма данных, которые необходимо просканировать.

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

Filter expressions (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 логов (быстрее).

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

Ловушки Filter expressions: stream selector слишком широк ({job=~".*"} — сканирует всё); regex когда literal работает (медленнее); не используют | json на JSON-логах (regex hunt за полями); путаница label-фильтров {k="v"} vs line-фильтров | k="v" (разная семантика).

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

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

Проверить знания (1)

Загрузка вопросов…