如何计算Elasticsearch + Kibana中的时间戳差异并将其显示在结果中的新列中

问题描述 投票:0回答:3

假设我们有两个时间戳字段,我们可以计算它们之间的时间差吗?为了 例子

[2014-04-01T18:50:41.817+0000] ~[2014-04-01T18:50:45.680Z]

java elasticsearch logstash kibana
3个回答
3
投票

我努力实现这一目标,但找到了方法。

ruby {
  code => 'event["buffer_time"] = Time.now.to_f - event["arrival_ts"].to_f'
}

从今天起,最新版本不再支持上述代码 - Logstash-7.x。

我们可以使用 ruby 中的 event.set 和 event.get 实现相同的效果 并使用时间库转换时间戳(日期时间)

ruby { 
    init => "require 'time'"
    code => '
    to_date_v   = Time.iso8601(event.get("[B-date]").to_s).to_i
    from_date_v = Time.iso8601(event.get("[A-date]").to_s).to_i
    
    event.set("[to_date]", to_date_v)
    event.set("[from_date]", from_date_v)

    difference_v = to_date_v - from_date_v
    event.set("[difference]", difference_v)
    '
    }

您可以检查示例输入、输出和完整脚本这里


0
投票

他们决定禁用 Elasticsearch 中的服务器脚本作为安全预防措施。您可以使用 lucene 表达式,但它们仅适用于整数(不适用于日期)。

我会在logstash中的ruby{}过滤器中计算两个日期之间的差异,这样你就不会受到elasticsearch/kibana的突发奇想。

  ruby {
    code => "

      begin

        event['elapsed_time'] = ((DateTime.parse(event['date2']) - DateTime.parse(event['date1'])) * 86400).to_i

      rescue Exception => e

        event['logstash_ruby_exception'] = 'elapsed: ' + e.message

      end

    "
  }

0
投票

我从 Elastic 的 R.Clarke 那里学到了这一点(版本logstash 2.1.0):

ruby {
  code => 'event["buffer_time"] = Time.now.to_f - event["arrival_ts"].to_f'
}
© www.soinside.com 2019 - 2024. All rights reserved.