首页/云/可观测性速查/比率查询:错误率与占比的写法
Prometheus 与采集64 条

比率查询:错误率与占比的写法

比率的通用模式:分子分母都用 rate,且维度对齐;两侧的 sum by 列表保持一致,否则向量匹配失败或得到不符合预期的结果。

可观测性速查云更新于 2026-10-13

比率的通用模式

比率查询的骨架是两部分相除:分子是符合条件的那部分,分母是全部。两者通常都用速率函数把计数转成每秒变化量,再相除得到比例。错误率、缓存命中率、成功率、超时占比,都是这一个模式的不同变体。

维度对齐为什么重要

分子带标签过滤而分母不带时,两侧的标签集合不同,除法会因为找不到匹配的序列而返回空结果。稳妥做法是两侧使用完全相同的聚合分组,把过滤条件放在选择器里,让向量匹配在相同维度上进行。

分母为零的情况

没有流量的时段分母为零,结果会变成无意义的数值或直接消失。看板应设置空值显示方式,告警表达式则要先确认分母非零,例如要求请求量达到一定规模后再判断比率,否则半夜低流量时段会频繁误报。

基本信息

基本形式分子速率除以分母速率
维度要求两侧聚合分组一致才能正确匹配
结果范围0 到 1 之间,通常再乘 100 显示百分比
零流量分母为零时结果异常,需要先过滤

典型使用场景

  • 错误率:错误请求速率除以总请求速率,是最常用的服务告警
  • 缓存命中率:命中量除以命中与未命中之和
  • 成功率:成功请求除以全部请求,直接对应可用性目标
  • 资源占比:已用连接数除以连接池上限
  • 转化率类的业务比率:业务埋点计数相除后按业务域聚合
  • 延迟超阈值占比:桶相减后除以总请求数

比率写法示例

比率写法示例
# 5xx 错误率(全局)
sum(rate(http_requests_total{code=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

# 按服务分组,分子分母分组保持一致
sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))
  / sum by (service) (rate(http_requests_total[5m]))

# 缓存命中率
sum(rate(cache_hits_total[5m]))
  / (sum(rate(cache_hits_total[5m])) + sum(rate(cache_misses_total[5m])))

常见比率与写法

比率分子分母
错误率5xx 请求速率全部请求速率
命中率命中速率命中加快未命中速率
超时占比超过阈值的桶差值桶总数速率
连接占用率当前连接数连接池上限

常见错误与表现

错误写法表现修正
分子带过滤、分母不过滤结果为空的序列两侧统一聚合分组
分组标签写错曲线条数异常核对真实标签集
低流量时段直接告警夜间高频误报先用请求量做前置条件

写好比率查询的要点

  • 分子分母同一时间窗口:窗口不一致会让比率短暂偏离真实值
  • 保留足够维度:需要按接口或实例下钻时,两侧都要保留该标签
  • 乘百显示:面板上以百分比呈现更易读
  • 空值处理:无数据与零值要区分显示,避免误读为正常
比率类表达式的可读性来自形状而非精度:曲线长期贴近某条基线,一旦抬升就值得关注,绝对值可以稍后核对。
分母为零时结果是未定义值,告警表达式务必先加上流量下限条件,否则低峰期的零星请求会触发错误率告警。
比率是最容易复制的表达式,也最容易出现口径分叉:把验证过的写法固定在模板或记录规则里,比在每个面板里各写一遍更可靠。

比率不适合回答的问题

  • 总共有多少失败:比率只给比例,绝对量要看计数器
  • 哪个用户受影响:维度已经聚合掉,需要日志与链路补充
  • 故障持续多久:要结合时间窗口与持续时长判断

易错点

  • 分子分母维度不一致:向量匹配失败返回空结果,常被误判为采集故障
  • 忽视低流量影响:一两个请求失败就能把错误率推高到几十个百分点
  • 计数器重置未处理:短窗口内比率会突然跳动,交给速率函数处理
  • 比率口径写在多个面板里:各处定义不同会让同一指标算出不同结论

数据来源与参考

  • Prometheus 文档 · Operators(算术与向量匹配)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌