目标是建立一个 Elasticsearch 索引,其中仅包含相关文档组中的最新文档,以跟踪某些监控计数器和状态的当前状态。
我制作了一个简单的Elasticsearch 聚合查询:
{
"size": 0,
"aggs": {
"group_by_monitor": {
"terms": {
"field": "monitor_name"
},
"aggs": {
"get_latest": {
"top_hits": {
"size": 1,
"sort": [
{
"timestamp": {
"order": "desc"
}
}
]
}
}
}
}
}
}
它将相关文档分组到存储桶中,并为每个存储桶选择最新的文档。
以下是我完成工作所必须的不同想法:
- 直接使用聚合查询将结果推送到索引中,但似乎不可能:是否可以将 ElasticSearch 聚合的结果放回索引中?
- 使用Logstash Elasticsearch 输入插件执行聚合查询,使用Elasticsearch 输出插件推入索引,但似乎输入插件只查看
hits
字段,无法处理聚合结果:聚合查询可能输入 ES 插件! - 使用Logstash http_poller 插件获取 JSON 文档,但它似乎不允许为 HTTP 请求指定正文!
- 使用Logstash exec 插件执行 cURL 命令来获取 JSON,但这似乎很麻烦,也是我最后的手段。
- 使用NEST API构建一个基本应用程序,该应用程序将执行轮询、提取结果、清理它们并将结果文档注入目标索引,但我想避免添加新工具来维护。
有没有一种相当复杂的方法来实现这一点?