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

PromQL查询解析及超4秒API调用数查询需求求助

PromQL查询解析与需求实现

一、现有延迟分位数查询的工作原理

从内到外拆解这两个查询的执行逻辑:

  1. irate(http_request_duration_seconds_bucket{path="<API Endpoint>"}[2m])

    • http_request_duration_seconds_bucket是Prometheus的直方图指标,每个序列带le标签(表示“小于等于该值的延迟”),记录落在对应延迟区间的请求计数。
    • irate计算瞬时速率:取2分钟时间窗口内最后两个数据点的差值,除以时间差,得到每秒的请求数。相比rate,irate对短时间内的流量波动更敏感,适合监控突发的延迟变化。
  2. 乘以30的作用

    • 这里的*30是把“每秒请求数”转换为30秒周期内的请求估算数,通常对应Grafana仪表盘的刷新间隔(比如每30秒刷新一次),让后续求和后的数据更贴合仪表盘的展示周期,避免分位数计算出现偏差。
  3. sum(...) by (path, le)

    • 按path(API路径)和le(延迟区间)分组求和,把同一API路径、同一延迟区间的请求数合并(比如多实例部署时,汇总所有实例的对应bucket数据),为分位数计算提供统一的直方图数据集。
  4. histogram_quantile(0.99, ...) 和 histogram_quantile(0.95, ...)

    • histogram_quantile是直方图分位数计算函数:第一个参数是分位值(0.99表示99分位,0.95表示95分位),第二个参数是按le分组的直方图数据。
    • 输出结果是对应分位数的延迟值:比如99分位结果为1.2秒,意味着99%的API请求延迟都不超过1.2秒;95分位同理,代表95%的请求延迟上限。

二、统计延迟大于4秒的API调用数量

利用直方图的le标签特性,可实现该需求,查询语句如下:

sum(irate(http_request_duration_seconds_bucket{path="<API Endpoint>", le="+Inf"}[2m])) by (path) 
- 
sum(irate(http_request_duration_seconds_bucket{path="<API Endpoint>", le="4"}[2m])) by (path)

逻辑说明:

  • le="+Inf"对应的bucket统计了所有请求数(所有请求的延迟都小于等于无穷大);
  • le="4"对应的bucket统计了延迟≤4秒的请求数;
  • 两者相减,得到的就是延迟>4秒的请求数(以每秒速率的形式呈现,贴合实时监控场景)。

如果需要统计累计的请求总数(而非每秒速率),可以去掉irate,改用sum(http_request_duration_seconds_bucket{...}) by (path),这种方式会统计从指标采集开始到当前的累计值,适合长期趋势统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:05:25