Logstash: mantendo um valor entre os eventos
Eu tenho uma data que está presente apenas uma vez em cada arquivo de log e estou tentando adicionar essa data a todos os seguintes eventos depois que ela foi correspondida uma vez, fazendo com que ela funcione como uma variável global de alguma maneira. (A data está na parte superior do documento e não consigo usarmultiline
ou faça alterações no nome ou no conteúdo do arquivo)
Para isso, minha abordagem é usar umgrep
filtrar comdrop => 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"
}
Expressão regular:
DATELINE (= Date: (?<mydate>[0-9]{8}))
O que noto é que ogrepdate
está sendo adicionado corretamente a todos os eventos - que é o que eu quero -, mas o valor desse campo não é a data em si (o valor de%{mydate}
), mas a sequência real"%{mydate}"
, exceto quando estiver sendo correspondido pela primeira vez (ao analisar a data real no meu arquivo de log, ogrepdate
campo contém o valor correto)
Oque posso fazer para consertar isso?
Qualquer ajuda é muito apreciada.
Editar:
Agora estou tentando uma solução que inclua o uso domemorize
plugar. No entanto, estou recebendo o seguinte erro:
Não é possível usar mais de um trabalhador de filtro, porque os seguintes plug-ins não funcionam com mais de um trabalhador: memorize
Existe uma maneira de tornar esse filtro seguro para threads?