如何使用grok过滤器匹配第一个正则表达式

时间:2017-04-19 13:50:00

标签: regex logstash logstash-grok

我的日志采用以下格式my.package.name classname: my_message

我想削减类perfix。

例如:

com.example.Handler doPost: request received, jim:jay foo: bar

转换为:

request received, jim:jay foo: bar

我绑了这个

filter {
  grok {
    match => {"message" => "^(.*):%{GREEDYDATA:request}"}
  }
}

output { stdout { codec => rubydebug  }}

但这就是我得到的:

{
       "request" => " bar",
       "message" => "com.example.Handler doPost:  request  received, jim:jay foo: bar"
       ...
}

似乎grok匹配最后一次正则表达式。

如何通过第一次 :匹配来匹配?

1 个答案:

答案 0 :(得分:3)

使用.*使用不情愿的.*?。正常的.*会尽可能多地匹配,而不情愿的.*?会尽可能地匹配。

有趣的事实:logstash grok数据模式是

DATA .*?
GREEDYDATA .*

因此您可以将模式定义为

^%{DATA}:%{GREEDYDATA:request}