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 übereinstimmte, so dass es wie eine globale Variable in einige Wege. (Das Datum am oberen Rand des Dokuments ist, und ich bin nicht in der Lage multiline
zu verwenden oder Änderungen an den Dateinamen oder Inhalt)Logstash: Keeping einen Wert über Ereignisse
Dazu mein Ansatz ist es, ein grep
Filter mit drop => false
zu verwenden.
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ärer Ausdruck:
DATELINE (= Date: (?<mydate>[0-9]{8}))
Was ich feststellen, dass das grepdate
Feld korrekt zu allen Veranstaltungen hinzugefügt werden wird - das ist, was ich will - aber der Wert dieses Feldes ist nicht die Datum selbst (der Wert von %{mydate}
), aber die tatsächliche Zeichenfolge "%{mydate}"
, außer wenn tatsächlich zum ersten Mal verglichen wird (beim Analysieren des tatsächlichen Datums in meiner Protokolldatei enthält das grepdate
Feld den richtigen Wert)
Was kann ich tun, um das Problem zu beheben?
Jede Hilfe wird sehr geschätzt.
Edit:
ich jetzt eine Lösung versucht, die die Verwendung der memorize
Plugin enthält. Ich erhalte jedoch den folgenden Fehler:
Cannot use more than 1 filter worker because the following plugins don't work with more than one worker: memorize
Gibt es eine Möglichkeit, diesen Filter threadsicher zu machen?
War das überhaupt hilfreich? – Val