Mam datę, która jest obecna tylko raz w każdym pliku dziennika i próbuję dodać tę datę do wszystkich następujących zdarzeń po tym, jak została dopasowana raz, co powoduje, że działa ona jak zmienna globalna w kilka sposobów. (Data znajduje się na górze dokumentu i nie jestem w stanie używać multiline
lub dokonać zmiany nazwy pliku lub zawartości)Logstash: Przechowywanie wartości w różnych zdarzeniach
za to, moje podejście jest użycie grep
filtra 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"
}
Wyrażenie regularne:
DATELINE (= Date: (?<mydate>[0-9]{8}))
Co Zauważyłem to, że pole grepdate
jest poprawnie dodawane do wszystkich wydarzeń - czyli to, co chcę - ale wartość tego pola nie jest sama data (wartość %{mydate}
), ale rzeczywisty ciąg "%{mydate}"
, z wyjątkiem sytuacji, gdy faktycznie jest dopasowywany po raz pierwszy (podczas analizowania faktycznej daty w moim pliku dziennika, pole grepdate
zawiera poprawną wartość)
Co mogę zrobić, aby to naprawić?
Każda pomoc jest bardzo doceniana.
Edit:
Jestem teraz próbuje rozwiązanie, które obejmuje korzystanie z wtyczki memorize
. Jednak otrzymuję następujący błąd:
Cannot use more than 1 filter worker because the following plugins don't work with more than one worker: memorize
Czy istnieje sposób, aby ten wątek filtra był bezpieczny?
Czy było to pomocne? – Val