Logstash не обрабатывает регулярные выражения нулевой длины в шаблоне Grok в контейнере докеров

Мне нужно использовать регулярное выражение нулевой длины в шаблоне Грока.

Я протестировал его в онлайн-конструкторе grok. Оно работает.

Но тот же шаблон не работает в моем контейнере докеров. Я тестировал в Logstash v6.6.1, v7.3.0. Я также пробовал другое регулярное выражение: .{0}, ^$.

Пример журнала:

17: 16: 09,691 INFO blablabla

Паттерн Logstash

%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>())

Результаты конструктора Grok. Ожидается

MATCHED
time    17:16:09,691
severity    INFO
message blablabla
zero_length_field 

Результат стандартного вывода - контейнер докеров

   "severity" => "info",
   "time" => 17:16:09,691
   "version" => "0.3.0",
   "message" => " blablabla",


person Aureum    schedule 22.08.2019    source источник
comment
Установите keep_empty_captures на true   -  person Wiktor Stribiżew    schedule 22.08.2019
comment
Попробуйте grok { keep_empty_captures => true match => { "message" => "%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>)"} }   -  person Wiktor Stribiżew    schedule 22.08.2019
comment
@ WiktorStribiżew, не могли бы вы тогда опубликовать это в качестве ответа? :)   -  person Slava Semushin    schedule 22.08.2019


Ответы (1)


Вам необходимо установить keep_empty_captures на true как по умолчанию, установлено значение false:

keep_empty_captures
- Тип значения: логическое
- значение по умолчанию false
Если true, оставляйте пустые захваты в качестве полей событий.

Итак, используйте

grok { 
  keep_empty_captures => true
  match => { "message" => "%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>)"}
}
person Wiktor Stribiżew    schedule 22.08.2019