У меня есть дата, которая присутствует только один раз в каждом файле журнала, и я пытаюсь добавить эту дату ко всем последующим событиям после того, как она была сопоставлена один раз, что в некотором роде заставляет ее действовать как глобальная переменная. (Дата указана вверху документа, и я не могу использовать 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
plugin. Однако я получаю следующую ошибку:
Невозможно использовать более 1 обработчика фильтров, поскольку следующие плагины не работают более чем с одним обработчиком: memorize
Есть ли способ сделать этот фильтр потокобезопасным?