这两个选项的有效logstash配置是什么?
else if [pipeline] == "tomcat_all" {
grok {
match => [ "message", "%{MONTH}%{SPACE}%{MONTHDAY},%{SPACE}%{YEAR}%{SPACE}%{HOUR}:?%{MINUTE}(?::?%{SECOND})%{SPACE}(?:AM|PM)%{SPACE}%{NOTSPACE:class}%{SPACE}%{NOTSPACE:type_log}%{SPACE}%{WORD:loglevel}:%{SPACE}%{GREEDYDATA:log_text}" ]
match => [ "message", "%{TIME:timestamp}%{SPACE}\|-%{WORD:loglevel}%{SPACE}in%{SPACE}%{NOTSPACE:class}%{SPACE}%{GREEDYDATA:log_text}" ]
...
else if [pipeline] == "123" {
grok {
match => [ "message", "%{MONTH}%{SPACE}%{MONTHDAY},%{SPACE}%{YEAR}%{SPACE}%{HOUR}:?%{MINUTE}(?::?%{SECOND})%{SPACE}(?:AM|PM)%{SPACE}%{NOTSPACE:class}%{SPACE}%{NOTSPACE:type_log}%{SPACE}%{WORD:loglevel}:%{SPACE}%{GREEDYDATA:log_text}" ]
}
grok {
match => [ "message", "%{TIME:timestamp}%{SPACE}\|-%{WORD:loglevel}%{SPACE}in%{SPACE}%{NOTSPACE:class}%{SPACE}%{GREEDYDATA:log_text}" ]
}
Logstash似乎从两种配置开始都很好并且没有报告任何错误,但是grok解析还没有正确处理多个grok模式。
答案 0 :(得分:1)
相比之下,由于break_on_match的默认值为true
,因此两者的表现几乎相同。
break_on_match
第一场比赛中断。 grok的第一次成功比赛将导致>过滤器完成。如果你想让grok尝试所有模式(也许你正在解析不同的东西),那么将其设置为false。
您的第一个模式可以进一步简化如下,
filter {
grok {
match => [ "message", "PATTERN1", "PATTERN2" ]
}
}
请同时参考此答案,Multiple patterns in one log