У меня есть дата, которая присутствует только один раз в каждом файле журнала, и я пытаюсь добавить эту дату ко всем следующим событиям после того, как она была сопоставлена один раз, что делает ее действующей как глобальная переменная в в некотором смысле. (Дата находится в верхней части документа, и я не могу использовать multiline
или вносить изменения в имени файла или содержимого)Logstash: Сохранение значения в событиях
Для этого, мой подход заключается в использовании 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
содержит правильное значение)
Что я могу сделать, чтобы исправить это?
Любая помощь очень ценится.
Edit:
Я сейчас пытаюсь решение, которое включает в себя использование memorize
плагина. Тем не менее, я получаю следующую ошибку:
Cannot use more than 1 filter worker because the following plugins don't work with more than one worker: memorize
Есть ли способ сделать этот фильтр поточно-безопасным?
Было ли это полезно вообще? – Val