在日志存储 grok 过滤器中获取消息中的可选字段



我正在尝试提取此日志中的毫秒数

20190726160424 [信息] [concurrent/forasdfMES-managedThreadFactory-Thread-10] - Metricsdceptor: ## 结束通话: Historirrtory.getHistrrOrder 花了 2979 女士

问题是,并非所有日志行都包含该字符串现在我想选择性地将其提取到持续时间字段中。我试过这个,但什么也没发生....没有错误,但也没有结果。

 grok
 {
   match => ["message", "(took (?<duration>[d]+) ms)?"]
 }

我做错了什么?

谢谢大家!

一种解决方案是仅在以 ms 结尾的日志行上应用 grok 过滤器。可以在配置中使用条件来完成此操作。

if [message] =~ /took d+ ms$/ {
   grok {
     match => ["message", "took %{NUMBER:duration} ms"]
   }
}

我无法解释为什么,但如果你锚定它,它会起作用

grok { match => { "message" => "(took (?<duration>d+) ms)?$" } }

最新更新