首页/云/可观测性速查/向量匹配做指标关联(示例:成功率)
Prometheus 与采集64 条

向量匹配做指标关联(示例:成功率)

把两个来源的指标按业务键关联是常见需求:例如成功数与总数相除得到成功率;关键是让两侧标签通过 on() 对齐。

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

向量匹配做关联是什么

把不同来源的指标按业务键关联起来是常见需求,例如「成功数 / 总数」算成功率,「已用 / 总量」算水位。关键在于让两侧通过 on() 对齐到同一组标签,必要时用 ignoring() 忽略多余维度。关联前先分别确认两侧的标签集,能省掉大量试错。

基本信息

关联方式算术运算 + on/ignoring
匹配前提匹配键在两侧都存在且取值一致
多对一group_left 附加维度
输出标签由 on 决定,其余标签丢弃
量纲要求两侧需可比(同为计数或同为比例)
验证手段分别查询两侧查看标签集

典型使用场景

  • 按渠道计算支付成功率并与告警阈值比较
  • 计算磁盘或内存水位(已用除以总量)
  • 把错误数与请求总数关联得到错误率曲线
  • 关联业务指标与资源指标,分析性能与业务量的关系
  • 多来源指标拼成一张业务看板(如订单量与支付量)
  • 排查关联结果为空时,逐一确认两侧标签集

关联示例

关联示例
# 支付成功率 = 成功数 / 总数(按 channel 对齐)
sum by (channel) (rate(payment_total{result="success"}[5m]))
  / on (channel) sum by (channel) (rate(payment_total[5m]))

# 实例维度关联(多对一)
(node_filesystem_avail_bytes / node_filesystem_size_bytes)
  * on (instance) group_left() (up == 1)

# 排查:分别查询两侧,看标签集是否一致
# sum by (channel) (rate(payment_total{result="success"}[5m]))

常见关联场景

目标写法要点常见问题
成功率成功数 / 总数,按业务键 on两侧维度不一致
水位已用 / 总量总量为 0 时得到 Inf
错误率错误数 / 请求总数分子分母窗口需一致
业务与资源关联on 实例或集群标签命名不同
关联结果为空时,先分别查询两侧表达式并对比标签集:绝大多数情况是标签名或聚合维度不一致,而不是数据源的问题。
关联前分别查询两侧表达式的标签集(在 Explore 里很方便),避免反复试错匹配为空。
两侧量纲不一致(Counter 与 Gauge)时要先换算再相除,否则得到的比值没有业务含义。
on() 只保留指定标签,输出会丢失其他维度;如果下游还需要按地域或版本下钻,聚合层级要提前设计。
分母为 0 时结果可能是 Inf 或 NaN,展示前用 clamp_min 或先过滤,看板上出现断线往往就来自这里。

易错点

  • 两侧量纲不一致(Counter 与 Gauge)时先换算再相除
  • on() 只保留指定标签,输出会丢失其他维度,聚合层级提前设计
  • 分母为 0 会得到 Inf 或 NaN,展示时要 clamp_min 或先过滤
  • 两侧聚合窗口不一致(一侧 5m 一侧 1h)会让比值失真,窗口必须对齐
  • 两个来源的标签命名不同(instance 与 host)时需先用 label_replace 对齐

数据来源与参考

  • Prometheus 文档 · Vector matching(one-to-one / many-to-one)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌