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

regex

Процессор regex

Процессор regex извлекает данные из текстовых полей события с помощью регулярных выражений Go (синтаксис RE2). Извлечение происходит через именованные группы захвата.

Конфигурация

processors:
- module: regex
rules:
- expr: "<регулярное выражение>"
from: "<поле-источник>"
subgroups:
- name: "<имя группы захвата>"
to: "<целевое поле>"
value-type: "<тип значения>"

Параметры правила (rules[])

ПараметрТипПо умолчаниюОписание
exprstringРегулярное выражение в синтаксисе RE2 с именованными группами захвата (?P<имя>...)
fromstringRawПоле события, к которому применяется выражение
subgroupsarrayОписание именованных групп захвата и их маппинг на поля события

Параметры подгруппы (subgroups[])

ПараметрТипПо умолчаниюОписание
namestringИмя группы захвата в регулярном выражении (должно совпадать с (?P<name>...))
tostringнормализованное nameЦелевое поле события. Автоматически нормализуется в PascalCase
value-typestringавтоопределениеТип данных: 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

Результат:

ПолеЗначение
CTimeJan 15 10:30:45 (разобрано как время)
ECS.Host.Hostnamewebserver01
ECS.Process.Namenginx
ECS.Process.PID12345
ECS.MessageGET /api/health 200