2017-04-10 178 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); " 
       }