2017-04-10 274 views
0

我需要手动计算时间差,因为我的结束时间不同,所以我可能会在24小时内收到大量日志。 我设法从旧的日志获取开始时间:elasticsearch-logstash时间差计算(ELK 5.3)

elasticsearch { 
       query => "Event:'Sent' AND ID:%{[ID]}" 
       index => "mylog*" 
       result_size => "1" 
       enable_sort => "false" 
       fields => { "@timestamp" => "SentTime" } 
     } 

它实际上工作正常&返回格式正确的日期“2017-03-29T22:00:03.000Z”

但它会用不好: 返回值此格式的“1970年1月18日,08:07:09.056”

ruby { 
      code => "event.set('[SecondsToDeliver]', event.get('@timestamp').to_f - event.get('SentTime').to_f)" 
      add_tag => [ "rubyfilter" ] 
     } 

我敢肯定,这是一个简单的语法错误,但我不能设法抓住它。

回答

0

解决了这道数学:

elasticsearch { 
         hosts => ["Your elastic host"] 
         query => 'Event:"Sent" AND ID:"%{ID}"' 
         fields => { "@timestamp" => "SentTime" } 
         tag_on_failure => [ "NoSent_ID" ] 
       } 

      date { 
       match => ["[SentTime]", "ISO8601"] 
       target => "[SentTime]" 
      } 
     ruby { 
        init => "require 'time'" 
        code => "duration = (event.get('@timestamp') - event.get('SentTime')) rescue nil; event.set('Log_duration', duration); " 
       }