Logstash 浮点值的分析错误
我试图从日志行获取一个浮点值,但logstash mutate filter对该值进行舍入并将其转换为整数 日志行是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}[/|]%
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" ]
}