Logstash grok插件,匹配时添加字段
Logstash grok plugin, add field when matched
我有这样的 grok 匹配:
grok{ match => [ “message”, “Duration: %{NUMBER:duration}”, “Speed: %{NUMBER:speed}” ] }
如果匹配 grok 模式,我还想将另一个字段添加到捕获的变量中。我知道我可以使用 mutate 插件和 if-else 来添加新字段,但我有太多匹配项,这样会太长。例如,我想捕获给定文本的右侧字段。
"Duration: 12" => [duration: "12", type: "duration_type"]
"Speed: 12" => [speed: "12", type: "speed_type"]
有办法吗?
我不是 100% 确定这是否是您需要的,但我做了类似的事情。我对我的消息进行了基本解析,然后我使用可选匹配项额外分析了一个特定字段。
grok {
break_on_match => false
patterns_dir => "/etc/logstash/conf.d/patterns"
match => {
"message" => "\[%{LOGLEVEL:level}\] \[%{IPORHOST:from}\] %{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] \[%{NOTSPACE:logger}\] %{GREEDYDATA:msg}"
"thread" => "(%{GREEDYDATA}%{REQUEST_TYPE:reqType}%{SPACE}%{URIPATH:reqPath}(%{URIPARAM:reqParam})?)?"
}
}
如您所见,第一个简单地匹配了完整的消息。我有一个现场线程,基本上是记录器信息。但是,在我的设置中,http 请求将一些信息附加到线程名称。在这些情况下,我也想选择性地匹配这些。
通过以上设置,仅在线程可以匹配时创建字段 reqType、reqPath、reqParam。否则他们不是。
希望这就是您想要的。
谢谢,
阿图尔
是这样的吗?
filter{
grok { match => [ "message", "%{GREEDYDATA:types}: %{NUMBER:value}" ] }
mutate {
lowercase => [ "types" ]
add_field => { "%{types}" => "%{value}"
"type" => "%{types}_type" }
remove_field => [ "value", "types" ]
}
}
我有这样的 grok 匹配:
grok{ match => [ “message”, “Duration: %{NUMBER:duration}”, “Speed: %{NUMBER:speed}” ] }
如果匹配 grok 模式,我还想将另一个字段添加到捕获的变量中。我知道我可以使用 mutate 插件和 if-else 来添加新字段,但我有太多匹配项,这样会太长。例如,我想捕获给定文本的右侧字段。
"Duration: 12" => [duration: "12", type: "duration_type"]
"Speed: 12" => [speed: "12", type: "speed_type"]
有办法吗?
我不是 100% 确定这是否是您需要的,但我做了类似的事情。我对我的消息进行了基本解析,然后我使用可选匹配项额外分析了一个特定字段。
grok {
break_on_match => false
patterns_dir => "/etc/logstash/conf.d/patterns"
match => {
"message" => "\[%{LOGLEVEL:level}\] \[%{IPORHOST:from}\] %{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] \[%{NOTSPACE:logger}\] %{GREEDYDATA:msg}"
"thread" => "(%{GREEDYDATA}%{REQUEST_TYPE:reqType}%{SPACE}%{URIPATH:reqPath}(%{URIPARAM:reqParam})?)?"
}
}
如您所见,第一个简单地匹配了完整的消息。我有一个现场线程,基本上是记录器信息。但是,在我的设置中,http 请求将一些信息附加到线程名称。在这些情况下,我也想选择性地匹配这些。
通过以上设置,仅在线程可以匹配时创建字段 reqType、reqPath、reqParam。否则他们不是。
希望这就是您想要的。
谢谢, 阿图尔
是这样的吗?
filter{
grok { match => [ "message", "%{GREEDYDATA:types}: %{NUMBER:value}" ] }
mutate {
lowercase => [ "types" ]
add_field => { "%{types}" => "%{value}"
"type" => "%{types}_type" }
remove_field => [ "value", "types" ]
}
}