我把一些服务器日志倒进了elasticsearch。日志包含如下条目 'action_id':'AU11nP1mYXS3pt6INMtU','action':'start','time':'March 31st 2015, 19:42:07.121'
以及 'action_id':'AU11nP1mYXS3pt6INMtU','action':'complete','time':'March 31st 2015, 23:06:00.271'
. 相同的action\u id指的是单个操作,我感兴趣的是完成一个操作需要多长时间。
我真的不知道如何用ElasticSearch方法来构建我的问题,但我会尽我最大的努力:如何根据自定义度量(由时间跨度定义)对“action\u id”进行聚合 'action':'start'
至 'action':'complete'
?
我在用 kibana
如果有帮助的话。
2条答案
按热度按时间hwamh0ep1#
看起来elasticsearch并不是为了直接计算持续时间而设计的。elasticsearch似乎使用logstash来执行这些任务。
https://www.elastic.co/guide/en/logstash/current/plugins-filters-elasticsearch.html
uelo1irk2#
我查看了为脚本度量聚合提供的示例,并针对此问题对其进行了修改:
首先,它用聚合术语为每个action\u id创建bucket。
然后为每个bucket计算一个脚本度量。
在
map
步骤它将每个shard的“complete”时间戳作为正值,其他时间戳(即“start”时间戳)作为负值。接着combine
第二步,它只是返回它们。继续reduce
步骤它将一个动作在所有碎片上的持续时间相加(因为“开始”和“完成”事件可能在不同的碎片上),得到实际的持续时间。我不确定这个聚合的性能,但是你可以在你的数据集上试试。请注意,它还被标记为实验功能。