在logstash

时间:2015-07-13 17:59:26

标签: ruby logstash logstash-configuration elastic-stack

我正在使用'已过去' logstash过滤器用于计算事件的持续时间。我需要几分钟而不是几秒钟的时间,这在logstash中是默认的。所以,我使用ruby过滤器进行转换,但是我无法将浮点数舍入到ruby过滤器内的两个小数位。

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

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

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

3 个答案:

答案 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
    "
    }
}