如何使用 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}
我的日志格式如下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}