Como lidar com filtros Grok Logstash não correspondentes
Gostaria de saber qual a melhor abordagem a ser adotada com os meus filtros Logstash Grok. Eu tenho alguns filtros que são para entradas de log específicas e não serão aplicáveis a todas as entradas. Os que não se aplicam sempre geram tags _grokparsefailure. Por exemplo, eu tenho um filtro grok que é para cada entrada de log e funciona bem. Então eu tenho outro filtro que é para mensagens de erro com rastreamentos. O filtro traceback gera um grokparsefailure para cada entrada de log única que não possui um traceback.
Eu preferiria que apenas passasse a regra se não houver uma correspondência, em vez de adicionar a tag parsefailure. Eu uso a tag de análise de falhas para encontrar coisas que não estão analisando corretamente, não coisas que simplesmente não correspondem a um filtro específico. Talvez seja apenas a nomenclatura "falha na análise" que me pegue. Para mim, isso significa que há algo errado com o filtro (por exemplo, mal formatado), não que não corresponda.
Portanto, a questão é: como devo lidar com isso?
Tornar o padrão de filtro opcional usando?
(ab) use a opção tag_on_failure configurando-a para nada []
condicione o filtro usando algo como "if traceback in message"
outra coisa que eu não estou considerando?
Desde já, obrigado.
EDITAR
Peguei o caminho de adicionar um condicional ao redor do filtro:
if [message] =~ /took\s\d+/ {
grok {
patterns_dir => "/etc/logstash/patterns"
match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
add_tag => [ "stats", "servicetime" ]
}
}
Ainda estou interessado em feedback. O que é considerado "melhor prática" aqui?