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

如何使用Prometheus计算指定时间窗口内的HTTP请求完成率

Prometheus 计算时间窗口内HTTP请求完成率方案

核心逻辑

你需要的完成率公式为:时间窗口内已完成请求数 / 时间窗口内总收到请求数,PromQL本身没有专门计算完成率的内置函数,但可以通过两个对应Counter指标的增量计算得到结果。

具体实现方案

方案1:复用现有HTTP埋点指标

主流服务框架的官方Prometheus埋点(比如Spring Boot Actuator、Go生态Gin/Echo中间件、Node.js Express插件等)默认暴露的http_server_requests_seconds_count指标,本身统计的就是已处理完成的请求数,只有当请求处理结束(无论正常返回还是报错)才会计数+1。
如果你的服务埋点符合这个特性,直接用该指标的增量除以你已有的总请求数增量即可,5分钟完成率的示例PromQL如下:

increase(http_server_requests_seconds_count{service="myservice"}[5m]) / increase(你的自定义总接收请求Counter{service="myservice"}[5m])

如果你的http_server_requests_seconds_count是请求进入控制器就计数的,可给指标新增process_status标签区分processing(处理中)和finished(已完成),过滤process_status="finished"的指标增量即可得到已完成请求数。

方案2:自定义两个Counter埋点

如果现有指标不符合要求,可以自行新增两个Counter类型的指标:

  • http_requests_received_total:控制器收到请求时计数+1,对应总接收请求数
  • http_requests_completed_total:请求处理完成(无论成功失败)时计数+1,对应已完成请求数

然后使用如下PromQL计算5分钟完成率:

increase(http_requests_completed_total{service="myservice"}[5m]) / increase(http_requests_received_total{service="myservice"}[5m])

如需避免分母为0返回空值,可以追加默认值逻辑:

increase(http_requests_completed_total{service="myservice"}[5m]) / increase(http_requests_received_total{service="myservice"}[5m]) > 0 or on() vector(0)

注意事项

  • 不要用rate()代替increase(),rate()返回的是每秒平均速率,increase()返回的是指定时间窗口内的总增量,更匹配你的需求
  • 参与除法运算的两个指标的标签维度必须完全匹配,否则会因为标签对齐失败返回空值
  • 如果需要统计成功请求的完成率,只需给已完成请求的Counter指标增加响应码标签,过滤2xx状态的增量即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:03