在Logstash过滤器中使用多个grok模式的正确方法是什么?
这两个选项的有效日志存储配置是什么在Logstash过滤器中使用多个grok模式的正确方法是什么?,logstash,logstash-grok,Logstash,Logstash Grok,这两个选项的有效日志存储配置是什么 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}%{
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模式中还不能正常工作 相比之下,两者的性能几乎相同,因为的默认值为
true
break\u on\u match
- 值类型为布尔值
- 默认值为true
filter {
grok {
match => [ "message", "PATTERN1", "PATTERN2" ]
}
}
请同时参考此答案,第一种方法更好。它将尝试不同的模式,直到找到匹配;如果没有找到匹配项,您将得到一个错误标记。另一方面,第二种方法将尝试匹配两次,第一次可能成功,第二次可能失败,因此您将有一个错误标签。您就是那个人。当我尝试匹配两个不同的属性时,我没有注意到break_on_match,每个属性都有一个grok表达式。