Парсинг и извлечение меток
Тема дорожной карты · Loki
Извлечение меток в LogQL позволяет разбирать и извлекать структурированные поля из содержимого сырых строк логов во время выполнения запроса — без необходимости повторной записи или переиндексирования данных в Grafana Loki. Основные выражения парсера: | json (для строк логов в формате JSON), | logfmt (для строк в формате ключ=значение), | regexp (для неструктурированных строк с использованием именованных групп захвата) и | pattern (для простого позиционного извлечения). После выполнения этапа парсера извлечённые поля становятся доступны как временные метки, которые можно использовать в выражениях фильтрации вида | level="error", в метрических агрегациях с sum by (level) или в шаблонах line_format. Например, {job="app"} | json | status_code >= 500 сначала разбирает JSON, извлекает status_code, а затем фильтрует строки, где это значение равно 500 и выше. Извлечение меток делает Grafana Loki мощным инструментом анализа логов даже для приложений, генерирующих неструктурированные или полуструктурированные строки, — стоимость парсинга переносится на момент выполнения запроса, а не записи.
Как это работает
Парсинг и извлечение меток (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 слишком широк ({job=~".*"} — сканирует всё); regex когда literal работает (медленнее); не используют | json на JSON-логах (regex hunt за полями); путаница label-фильтров {k="v"} vs line-фильтров | k="v" (разная семантика).