向量匹配做关联是什么
把不同来源的指标按业务键关联起来是常见需求,例如「成功数 / 总数」算成功率,「已用 / 总量」算水位。关键在于让两侧通过 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 或先过滤,看板上出现断线往往就来自这里。