Elasticsearch - 通过重新计算平均值、最小值和最大值来连接文档

Elasticsearch - Concatenate documents by recalculating mean, min, and max values

我有一个索引,每 2 秒报告一次延迟值。这些文档包含时间戳、平均值、最小值和最大值。在任意时间段(比如一两天)之后,我想连接这些文档以减少 space 要求,将延迟值的分辨率降低到每分钟一个。

有没有办法在 Elasticsearch 中或使用插件来做到这一点?或者我是否必须编写一个脚本来清除前几天的索引并计算每分钟的新平均值、最小值、最大值 - 删除文档?

ES 不会单独执行此操作,而且我不知道有任何插件可以执行此操作。

一种方法是滚动前一天的索引,进行计算并使用重新计算的数据重新创建一个新索引。这可以用任何 client-side 语言来完成...

...或者使用 Logstash 使用 elasticsearch 输入读取前一天的索引,使用 aggregateruby 过滤器聚合数据并进行计算,然后使用 elasticsearch 输出写入新索引。

我们正在为任何给定的 kibana4 表格可视化做类似的事情,包括时间序列数据。

我们有一个 PHP 代码获取给定的 Kibana 可视化 ID,提取其聚合,为该聚合的时间直方图准备弹性搜索聚合查询,桶大小为您想要的分辨率(1d,1w , 1M).

然后我们将该聚合的结果存储在单独的索引中。

该方法的最大问题是您不能再在 Kibana 4 中显示聚合结果,因为结果已经聚合,因此要在图表上显示这些分辨率,我们需要使用其他东西。

如果有一个 Kibana 插件可以做到这一点并显示 pre-aggregated 数据的图表,就像您在 Excel 中显示它们的方式或其他方式一样,那就太棒了。