计算qps应使用rate(http_requests_total[5m]),它基于counter指标智能拟合每秒平均增长率,自动处理重置,5分钟窗口兼顾灵敏性与稳定性,官方推荐且精度高于increase()除法。

要计算系统每秒请求处理吞吐(即 QPS,Queries Per Second),核心是从 Prometheus 的 Counter 类型指标出发,用 rate() 函数做时间窗口内的速率转换。这不是简单除法,而是依赖 Prometheus 对单调递增计数器的智能斜率拟合。
直接用 rate() 计算 QPS 是最可靠方式
Counter 指标(如 http_requests_total 或 ai_request_count)记录的是累计请求数,本身不能直接反映“每秒多少次”。必须用 rate() 在指定时间窗口内估算变化速率:
rate(http_requests_total[5m])
这行表达式含义是:过去 5 分钟内,该指标平均每秒增长多少。结果单位就是「次/秒」,即 QPS。
- ✅ 推荐窗口为
5m:太短(如1m)易受瞬时抖动干扰;太长(如15m)响应慢,难以捕捉突发变化 - ✅ 自动处理 Counter 重置:
rate()内置了对服务重启导致计数器归零的校正逻辑 - ❌ 不要用
increase()除以秒数(如increase(...[5m]) / 300):它不抗采样误差,精度低,Prometheus 官方明确不推荐用于 QPS
多维度聚合需先过滤再计算
如果想看某类请求的 QPS(比如只统计 POST /predict 成功请求),先用标签过滤,再套 rate():
rate(http_requests_total{method="POST", path="/predict", status=~"2.."}[5m])
常见有用标签组合:
-
{job="ai-inference-service"}—— 按服务名隔离 -
{instance="10.1.2.3:8000"}—— 按实例定位单机瓶颈 -
{model="pi0-v2", device="cuda:0"}—— 按模型和 GPU 设备细分吞吐
注意区分「总吞吐」和「有效吞吐」
- 总 QPS =
rate(http_requests_total[5m]) - 有效 QPS(成功请求)=
rate(http_requests_total{status=~"2.."}[5m]) - 失败 QPS(错误请求)=
rate(http_requests_total{status=~"4..|5.."}[5m])
三者相加应基本等于总 QPS。若偏差明显,说明有未打标或状态码漏报,需检查应用埋点逻辑。
实际 Grafana 面板配置建议
在 Grafana 中展示 QPS 时:
- 图表类型选「Time series」或「Stat」
- 查询语句写完整带标签的
rate(...),避免裸指标 - 开启「Legend」并设置别名,例如
{{method}} {{status}},方便快速识别流量构成 - 可叠加
avg_over_time(rate(...)[5m:])做滑动均值,让曲线更平滑
不复杂但容易忽略











