2

我正在使用 'elapsed' logstash 过滤器来计算事件的持续时间。我需要以分钟而不是秒为单位的时间,这是 logstash 中的默认设置。所以,我使用 ruby​​ 过滤器进行转换,但我无法在 ruby​​ 过滤器内将浮点数四舍五入到小数点后两位。

filter{
 ruby{
   code=>"event['elapsed.time']=event['elapsed.time']/60.0"
 }
}

我尝试使用显示格式“.2f”,但它不起作用,可能是因为引号。使用转义字符也不起作用。

我也在浮点数上尝试了 .round(2),但保留了原始值。

4

3 回答 3

2

对于那些使用 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))"
    }
    }
于 2016-11-10T05:37:37.360 回答
2

就四舍五入而言,我只需要做同样的事情。您需要做的就是将 = in ().round(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)"
 }
}
于 2015-10-26T16:38:02.607 回答
0

你如何决定它不起作用?我会通过查看 elasticsearch 来打赌,您可能正在与映射问题作斗争。

如果您有一个整数字段,则除法会创建一个浮点数:

filter {

  ruby{
    code=>"
       event['time']=100

       event['time']=event['time']/60.0
    "
    }
}
于 2015-07-13T21:18:23.023 回答