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

如何在Kibana中计算平均值时排除最低的三个值?

在Kibana中实现每小时排除最低3个值后计算Top6平均值的方案

可以直接在Kibana中实现这个需求,核心是借助Elasticsearch的聚合能力,下面提供两种可行方案:

方案一:直接用Dev Tools/可视化中的DSL聚合

通过嵌套聚合先按小时分组,再提取每组内Top6的detail值,最后计算平均值:

  1. 基础查询结构
    在Kibana Dev Tools中执行以下DSL,替换your_index为你的索引名,@timestamp为你的时间字段:
GET /your_index/_search
{
  "size": 0,
  "aggs": {
    "hourly_groups": {
      "date_histogram": {
        "field": "@timestamp",
        "calendar_interval": "hour",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "aggs": {
        "top_6_details": {
          "top_hits": {
            "size": 6,
            "sort": [{"detail": {"order": "desc"}}],
            "_source": ["detail"]
          }
        },
        "avg_top_6": {
          "bucket_script": {
            "buckets_path": {
              "details": "top_6_details>hits>hits>_source.detail"
            },
            "script": """
              def sum = 0;
              def count = 0;
              for (def d : params.details) {
                if (d != null) {
                  sum += d;
                  count++;
                }
              }
              return count > 0 ? sum / count : null;
            """
          }
        }
      }
    }
  }
}
  1. 逻辑说明
  • date_histogram:按小时对数据分组
  • top_hits:在每个小时组内,按detail降序排序,取前6条(即排除最低的3条)
  • bucket_script:遍历这6条detail值,求和后计算平均值,同时处理可能的空值

方案二:用Kibana Transform预计算结果

如果需要频繁使用这个指标,可以通过Transform将结果预存到新索引,方便后续可视化:

  • 进入Kibana的Transform页面,创建新的pivot transform
  • 分组字段选择你的时间字段,聚合类型选Date histogram,间隔设为1小时
  • 添加聚合:先选择Top hits,设置size为6,按detail降序排序;再添加Bucket script聚合,用和方案一相同的脚本计算平均值
  • 运行Transform后,新索引会存储每小时的Top6平均值,直接用这个索引做可视化即可

注意事项

  • 确保detail字段为数值类型,时间字段为日期类型
  • 如果每个小时的数据量不是固定9条,该逻辑会自动取每组内最大的6条,同样符合"排除最低N条"的需求(N=总条数-6)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:41:59