我的logtash配置有两个过滤器: 1)解析日志消息;2)解析JSON消息:
filter {
grok {
match => { "message" =>
"\[%{TIMESTAMP_ISO8601:log_time}\]\[%{LOGLEVEL:log_level}(?<space>\s*)\]\[%{DATA:thread_name}\]\[%{DATA:class_name}\]%{GREEDYDATA:log_msg}" }
}
json {
source => "message"
add_tag => ["RiskExplain"]
}
}目前,如果记录了一条JSON消息,它将在被json过滤器解析之前使grok过滤器失败。因为它没有通过第一个过滤器,所以它将收到一个_grokparsefailure标记。我想删除这个标签,并且只在两个过滤器都失败的情况下才应用解析失败标签。这有可能吗?
发布于 2020-08-13 23:13:44
grok {
match => { "message" =>
"\[%{TIMESTAMP_ISO8601:log_time}\]\[%{LOGLEVEL:log_level}(?<space>\s*)\]\[%{DATA:thread_name}\]\[%{DATA:class_name}\]%{GREEDYDATA:log_msg}" }
}
if "_grokparsefailure" in [tags] {
json {
source => "message"
add_tag => ["RiskExplain"]
tag_on_failure => ["The_Tag_You_Want"]
remove_tag => [ "_grokparsefailure" ]
}
}这样,仅当grok筛选器无法解析消息时才会使用json筛选器。json过滤器将删除_grokparsefailure标记,如果失败,将添加The_Tag_You_Want标记。
https://stackoverflow.com/questions/63392040
复制相似问题