我想知道使用我的Logstash Grok过滤器的最佳方法是什么 . 我有一些特定日志条目的过滤器,不适用于所有条目 . 那些不适用的标签始终生成_grokparsefailure标签 . 例如,我有一个grok过滤器,用于每个日志条目,它工作正常 . 然后我有另一个过滤器,用于带有回溯的错误消息 . 回溯过滤器为每个没有回溯的日志条目抛出grokparsefailure .
如果没有匹配而不是添加parsefailure标记,我宁愿让它通过规则 . 我使用parsefailure标记来查找未正确解析的内容,而不是与特定过滤器不匹配的内容 . 也许只是命名“解析失败”才能得到我 . 对我来说,这意味着过滤器有问题(例如格式错误),而不是它不匹配 .
所以问题是,我该如何处理?
-
使用过滤模式可选吗?
-
(ab)使用tag_on_failure选项将其设置为空[]
-
使用类似“如果消息中的跟踪”的条件使过滤器有条件
-
别的什么我不考虑?
提前致谢 .
EDIT
我采取了在过滤器周围添加条件的路径:
if [message] =~ /took\s\d+/ {
grok {
patterns_dir => "/etc/logstash/patterns"
match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
add_tag => [ "stats", "servicetime" ]
}
}
仍然对反馈感兴趣 . 什么被认为是“最佳实践”?
4 回答
如果可能的话,我会像你正在使用的那样使用conditional wrapper . 随意张贴作为答案!
如果您的应用程序只生成几种不同的行格式,则可以将多个匹配模式与grok filter一起使用 . 默认情况下,过滤器将处理第一次成功匹配:
如果您的逻辑不那么直接(可能需要多次检查相同的条件),grep filter可用于添加标记 . 像这样的东西:
这是最有效的方法 . 忽略过滤器
你也可以这样做
remove_tag => [“_ greenkparsefailure”]
只要你有比赛 .
您也可以将
tag_on_failure => []
添加到您的grok节中,如下所示:grok仍然会失败,但是会在不添加标签数组的情况下完成 .