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

如何在Grafana中用PromQL计算按路由方法分组的QoS百分比?

问题分析与解决方案

不需要额外设置两个计数器,单个带method、route、code标签的Counter完全可以满足需求。你的查询无法生成完整时序图的核心原因是:当某个(route, method)分组下没有成功请求(code非2xx)时,分子部分的时间序列会缺失,导致除法操作后该分组的时序消失,图表出现断档。

修正后的PromQL查询

以下查询会自动补全缺失的成功请求序列(设为0),确保每个有请求的分组都能稳定显示QoS数值:

(
  # 统计各分组的成功请求速率,无成功请求时补0
  sum by (route, method) (rate(http_requests_total{code=~"2.."}[$__rate_interval]))
  or on (route, method) vector(0)
)
/
# 统计各分组的总请求速率
sum by (route, method) (rate(http_requests_total[$__rate_interval]))
* 100

如果需要避免分母为0的情况(比如某个分组暂时没有任何请求),可以进一步优化:

(
  (sum by (route, method) (rate(http_requests_total{code=~"2.."}[$__rate_interval])) or on (route, method) vector(0))
  /
  sum by (route, method) (rate(http_requests_total[$__rate_interval]))
) * 100
# 总请求为0时显示0
or vector(0)

额外检查点

  • 验证指标抓取:访问应用的/metrics端点,确认http_requests_total指标存在,且带有method、route、code标签的有效条目。
  • 变量替换:如果手动执行查询(而非Grafana),将$__rate_interval替换为具体时间范围,比如5m。
  • 路由标签一致性:确保req.route?.path能正确获取路由路径,对于动态路由(如/api/v1/users/:id),该标签会显示为:id;若需要聚合所有动态子路径,需调整路由标签的生成逻辑(比如将动态参数替换为统一占位符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:03:20