在Logstash过滤器中拥有多个grok模式的正确方法是什么?

时间:2018-05-15 11:59:08

标签: logstash logstash-grok

这两个选项的有效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模式。

1 个答案:

答案 0 :(得分:1)

相比之下,由于break_on_match的默认值为true,因此两者的表现几乎相同。

break_on_match

  • 值类型为布尔值
  • 默认值为true
  

第一场比赛中断。 grok的第一次成功比赛将导致>过滤器完成。如果你想让grok尝试所有模式(也许你正在解析不同的东西),那么将其设置为false。

您的第一个模式可以进一步简化如下,

filter {
   grok {
     match => [ "message", "PATTERN1", "PATTERN2" ]
    }
}

请同时参考此答案,Multiple patterns in one log