我在思考如何处理我的Logstash Grok过滤器的最佳方案。我有一些特定于某些日志条目的过滤器,而不是适用于所有条目。那些不适用的过滤器总是生成_grokparsefailure标签。例如,我有一个grok过滤器适用于每个日志条目,并且它很好地工作。然后我有另一个过滤器,它是用于带有追踪返回的错误消息的。对于每个没有追踪返回的日志条目,追踪过滤器都会抛出一个grokparsefailure。
我宁愿让它在没有匹配的情况下通过规则,而不是添加解析失败的标签。我使用解析失败的标签来查找无法正确解析的内容,而不是仅仅是没有匹配到特定过滤器的内容。也许只是“解析失败”这个术语让我感到困惑。对我来说,这意味着过滤器存在问题(例如格式错误),而不是没有匹配。
所以问题是,我应该如何处理这个问题?
使用?使过滤模式变为可选项
使用tag_on_failure选项滥用设置为空[]
使用类似“if traceback in message”的条件使过滤器具有条件性
还有其他我没有考虑的方法吗?
提前感谢。
编辑
我采用了在过滤器周围添加条件的方法:
if [message] =~ /took\s\d+/ {
grok {
patterns_dir => "/etc/logstash/patterns"
match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
add_tag => [ "stats", "servicetime" ]
}
}
尽管如此,我仍然对反馈感兴趣。这里什么被认为是“最佳实践”?
tag_on_failure
可能适用于某些使用情况...但我也知道在数据解析失败时的行为几乎没有记录,并且将来可能会发生变化。 - rutter