两个领域之间的Kibana时间差

时间:2015-07-28 10:17:18

标签: date time elasticsearch logstash kibana

我有两个字段作为保存在ELK群集中的日志消息的一部分:

"EventTime": "2015-07-28 17:03:20",
"EventReceivedTime": "2015-07-28 17:03:22"

有没有办法在每条日志消息中获取这些字段之间的时差(在本例中为2秒),并通过Kibana3显示它?

如果不可能,直接弹性搜索查询也可以。

提前致谢!

4 个答案:

答案 0 :(得分:6)

是的,我刚刚使用脚本字段在Kibana中使用了一些测试数据。在Kibana中,转到“设置”,单击左上角的索引模式。

你应该看到2个标签" Fields"和"脚本字段"。

点击" Scripted fields"标签。然后"添加脚本字段"。

输入"名称"并在脚本字段中输入类似

的内容

doc [' EventReceivedTime']。value - doc [' EventTime']。value

点击"创建字段"在底部。现在,您应该在Discover中看到新的脚本字段,并且可以在可视化中使用它。 我的时间戳以毫秒为单位,我的delta_time以毫秒为单位。

答案 1 :(得分:5)

如果值是数字,则您应该能够在kibana中创建脚本字段(使用已启用的" elasticsearch scripting"功能)。在显示每个事件时,必须计算它。

我建议在事件发生时在logstash中执行此操作。您可以在写入elasticsearch之前删除使用ruby {}过滤器来计算差异,这样它在查询和显示时都可用,而且当时没有其他处理。

答案 2 :(得分:0)

如果两个字段都是日期字段,则可以先将它们转换为毫秒,然后再减去。例如

doc['@timestamp'].value.getMillis() - doc['lastUpdatedDate'].value.getMillis()

这适用于弹性6.2.2

答案 3 :(得分:-1)

查看文档:{​​{3}}

我认为日期扣除将起作用,因为“日期字段被视为自1970年1月1日以来的毫秒数”:

doc['@timestamp'] - doc['lastUpdatedDate']

没有。至少不是弹性/ kibana 6.0.0。我确实得到了这个非常丑陋的黑客:

((doc['@timestamp'].date.year - 2017) * 31536000 + doc['@timestamp'].date.monthOfYear * 86400 + doc['@timestamp'].date.dayOfMonth * 3600 + doc['@timestamp'].date.secondOfDay) - ((doc['lastUpdatedDate'].date.year - 2017) * 31536000 + doc['lastUpdatedDate'].date.monthOfYear * 86400 + doc['lastUpdatedDate'].date.dayOfMonth * 3600 + doc['lastUpdatedDate'].date.secondOfDay)

我不得不从今年开始推断,因为这个数字会溢出......