【发布时间】:2016-07-30 01:30:49
【问题描述】:
目标是建立一个仅包含相关文档组中最新文档的 Elasticsearch 索引,以跟踪某些监控计数器和状态的当前状态。
我制作了一个简单的 Elasticsearch 聚合查询:
{
"size": 0,
"aggs": {
"group_by_monitor": {
"terms": {
"field": "monitor_name"
},
"aggs": {
"get_latest": {
"top_hits": {
"size": 1,
"sort": [
{
"timestamp": {
"order": "desc"
}
}
]
}
}
}
}
}
}
它将相关文档分组到桶中,并为每个桶选择最近的文档。
以下是我完成工作所必须的不同想法:
- 直接使用聚合查询将结果推送到索引中,但是好像不太可能:Is it possible to put the results of an ElasticSearch aggregation back into the index?
- 使用 Logstash Elasticsearch input plugin 执行聚合查询和 Elasticsearch output plugin 推入索引,但似乎输入插件只查看
hits字段并且无法处理聚合结果:Aggregation Query possible input ES plugin! - 使用 Logstash http_poller plugin 获取 JSON 文档,但它似乎不允许为 HTTP 请求指定正文!
- 使用 Logstash exec plugin 执行 cURL 命令来获取 JSON,但这似乎很麻烦,我不得已。
- 使用NEST API 构建一个基本应用程序,该应用程序将执行轮询、提取结果、清理它们并将生成的文档注入目标索引,但我想避免添加新工具来维护。
有没有相当复杂的方法来完成这个?
【问题讨论】:
-
@AndreiStefan 谢谢,但 AFAIK Watcher 对这个用例没有帮助。此外,我们还没有(还没有?)在我们的基础设施上部署它。对于警报,我们使用 ElastAlert,它也可以完美地完成这项工作。
-
我不是建议 Watcher 进行警报,而是为了能够定期query the indices,对结果数据执行一些basic transformation 并能够index back into Elasticsearch。
-
@AndreiStefan 感谢这些元素。事实上,Watcher 似乎是一个不错的选择。但正如之前所说,我们还没有它。 :'(
-
@OvidiuRudi 不是直接的方法,我必须用 C# 构建一个专门的程序来制作管道。
标签: elasticsearch logstash kibana nest elasticsearch-aggregation