首页/云/可观测性速查/聚合:从日志里做统计
日志平台52 条

聚合:从日志里做统计

聚合把原始日志变成趋势与分布:date_histogram 出时间序列,terms 出分组 TopN,cardinality 近似去重;指标聚合嵌套在桶聚合里。

可观测性速查云更新于 2026-10-13

聚合把日志变成统计

聚合把原始日志变成趋势与分布:按时间分桶得到序列,按字段分组得到维度统计,去重计数估算独立数量,各类指标计算嵌套在分桶之内。日志平台因此不止能查,还能回答每小时错误多少、哪些接口最慢。

两个容易被忽略的细节

写统计查询时有两处常被忽略:只要统计结果时把返回文档数设为 0,可以显著降低开销;分组统计默认只返回前若干组,需要更多结果时必须显式指定数量与排序方式,否则长尾数据会被静默丢掉。

基本信息

时间分桶按固定间隔把日志聚合成序列
维度分组按字段取值分组统计
去重计数估算独立取值数量,属于近似算法
结果规模分组返回数量需要显式指定

典型使用场景

  • 错误趋势:按分钟统计错误日志量,观察突增时段
  • 维度排名:按接口或主机统计错误数,找出最差的对象
  • 影响面估算:统计一段时间内受影响的独立用户数量
  • 分布分析:按耗时区间分组,观察整体分布形态
  • 看板取数:把聚合结果直接画成趋势图

按分钟统计错误并去重

按分钟统计错误并去重
GET /logs-app/_search
{
  "size": 0,                       # 不返回命中文档,只取聚合
  "aggs": {
    "per_minute": {
      "date_histogram": { "field": "@timestamp", "fixed_interval": "1m" },
      "aggs": {
        "errors": { "filter": { "term": { "level.keyword": "error" } } },
        "uv":     { "cardinality": { "field": "user_id.keyword" } }
      }
    }
  }
}

常用聚合

聚合作用注意
时间分桶按间隔生成序列间隔过小会返回大量数据点
维度分组按字段取值统计默认只返回前若干组
去重计数估算独立数量近似结果,不适合对账
条件分组先筛选再统计嵌套层级不宜过深
只取统计结果时把返回文档数设为 0:既减少传输,也避免无用的文档加载,是纯统计查询的标准写法。
去重计数是近似算法:对账级别的精确统计不能依赖它,需要改用精确计算方式并评估相应开销。

写聚合查询的检查项

  • 确认是否需要命中文档:纯统计要把返回数量设为 0
  • 确认时间间隔:过小会产生大量数据点
  • 确认分组数量:不要依赖默认返回条数
  • 确认字段类型:聚合字段应是可分组的类型

易错点

  • 把去重计数用于对账:近似结果与真实值存在偏差,结论不可靠
  • 分组数量未指定:只拿到默认的前若干名,长尾被静默丢弃
  • 时间间隔过小:返回点数过多,查询缓慢且图表难以阅读
  • 嵌套层级过深:查询复杂度上升,容易触发超时

数据来源与参考

  • Elastic 官方文档 · Aggregations
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌