我试图从日志行中获取浮点值,但是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_time
为0
而不是0.0033
。
答案 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
,它解决了问题。