Logstash: Wert zwischen Ereignissen beibehalten
Ich habe ein Datum, das nur einmal in jeder Protokolldatei vorhanden ist, und ich versuche, dieses Datum zu allen folgenden Ereignissen hinzuzufügen, nachdem es einmal abgeglichen wurde, sodass es in gewisser Weise wie eine globale Variable wirkt. (Das Datum steht oben im Dokument und ich kann @ nicht verwendemultiline
oder ändern Sie den Dateinamen oder den Inhalt)
Für diesen Zweck benutze ich eingrep
Filter mitdrop => 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"
}
Regulären Ausdruck
DATELINE (= Date: (?<mydate>[0-9]{8}))
as mir auffällt ist, dass dasgrepdate
Feld wird korrekt zu allen Ereignissen hinzugefügt - was ich will - aber der Wert dieses Feldes ist nicht das Datum selbst (der Wert von%{mydate}
), aber die tatsächliche Zeichenfolge"%{mydate}"
, außer wenn tatsächlich zum ersten Mal eine Übereinstimmung gefunden wird (beim Parsen des tatsächlichen Datums in meiner Protokolldatei wird dasgrepdate
Feld enthält den korrekten Wert)
Was kann ich tun, um das zu beheben?
Jede Hilfe wird sehr geschätzt.
Bearbeiten
Ich versuche jetzt eine Lösung, die die Verwendung des @ enthämemorize
plugin. Ich erhalte jedoch den folgenden Fehler:
Kann nicht mehr als einen Filterworker verwenden, da die folgenden Plugins nicht mit mehr als einem Worker funktionieren: memorize
Gibt es eine Möglichkeit, diesen Filter threadsicher zu machen?