ES 汇总数据
Elasticsearch 提供汇总功能,有助于汇总索引中的数据并将其汇总到新索引中。这些存储的数据可以在未来需要时用于分析,但成本仅为原始数据存储成本的一小部分。在分析中保留历史数据非常有用。然而,有时会因为归档大量数据的财务成本而避免这样做。
例如,假设一个系统每天生成 4700 万个文档,这需要大量内存来存储它们。每一秒,这些数据都可用于实时分析。在历史分析的情况下,如果我们查看 5 年以上的数据,我们需要以较大的时间间隔工作,例如每小时或每日趋势。我们可以通过将这 4700 万个文档压缩为每小时摘要来节省大量空间。
Elasticsearch 6.3 随附滚动上功能。 elasticsearch 的 rollup 特性对于汇总后存储历史数据非常有用。以便在汇总后存储更少的内存。请注意,汇总作业是一项周期性任务。
汇总入门
要开始汇总功能,我们必须创建一个或多个 "Rollup作业" 来汇总数据。这些作业会汇总您指定的索引,并将滚动的文档放在二级索引中。您可以选择您选择的二级索引来放置这些滚动文档。这些汇总作业在后台连续运行。
创建索引
首先,我们将创建一个包含不同时间戳的索引。创建索引后,我们将使用 cron 作业定期创建汇总作业。您的文档可能类似于:
PUT /rollupexample/_doc/01 { "timestamp": 1516729294000, "temperature": 200, "voltage": 5.2, "node": "x" }
Response
通过执行上面的索引创建查询以及时间戳,您将获得与下面给出的相同的响应:
{ "_index": "rollupexample", "_type": "_doc", "_id": "01", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, }
向rollupexample 索引添加更多文档。
Add more documents to rollupexample index. PUT /rollupexample-2020-01-01/_doc/02 { "timestamp": 1413729294000, "temperature": 201, "voltage": 5.9, "node": "x" }
创建汇总作业
现在我们将使用 _rollup API 创建汇总作业。这些文档汇总到每小时摘要中。汇总数据的代码可能看起来像:
Copy code
PUT _rollup/job/rollupexample { "index_pattern": "sensor-*", "rollup_index": "sensor_rollup", "cron": "*30 * * * * ?", "page_size": 1000, "groups": { "date_histogram": { "field": "timestamp", "interval": "60m" }, "terms": { "field": ["node"] } }, "metrics": [ { "field": "temperature", "metrics": ["min", "max", "sum"] }, { "field": "voltage", "metrics": ["avg"] } ] }
cron 参数有助于控制作业激活。它控制作业激活的时间和频率。当汇总作业的 cron 计划触发时,它开始从上次激活后离开的点开始汇总数据的过程。
汇总搜索
一次作业开始运行并处理了一些数据,我们可以使用 DSL Query 来搜索一些数据。查看下面的查询来搜索滚动数据:
GET /rollupexample/_rollup_search { "size": 0, "aggregations": { "max_temperature": { "max": { "field": "temperature" } } } }
每当我们使用这项技术时,总会想到一些与我们的数据相关的事情。数据备份和恢复就是其中之一。随着数据的增加,用户开始担心它。他们总是希望他们的数据是安全的,并且空间也是免费的。 Elasticsearch 社区关注用户的这个问题并提 ...