Перейти к основному содержимому
Версия: 5.1

Grok Debugger

Grok Debugger — инструмент для интерактивного создания и тестирования Grok-шаблонов, применяемых для разбора неструктурированных текстовых сообщений. Он позволяет разрабатывать выражения, извлекающие из текстов структурированные поля, проверять корректность сопоставления шаблонов и устранять ошибки разбора.

Данная статья описывает работу с интерфейсом Grok Debugger, синтаксис шаблонов, основные типы Grok-паттернов, правила экранирования спецсимволов и рекомендации по оптимизации. Также приводятся примеры разбора логов с пояснениями.

Использование Grok Debugger​

Grok Debugger доступен в разделе Навигационное меню - Параметры системы - Настройки модулей - Основное - Grok Debugger.

Интерфейс Grok Debugger

На странице Grok Debugger доступны четыре области: Grok-шаблон, Тестируемые значения, Пользовательские шаблоны и Результаты.

Grok‑шаблон служит для ввода основного выражения, по которому происходит разбор лога. Примитивы (%{IP}, %{INT}, %{DATA} и т. д.) комбинируются в единую цепочку, задающую последовательность захвата полей.

Grok‑шаблон

Обратите внимание!

В области Grok‑шаблон допустимо использование только одного Grok‑шаблона.

Тестируемые значения принимают одну или несколько строк сообщений. Эти данные подаются на вход Grok‑шаблону и пользовательским определениям. Для добавления нового тестируемого значения необходимо нажать на кнопку + Добавить значение и ввести новое сообщение в появившейся строке.

Тестируемые значения

Пользовательские шаблоны позволяют объявить набор переиспользуемых конструкций, каждая из которых задается в формате FIELD_NAME %{GROK_TYPE:field_name}. В базовом выражении можно ссылаться на них по имени, что упрощает поддержку и повышает читаемость основного шаблона.

Пользовательские шаблоны

Область Результаты выводит JSON‑объект с именованными полями и их значениями, полученными после применения Grok‑шаблона к тестовым строкам. В случае ошибки разбора сообщения в поле результатов возникает соответствующее сообщение: Provided Grok expressions do not match field value: .... Результат разбора сообщения можно открыть в полноэкранном представленни.

Результаты


Работа с Grok‑шаблонами​

Grok‑шаблон — это строка, состоящая из встроенных или пользовательских паттернов, заключенных в форму %{PATTERN:field_name}. При разборе лога Grok‑шаблон последовательно пытается сопоставить текст и извлечь значения в именованные поля.

Grok-шаблон представляет собой удобную надстройку над регулярными выражениями. Каждый встроенный Grok-паттерн (например, BASE10NUM, IP, UUID) представляет собой фрагмент регулярного выражения. Например:

  • NUMBER = (?:%{BASE10NUM})
  • BASE10NUM = (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))

Синтаксис шаблонов​

Объявление стандартного паттерна​

%{PATTERN} — вставка одного из предопределенных Grok‑примитивов (IP, WORD, INT, DATA и пр.).

Привязка к полю​

%{PATTERN:имя_поля} — при совпадении текст сохраняется в поле имя_поля.

Пользовательский паттерн​

%{USER_PATTERN} или %{USER_PATTERN:имя} — ссылка на определенный пользовательский паттерн.

Необязательные фрагменты​

(?: ... )? — группа без присвоения значения полю, которая соответствует фрагменту, если он присутствует. Квантификатор ? означает, что группа может встретиться 0 или 1 раз.

Альтернативы​

(?:foo|bar) — группа, соответствующая одному из вариантов (в приведенном примере foo или bar).

Основные типы паттернов​

Ниже приведены наиболее часто используемые предопределенные Grok‑паттерны. Каждый из них позволяет извлечь распространенный тип данных из текстовых сообщений и проиллюстрирован примером.

ПаттернОписаниеПример
WORDНабор буквенно‑цифровых символов и подчеркиванийadmin_user
INTЦелое число404, 123
NUMBERЦелое или дробное число3.14, -10
DATAЛюбая последовательность символовзахватит все до конца строки или до следующего совпадения следом идущего паттерна
NOTSPACEЛюбая нескобочная строка без пробеловзахватит до пробела
IPIPv4‑адрес192.168.0.1
HOSTNAMEИмя хостаserver-1.local
UUIDУниверсальный уникальный идентификатор123e4567-e89b-12d3-a456-426614174000
HTTPDATEМетка времени в формате день/месяц/год:час:минута:сек+зона18/Jun/2025:11:27:27 +0000
TIMESTAMP_ISO8601Шаблон даты/времени ISO‑формата2025-07-03T12:34:56.789Z
GREEDYDATAЛюбая последовательность символов (жадный захват)захватит все до конца строки или до последнего совпадения следом идущего паттерна
Обратите внимание!

Для оптимальной производительности рекомендуется отдавать предпочтение узкопрофильным паттернам (WORD, INT, IP и т. п.) и минимизировать использование жадных типов, таких как GREEDYDATA, поскольку они могут значительно замедлять разбор текстовых сообщений.

Использование регулярных выражений внутри Grok‑шаблонов​

Помимо встроенных паттернов (%{WORD}, %{IP} и др.), в Grok-шаблонах допустимо использовать обычные регулярные выражения (regex) — в том числе с именованными группами и логическими конструкциями.

Это полезно в тех случаях, когда предопределенного Grok-паттерна недостаточно или требуется более строгая проверка значений.

Например, для строки:

sessionID=QZA-7513 STATUS=FAIL user=admin ip=10.0.0.5

Можно использовать такой шаблон:

^sessionID=%{WORD:prefix}-%{INT:session} STATUS=(?<status>OK|FAIL) user=%{WORD:user} ip=%{IP:ip_address}$

Здесь:

  • (?<status>OK|FAIL) — это регулярное выражение с именованной группой status, допускающее только два допустимых значения: OK или FAIL

  • остальные поля извлекаются с помощью стандартных Grok-паттернов

Особенности использования RegEx​

Регулярные выражения можно свободно вставлять в тело Grok-шаблона и комбинировать с Grok-примитивами. Это особенно полезно, когда необходимо задать строгие условия на формат значений или ограничить допустимые варианты. Именованные группы вида (?<field_name>...) позволяют извлекать данные в поля так же, как и %{PATTERN:field_name}, но с большей гибкостью — например, при проверке принадлежности значения к фиксированному множеству, как в конструкции (?<status>OK|FAIL).

Экранирование спецсимволов​

Иногда в логах встречаются символы, которые в регулярных выражениях и Grok‑шаблонах имеют специальное значение и поэтому требуют экранирования. Например, строка:

[WARN] service started at 2025-07-04T12:01:31Z

Содержит квадратные скобки, которые без экранирования Grok воспримет как начало и конец класса символов. Чтобы корректно разобрать уровень логирования WARN, шаблон необходимо определить так:

\[%{WORD:level}\] %{GREEDYDATA:message}

В данном случае экранирование \[ и \] позволяет искать буквальные символы [ и ], а не трактовать их как метасимволы, задающие класс (диапазон) символов.

При разборе полей, обернутых в двойные кавычки, необходимо экранировать знак " обратным слэшем, иначе парсер Grok будет считать кавычку частью синтаксиса шаблона. Например, для строки:

user="alice" action="login"

Корректный шаблон выглядит следующим образом:

user=\"%{WORD:username}\" action=\"%{WORD:action}\"

Без экранирования (\") Grok-интерпретатор попытается трактовать " как границу литерала или выдаст ошибку разбора.

Обратите внимание!

Экранирование также необходимо для следующих символов: ., \, +, *, ?, {, }, (, ), ^, $.


Примеры разбора текстовых сообщений​

Ниже приведены типовые примеры использования Grok-шаблонов при разборе текстовых сообщений.

Разбор Apache‑лога​

Сообщение
10.19.86.202 - - [18/Jun/2025:11:27:27 +0000] "GET /index.html HTTP/1.1" 200 1024

Grok‑шаблон
^%{IP:client} - - \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATH:request} HTTP/%{NUMBER:version}" %{INT:status} %{INT:bytes}$

В данном шаблоне используются точные типы (IP, HTTPDATE, INT) без жадных паттернов. Экранированные скобки и кавычки фиксируют структуру записи.

Обратите внимание!

При работе с Grok-шаблонами рекомендуется явно указывать границы строки с помощью якорей ^ и $. Без этих символов движок Grok будет искать совпадения в любой части строки, что при несоответствии шаблону может привести к множеству лишних попыток сопоставления. Это существенно снижает производительность — особенно при массовой обработке логов — и может замедлить парсинг в 6–10 раз. Использование якорей ограничивает область разбора, позволяет быстрее отбрасывать неподходящие записи и увеличивает скорость разбора текста.

Разбор лога с использованием пользовательского шаблона​

Сообщение
event=login user=admin ip=192.168.1.100
Пользовательский шаблон
LOGKV %{WORD:key}=%{DATA:value}
Grok‑шаблон
^%{LOGKV:event} %{LOGKV:user} %{LOGKV:ip}$

Пользовательский шаблон LOGKV задает формат ключ=значение, где key и value — независимые поля. Он переиспользуется трижды, делая основной шаблон компактным и читаемым. Это особенно полезно в логах, где формат повторяется с разными полями.

Разбор лога с использованием регулярных выражений и Grok-паттернов​

Лог
sessionID=QZA-7513 STATUS=FAIL user=admin ip=10.0.0.5
Grok‑шаблон
^sessionID=%{WORD:prefix}-%{INT:session} STATUS=(?<status>OK|FAIL) user=%{WORD:user} ip=%{IP:ip_address}$

В приведенном шаблоне объединены Grok-паттерны и обычное регулярное выражение с именованной группой (?<status>...). Такой подход позволяет использовать строгое регулярное ограничение на значение status, при этом повторно использовать готовые Grok-паттерны для других полей. Это облегчает читаемость шаблона и позволяет точно контролировать формат полей, если Grok-примитив слишком широк.