如何使用 grok 过滤器匹配第一次出现的正则表达式

how to match first regex occurrence using grok filter

我的日志格式如下my.package.name classname: my_message

我想去掉 class 前缀。

例如:

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 匹配。

如何匹配第 : 次出现?

.*?勉强用.*。正常的 .* 会尽可能多地匹配,而勉强的 .*? 会尽可能少地匹配。

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

DATA .*?
GREEDYDATA .*

因此您可以将模式定义为

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