You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Logstash Elasticsearch输入插件聚合数据的实现咨询

Logstash Elasticsearch输入插件获取聚合数据的正确方式

核心结论

不需要使用elasticsearch过滤器的aggregation_fields参数,直接在Elasticsearch输入插件中配置完整的聚合查询即可高效获取目标聚合数据。

原因说明

Elasticsearch输入插件本身支持发送包含aggs的完整ES DSL查询,无需先拉取原始数据再做聚合处理——这种方式不仅减少了数据传输量,还利用ES的原生聚合能力直接返回统计结果,性能更优。

你提供的elasticsearch过滤器的aggregation_fields参数,是用于给当前流经Logstash的事件补充关联聚合数据(比如根据事件中的user.name字段,去ES查询该用户的失败登录次数并追加到事件中),并非批量获取全局聚合统计的场景,和你的需求不匹配。

正确配置示例

将你的聚合查询直接写入Elasticsearch输入插件的query参数中,同时设置size => 0(无需返回原始文档,只保留聚合结果):

input {
  elasticsearch {
    hosts => ["http://your-es-server:9200"] # 替换为你的ES服务地址
    index => "your-target-index-pattern"     # 替换为要查询的索引/索引模式
    query => '{
      "query": {
        "bool": {
          "must": [
            {"match": {"event.category": "authentication"}},
            {"match": {"event.outcome": "failure"}}
          ],
          "filter": [
            {"range": {"@timestamp": {"gte": "now-1d"}}}
          ]
        }
      },
      "aggs": {
        "total_logon_per_user": {
          "terms": {"field": "user.name"}
        }
      }
    }'
    size => 0 # 仅返回聚合结果,不返回原始文档,大幅提升性能
    schedule => "* * * * *" # 可选:设置定时执行查询(示例为每分钟一次)
  }
}

output {
  # 示例:将聚合结果输出到控制台调试
  stdout { codec => rubydebug }
  # 也可以将结果写入另一个ES索引长期存储:
  # elasticsearch {
  #   hosts => ["http://your-es-server:9200"]
  #   index => "failed-logon-stats-%{+YYYY.MM.dd}"
  # }
}

聚合结果的访问方式

聚合结果会被Logstash解析后放在事件的[@metadata][elasticsearch][aggregations]字段中,你可以在后续的filter或output逻辑中直接引用该字段进行处理。

比如,[@metadata][elasticsearch][aggregations][total_logon_per_user][buckets]就是按user.name分组的失败登录统计数组。


内容的提问来源于stack exchange,提问作者NiveditaK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:50:30