假设我们有两个时间戳字段,我们可以计算它们之间的时间差吗?对于 例子
[2014-04-01T18:50:41.817 + 0000]〜[2014-04-01T18:50:45.680Z]
答案 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'
}