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

时间:2014-06-14 17:13:18

标签: java elasticsearch logstash kibana

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

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

3 个答案:

答案 0 :(得分:2)

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

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)
    '
    }

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

答案 1 :(得分:0)

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

我会在logstash中的ruby {}过滤器中计算两个日期之间的差异,所以你不是一成不变的弹性搜索/ 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

    "
  }

答案 2 :(得分:0)

我从R.Clarke从弹性(版本logstash 2.1.0)中学到了这一点:

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