Ошибки Logstash при выполнении кода ruby ​​(произошло исключение Ruby: распределитель не определен для Float) - PullRequest
0 голосов
/ 11 октября 2018

Пытался выполнить приведенный ниже код в logstash, но выдает исключение.

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" ]
    }
}  

возвращается ошибка

[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

есть идеи, почему, пожалуйста?

1 Ответ

0 голосов
/ 12 октября 2018

Благодаря участнику сообщества logstash @Ganesh_Venkataraman я смог найти решение.Я должен был добавить «ноль спасения» (подробнее об этом позже).Вот код, который наконец-то сработал для меня.

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" ]
    }
} 

Спасибо.

...