浮点值的解析错误

时间:2014-09-02 13:46:45

标签: logstash

我试图从日志行中获取浮点值,但是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]+)))

(使用&#34;,&#34;代替&#34;。&#34;浮动数字)。

使用此配置,total_time0而不是0.0033

2 个答案:

答案 0 :(得分:8)

查看logstash源代码,它执行此操作:

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

所以它在convert之前的gsub。尝试将您的mutate拆分为两个不同的mutate,这样可以解决您的问题。

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

答案 1 :(得分:0)

哦,我发现了自己的错误。我使用了2个单独的mutate块,1个用于gsub,另一个用于convert,它解决了问题。