我正在使用'已过去' logstash过滤器用于计算事件的持续时间。我需要几分钟而不是几秒钟的时间,这在logstash中是默认的。所以,我使用ruby过滤器进行转换,但是我无法将浮点数舍入到ruby过滤器内的两个小数位。
filter{
ruby{
code=>"event['elapsed.time']=event['elapsed.time']/60.0"
}
}
我尝试使用显示格式" .2f"但它不起作用,可能是因为引号。使用转义字符也不起作用。
我还在浮点数上尝试了 .round(2),但保留了原始值。
答案 0 :(得分:2)
就舍入而言,我只需做同样的事情。您需要做的就是将= in()。around(2)的右侧包含在内,如下所示:
(event['elapsed.time'] / 60.0).round(2)"
对我来说,我还需要确保我的字段是一个浮动开始,所以我添加了一个mutate过滤器。结果将是这样的:
filter{
mutate {
convert => [ "elapsed.time", "float" ]
}
ruby{
code=>"event['elapsed.time'] = (event['elapsed.time'] / 60.0).round(2)"
}
}
答案 1 :(得分:1)
对于那些使用logstash 5.0的人,[破坏更改] [1],过滤器块会喜欢:
filter{
mutate {
convert => { "total_time_cor" => "float" }
}
ruby{
code=>"event.set('[elapsed.time]', (event.get('elapsed.time')/60.0).round(2))"
}
}
答案 2 :(得分:0)
你是如何决定它不工作的?我会通过查看弹性搜索来下注,你可能会解决映射问题。
如果你有一个整数字段,则除法会创建一个浮点数:
filter {
ruby{
code=>"
event['time']=100
event['time']=event['time']/60.0
"
}
}