Logstash grok插件,匹配时添加字段

Logstash grok插件,匹配时添加字段,logstash,logstash-grok,Logstash,Logstash Grok,我有一个像这样的格洛克比赛: grok{ match => [ “message”, “Duration: %{NUMBER:duration}”, “Speed: %{NUMBER:speed}” ] } 我还想在捕获的变量中添加另一个字段,如果它与grok模式匹配的话。我知道我可以使用mutate插件和if-else来添加新字段,但我有太多的匹配项,这样会太长。例如,我想捕获给定文本的右侧字段 "Duration: 12" => [duration: "12", type: "

我有一个像这样的格洛克比赛:

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" ]
  }
}

不完全是我要求的,但有助于解决我目前的问题。谢谢