Logstash: поддержание ценности событий
У меня есть дата, которая присутствует только один раз в каждом файле журнала, и я пытаюсь добавить эту дату ко всем последующим событиям после того, как она была сопоставлена один раз, в некоторых отношениях она действует как глобальная переменная. (Дата находится вверху документа, и я не могу использоватьmultiline
или внесите изменения в имя файла или содержимое)
Для этого мой подход заключается в использованииgrep
фильтр сdrop => false
.
grok {
patterns_dir => "[...]"
match => [ "message", "%{DATELINE}" ]
tag_on_failure => [ ]
}
grep {
add_field => { "grepdate" => "%{mydate}" }
drop => false
}
date {
locale => "en"
timezone => "Europe/Paris"
match => [ "grepdate", "yyyyMMdd" ]
target => "grepdate"
}
Регулярное выражение:
DATELINE (= Date: (?<mydate>[0-9]{8}))
Я замечаю, чтоgrepdate
поле корректно добавляется ко всем событиям - это то, что я хочу - но значение этого поля не является самой датой (значение%{mydate}
), но фактическая строка"%{mydate}"
, за исключением случаев, когда на самом деле сопоставляются в первый раз (при анализе фактической даты в моем файле журнала,grepdate
поле содержит правильное значение)
Что я могу сделать, чтобы это исправить?
Любая помощь очень ценится.
Редактировать:
Сейчас я пытаюсь найти решение, которое включает в себя использованиеmemorize
плагин. Однако я получаю следующую ошибку:
Невозможно использовать более одного работника фильтра, потому что следующие плагины не работают с более чем одним работником: запомнить
Есть ли способ сделать этот фильтр потокобезопасным?