Comment gérer les non-correspondance Logstash grok filtres
Je me demande quelle est la meilleure approche à adopter avec mon Logstash Grok filtres. J'ai quelques filtres qui sont pour certaines entrées de journal, et ne s'appliquent à toutes les entrées. Ceux qui ne s'appliquent pas toujours de générer _grokparsefailure balises. Par exemple, j'ai un grok filtre pour chaque entrée de journal et il fonctionne très bien. Puis j'ai un autre filtre pour les messages d'erreur avec un retraçage. La traçabilité en amont du filtre jette un grokparsefailure pour chaque entrée de journal qui n'a pas un traceback.
Je préfère avoir juste passer la règle si il n'y a pas un match au lieu d'ajouter le parsefailure tag. J'utilise le parsefailure balise de trouver des choses qui ne sont pas à l'analyse correctement, pas des choses qui ne correspondent pas à un filtre particulier. Peut-être que c'est juste la nomenclature "analyser l'échec", qui me met. Pour moi, cela signifie qu'il ya quelque chose de mal avec le filtre (par exemple, une mauvaise mise en forme), non pas qu'il n'a pas de match.
La question est donc, comment dois-je gérer cela?
-
Faire le modèle de filtre en option à l'aide ?
-
(ab)utiliser le tag_on_failure option par la valeur de rien []
-
rendre le filtre conditionnel à l'aide de quelque chose comme "si" traceback "dans le message"
-
quelque chose d'autre que je ne suis pas pris en compte?
Merci d'avance.
MODIFIER
J'ai pris le chemin de l'ajout d'une condition à travers le filtre:
if [message] =~ /took\s\d+/{
grok {
patterns_dir => "/etc/logstash/patterns"
match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
add_tag => [ "stats", "servicetime" ]
}
}
Toujours intéressé dans les commentaires. Ce qui est considéré comme "meilleure pratique" ici?
Vous devez vous connecter pour publier un commentaire.
Lorsque cela est possible, j'irais avec un conditionnel wrapper tout comme celui que vous utilisez. N'hésitez pas à poster que comme une réponse!
Si votre application ne produit que quelques ligne différents formats, vous pouvez utiliser plusieurs correspondent à des motifs avec le grok filtre. Par défaut, le filtre de processus en place pour le premier match de succès:
Si votre logique est moins simple (peut-être vous avez besoin de vérifier l'état même plus d'une fois), le filtre grep peut être utile d'ajouter une balise. Quelque chose comme ceci:
tag_on_failure
peut fonctionner pour certains cas d'utilisation... mais je sais aussi le comportement à analyser les échecs est à peine documentées et peuvent être modifiés à l'avenir.Vous pouvez également ajouter
tag_on_failure => []
à votre grok strophe comme suit:grok échouera toujours, mais sans y ajouter les balises de tableau.
C'est le moyen le plus efficace de le faire. Ignorer le filtre
Vous pouvez également le faire
remove_tag => [ "_grokparsefailure" ]
chaque fois que vous avez un match.