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 содержит правильное значение)

Что я могу сделать, чтобы исправить это?

Любая помощь приветствуется.

Изменить:

Сейчас я пробую решение, включающее использование плагина memorizeplugin. Однако я получаю следующую ошибку:

Невозможно использовать более 1 обработчика фильтров, поскольку следующие плагины не работают более чем с одним обработчиком: memorize

Есть ли способ сделать этот фильтр потокобезопасным?


person halpsb    schedule 25.03.2015    source источник


Ответы (1)