Logstash 浮点值的分析错误

Logstash 浮点值的分析错误,logstash,Logstash,我试图从日志行获取一个浮点值,但logstash mutate filter对该值进行舍入并将其转换为整数 日志行是 f413e89e-8c2f-e411-97a5-005056820dbe|0,0033 配置文件是 input { file { path => "log.txt" } } filter { grok { match => ["message", "%{UUID:request_object_id}[/|]%

我试图从日志行获取一个浮点值,但logstash mutate filter对该值进行舍入并将其转换为整数

日志行是

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]+)))
(?[+-]?(?:(?:[0-9]+(?:[,][0-9]+)|(?:[,][0-9]+))
(在浮点数中使用“,”而不是“.”)


使用此配置,
总时间
0
而不是
0.0033

哦,我发现了我的错误。我使用了两个独立的
mutate
块,一个用于
gsub
,另一个用于
convert
,它解决了这个问题。

查看logstash源代码,它做到了这一点:

convert(event) if @convert
gsub(event) if @gsub
因此,它在
gsub
之前进行
转换。尝试将您的
mutate
拆分为两个不同的
mutate
s,它将解决您的问题

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