Logstash grok匹配2种模式
日志行的示例:Logstash grok匹配2种模式,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,日志行的示例: 2017-05-04 10:37:22,972 INFO [My.Super.JAVA.CLASS] Outbound Message bla bla 2017-05-04 10:38:22,972 INFO [My.Super.JAVA.CLASS] Inbound Message bla bla 2017-05-04 10:39:22,972 INFO [My.Super.JAVA.CLASS] some other bla bla 我想做的是做3个图案,每种类型一个。以
2017-05-04 10:37:22,972 INFO [My.Super.JAVA.CLASS] Outbound Message bla bla
2017-05-04 10:38:22,972 INFO [My.Super.JAVA.CLASS] Inbound Message bla bla
2017-05-04 10:39:22,972 INFO [My.Super.JAVA.CLASS] some other bla bla
我想做的是做3个图案,每种类型一个。以下是我所做的:
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Outbound Message%{GREEDYDATA:stuff}']
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Inbound Message%{GREEDYDATA:otherstuff}']
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*%{GREEDYDATA:messageInfo}'
以第一条日志消息为例,它将与第一个和第三个模式匹配,这显然是因为GREEDYDATA部分。
我的问题是,如何使前两条消息只与前两种模式匹配(例如,将它们从第三种模式中排除)
更新(已解决):
我在grok中用了if。每当我匹配一个模式时,我都会向它添加一个标记'grokked',然后,我测试标记中是否有'grokked',如果没有,我会匹配第二个模式,依此类推。。。
更多详细信息:我会使用fluentd来代替logstash。但是 回到主题:寻找你的共同点并避免它。另一个选项是添加标记:
filter {
grok {
add_tag => [ "foo_%{somefield}" ]
}
}
或:
filter {
grok {
match => { "message" => "%{SYSLOGBASE} %{DATA:message}" }
overwrite => [ "message" ]
}
}