regex
Процессор regex
Процессор regex извлекает данные из текстовых полей события с помощью регулярных выражений Go (синтаксис RE2). Извлечение происходит через именованные группы захвата.
Конфигурация
processors:
- module: regex
rules:
- expr: "<регулярное выражение>"
from: "<поле-источник>"
subgroups:
- name: "<имя группы захвата>"
to: "<целевое поле>"
value-type: "<тип значения>"
Параметры правила (rules[])
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
expr | string | — | Регулярное выражение в синтаксисе RE2 с именованными группами захвата (?P<имя>...) |
from | string | Raw | Поле события, к которому применяется выражение |
subgroups | array | — | Описание именованных групп захвата и их маппинг на поля события |
Параметры подгруппы (subgroups[])
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
name | string | — | Имя группы захвата в регулярном выражении (должно совпадать с (?P<name>...)) |
to | string | нормализованное name | Целевое поле события. Автоматически нормализуется в PascalCase |
value-type | string | автоопределение | Тип данных: string, int, int64, uint64, float64, bool, ip, time и др. |
Особенности
- Используется синтаксис RE2 — lookahead и lookbehind не поддерживаются. Для более высокоуровневого извлечения рассмотрите процессор grok.
- Каждая именованная группа в
exprдолжна быть описана вsubgroups. Если имя подгруппы отсутствует в выражении, процессор вернёт ошибку конфигурации. - Если
toне указано, имя поля формируется изnameс заменой_на.и нормализацией вPascalCase.
Пример
Разбор строки syslog-формата:
processors:
- module: regex
rules:
- expr: '(?P<timestamp>\w{3}\s+\d+\s[\d:]+)\s(?P<hostname>[\w\-.]+)\s(?P<process>\w+)\[(?P<pid>\d+)\]:\s(?P<message>.*)'
from: Raw
subgroups:
- name: timestamp
to: CTime
value-type: time
- name: hostname
to: ECS.Host.Hostname
- name: process
to: ECS.Process.Name
- name: pid
to: ECS.Process.PID
value-type: uint64
- name: message
to: ECS.Message
Исходное событие:
Jan 15 10:30:45 webserver01 nginx[12345]: GET /api/health 200
Результат:
| Поле | Значение |
|---|---|
CTime | Jan 15 10:30:45 (разобрано как время) |
ECS.Host.Hostname | webserver01 |
ECS.Process.Name | nginx |
ECS.Process.PID | 12345 |
ECS.Message | GET /api/health 200 |