在Logstash Grok过滤器中从消息中获取可选字段

时间:2019-07-26 18:54:23

标签: logstash grok

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

  

20190726160424 [INFO]   [并发/ forasdfMES-managedThreadFactory-Thread-10]-   Metricsdceptor:##通话结束:Historirrtory.getHistrrOrder花费了2979   毫秒

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

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

我做错了什么?

谢谢大家!

2 个答案:

答案 0 :(得分:0)

我无法解释原因,但是如果您将其锚定,它将起作用

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

答案 1 :(得分:0)

一种解决方案是仅将grok过滤器应用于以ms结尾的日志行。可以在您的配置中使用conditionals

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