首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行ruby代码时的Logstash错误(发生Ruby异常:为Float未定义分配程序)

执行ruby代码时的Logstash错误(发生Ruby异常:为Float未定义分配程序)
EN

Stack Overflow用户
提问于 2018-10-10 21:20:58
回答 1查看 259关注 0票数 1

试图在logstash中执行下面的代码,但是它一直抛出一个异常。

代码语言:javascript
复制
if [received_at] and [sent_at] {
    ruby {
      init => "require 'time'"
      code => "
        received_by_finacle = (Time.parse(event.get('received_at').to_f)*1000).round(2);
        sent_out_by_finacle = (Time.parse(event.get('sent_at').to_f)*1000).round(2);
        event.set('delta', (sent_out_by_finacle - received_by_finacle)).to_s;
        event.set('epoch_received_at_in_milliseconds', received_by_finacle);
        event.set('epoch_sent_at_in_milliseconds', sent_out_by_finacle);
        "
      add_tag => [ "calculated_time_difference" ]
    }
}  

返回的错误是

代码语言:javascript
复制
[2018-10-10T22:01:05,631][ERROR][logstash.filters.ruby ] Ruby exception occurred: allocator undefined for Float
[2018-10-10T22:01:05,640][ERROR][logstash.filters.ruby ] Ruby exception occurred: allocator undefined for Float

有什么好主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 23:14:17

多亏了一个logstash社区成员@Ganesh_Venkataraman,我才能找到解决方案。我不得不加上一个“救援零”(稍后会读到更多)。这是最后对我有用的代码。

代码语言:javascript
复制
if [received_at] and [sent_at] {
    ruby {
        init => "require 'time'"
        code => "
            received_by_finacle   = (Time.parse(event.get('received_at')).to_f)*1000;
            sent_out_by_finacle   = (Time.parse(event.get('sent_at')).to_f)*1000;
            timetaken = (sent_out_by_finacle - received_by_finacle) rescue nil;
            event.set('time_delta',timetaken);
            event.set('epoch_received_at_in_milliseconds',received_by_finacle);
            event.set('epoch_sent_at_in_milliseconds',sent_out_by_finacle);
            "
            add_tag => [ "calculated_time_difference" ]
    }
} 

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52748956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档