簡體   English   中英

在Logstash Grok過濾器中從消息中獲取可選字段

[英]Getting optional field out of message in logstash grok filter

我正在嘗試提取此日志行中的毫秒數

20190726160424 [INFO] [concurrent / forasdfMES-managedThreadFactory-Thread-10]-Metricsdceptor:##通話結束:Historirrtory.getHistrrOrder花了2979毫秒

問題是,並非所有日志行都包含該字符串。現在,我想有選擇地將其提取到持續時間字段中。 我試過了,但是什么也沒發生..沒有錯誤,也沒有結果。

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

我做錯了什么?

多謝你們 !

我無法解釋原因,但是如果您錨定它會起作用

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

一種解決方案是僅將grok過濾器應用於以ms結尾的日志行。 可以使用配置中的條件來完成。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM