【问题标题】:Logstash grok plugin, add field when matchedLogstash grok 插件,匹配时添加字段
【发布时间】:2019-09-09 23:09:33
【问题描述】:

我有一个像这样的 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"]

有没有办法做到这一点?

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    我不能 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})?)?"
                }
            }
    

    如您所见,第一个匹配完整的消息。我有一个字段线程,基本上就是 Logger 信息。但是,在我的设置中,http 请求将一些信息附加到线程名称。在这些情况下,我也想选择匹配这些。

    通过上述设置,如果线程可以匹配它们,则仅创建字段 reqType、reqPath、reqParam。否则他们不是。

    我希望这是你想要的。

    谢谢, 阿图尔

    【讨论】:

    • 不完全符合我的要求,但有助于解决我当前的问题。谢谢
    【解决方案2】:

    这样的?

    filter{
      grok { match =>  [ "message", "%{GREEDYDATA:types}: %{NUMBER:value}" ] }
      mutate {
        lowercase => [ "types" ]
        add_field => { "%{types}" => "%{value}"
                       "type" => "%{types}_type" }
        remove_field => [ "value", "types" ]
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多