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

如何通过Prometheus查询获取Histogram Bucket的单桶请求数

没问题,我来帮你搞定这个累积直方图的区间请求数计算!

首先得明确:你看到的myapp_duration_seconds_bucket是累积型直方图桶,每个le(less than or equal)对应的数值,代表所有响应时间≤该阈值的请求总数。所以要拿到每个区间(比如(0.05, 0.075])的精确请求数,就得用当前桶的累积值减去前一个更小桶的累积值。

具体PromQL查询方案

下面分两种场景给出查询语句,你可以根据需求选择:

场景1:统计最近一段时间内的区间请求数(推荐用于监控)

如果你想查看最近5分钟里,每个响应时间区间的请求量,用这个查询:

# 先计算每个桶在最近5分钟的累积增量
sum by (le) (increase(myapp_duration_seconds_bucket[5m]))
  # 减去前一个更小桶的累积增量,得到当前区间的独立请求数
  - ignoring(le) group_left
sum by (le) (increase(myapp_duration_seconds_bucket[5m]))
    # 按le值升序排序后,取前一个桶的增量值
    * on() group_right(le)
sort(sum by (le) (increase(myapp_duration_seconds_bucket[5m]))) offset 1

场景2:统计从服务启动到现在的总区间请求数

如果要查看历史所有请求的区间分布,把increase换成sum即可:

sum by (le) (myapp_duration_seconds_bucket)
  - ignoring(le) group_left
sum by (le) (myapp_duration_seconds_bucket)
    * on() group_right(le)
sort(sum by (le) (myapp_duration_seconds_bucket)) offset 1

举个例子(对应你给出的数据)

用你提供的数值来验证:

  • le="0.05"的累积值是5149(所有≤0.05s的请求)
  • le="0.075"的累积值是7101(所有≤0.075s的请求)
    那么(0.05s, 0.075s]区间的请求数就是 7101 - 5149 = 1952,和查询结果一致。

另外,le="+Inf"对应的数值是总请求数,减去最大的有限le值(比如你的数据里是10.0)的桶值,就是响应时间超过10s的请求数。

小提示

  • 可以把[5m]换成你需要的时间范围,比如[1h]统计最近1小时的数据
  • 如果你的指标带有其他标签(比如instance、job),可以调整sum by的标签列表,比如sum by (instance, le)来按实例分组查看每个实例的区间请求数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:57:52