将聚合结果插入索引

时间:2016-04-08 17:10:48

标签: elasticsearch logstash kibana nest elasticsearch-aggregation

目标是仅使用相关文档组中的最新文档构建Elasticsearch索引,以跟踪某些监控计数器和状态的当前状态。

我制作了一个简单的 Elasticsearch聚合查询

{
  "size": 0,
  "aggs": {
    "group_by_monitor": {
      "terms": {
        "field": "monitor_name"
      },
      "aggs": {
        "get_latest": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "timestamp": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

它将相关文档分组到存储桶中,并为每个存储桶选择最新文档。

以下是我完成工作所需的不同想法:

  1. 直接使用聚合查询将结果推送到索引中,但似乎不可能:Is it possible to put the results of an ElasticSearch aggregation back into the index?
  2. 使用 Logstash Elasticsearch input plugin执行聚合查询,使用Elasticsearch output plugin推送到索引,但似乎输入插件只查看{{1} } field并且无法处理聚合结果:Aggregation Query possible input ES plugin
  3. 使用 Logstash http_poller plugin获取JSON文档,但似乎不允许为HTTP请求指定正文!
  4. 使用 Logstash exec plugin执行cURL命令以获取JSON,但这看起来非常麻烦,而且是我的最后一招。
  5. 使用NEST API构建一个基本应用程序,它将进行轮询,提取结果,清理它们并将生成的文档注入目标索引,但我想避免添加新工具来维护
  6. 是否有一种相当复杂的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

编辑logstash.conf文件,如下所示

input {
  elasticsearch {
    hosts => "localhost" 
    index => "source_index_name" 
    type =>"index_type" 
    query => '{Query}' 
    size => 500 
    scroll => "5m" 
    docinfo => true
  }
}

output { 
  elasticsearch { 
    index => "target_index_name" 
    document_id => "%{[@metadata][_id]}"
  }
}