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

如何统计Prometheus Histogram指定时间范围各桶的观测数量

Prometheus直方图桶计数统计正确方案

原有查询的问题说明

  • 第一种查询 sum(operation_x_bucket{operationType="TypeA"}) by (le)
    该查询返回的是服务启动到当前时刻的累积桶计数,不是你指定时间范围内的增量数据,如果服务在时间范围内有重启,计数还会被重置,结果必然不符合预期。
  • 第二种查询 sum(increase(operation_x_bucket{operationType="TypeA"}[$__range])) by (le)
    逻辑本身符合时间范围增量统计的要求,结果偏低通常是配置、使用细节问题导致的。

正确统计方式

场景1:统计时间范围内累积桶的增量(即所有<=对应桶边界的总观测数)

直接使用调整后的查询即可:

sum by (le) (increase(operation_x_bucket{operationType="TypeA"}[$__range]))

如果结果仍然偏低,按以下顺序排查:

  1. 确认是否遗漏了le="+Inf"桶的统计:所有耗时超过你配置的最大桶边界625000的请求,只会被计入该桶,未纳入展示的话总计数会明显低于实际值。
  2. 确认标签匹配正确性:operationType="TypeA"的取值需要和上报的标签值完全一致,大小写、特殊字符的差异都会导致过滤结果缺失。
  3. 确认耗时单位和桶配置匹配:如果桶配置单位是毫秒,但上报耗时用了微秒/秒,会导致大部分请求被归入边界最大的桶甚至+Inf桶,统计分布不符合预期。
  4. 对于短时间范围查询误差,可以替换为rate乘以时间秒数的写法,减少外推误差:
sum by (le) (rate(operation_x_bucket{operationType="TypeA"}[$__range])) * $__range_s

场景2:统计时间范围内非累积的独立区间观测数(即1000<耗时<=5000、5000<耗时<=25000这类区间的独立数量)

不需要手动写PromQL做差值计算,直接开启Grafana热力图组件的转换累积直方图为梯度直方图开关,喂入上述累积桶增量的查询结果即可,组件会自动计算每个区间的独立计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:48:04