2014-09-02 95 views
2

我想從一個日誌行獲取一個浮點值,但logstash mutate過濾器將該值舍入並將其轉換爲整數。浮點值解析錯誤

日誌行是

f413e89e-8c2f-e411-97a5-005056820dbe|0,0033 

和配置文件是

input { 
    file { 
     path => "log.txt" 
    } 
} 

filter { 
    grok { 
     match => ["message", "%{UUID:request_object_id}[/|]%{LOCALNUM:total_time}"] 
    } 

    mutate { 
      gsub => ["total_time", "[,]", "."] 
      convert => [ "total_time", "float" ] 
    } 
} 

output { 
    elasticsearch { host => localhost } 
} 

LOCALNUM是一個自定義模式,它是

(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:[,][0-9]+)?)|(?:[,][0-9]+))) 

(使用 「」 而不是「 。「以浮點數表示)。

使用此配置,total_time0而不是0.0033

回答

7

望着logstash源代碼,它這樣做:

convert(event) if @convert 
gsub(event) if @gsub 

所以它gsub之前做的convert。嘗試將你的mutate分成兩個不同的mutate s,它會解決你的問題。

mutate { 
     gsub => ["total_time", "[,]", "."] 
} 
mutate { 
     convert => [ "total_time", "float" ] 
} 
0

哦,我發現我的錯誤。我用了2個單獨的mutate塊,1個用於gsub,另一個用於convert,它解決了這個問題。