首页/云/可观测性速查/向量匹配:on、ignoring 与 group_left
Prometheus 与采集64 条

向量匹配:on、ignoring 与 group_left

两个向量做算术运算时按标签对齐:默认要求标签集完全一致;on/ignoring 控制参与匹配的标签,group_left/group_right 处理一对多或多对一场景。

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

向量匹配是什么

两个向量做算术运算时,PromQL 要按标签把两侧对应起来:默认要求标签集完全一致。on 指定只用哪些标签匹配,ignoring 指定忽略哪些标签,group_left 与 group_right 处理一对多或多对一的场景。匹配不上时结果为空,这是「两个表达式单独都有数据、相除却为空」的常见原因。

基本信息

默认行为标签集完全一致才匹配
on(...)只按指定标签匹配
ignoring(...)忽略指定标签后匹配
group_left左侧多、右侧一的场景
group_right右侧多、左侧一的场景
常见症状两侧有数据但相除结果为空

典型使用场景

  • 计算错误率:错误数除以总数,按 instance 或 route 对齐
  • 把实例信息附加到指标上(group_left 引入节点名)
  • 用 ignoring 忽略一侧多余标签,让两个来源的指标可以相除
  • 多对一场景下把聚合后的比率贴回每条原始序列
  • 排查查询为空时,先单独跑两侧表达式确认标签集差异
  • 跨数据源关联同一业务实体(实例、渠道、集群)

典型场景

典型场景
# 标签不一致时用 on 指定匹配键
sum by (instance) (rate(http_requests_total{code=~"5.."}[5m]))
  / on (instance) sum by (instance) (rate(http_requests_total[5m]))

# 多对一:把节点信息附到实例指标上(group_left)
sum by (instance) (rate(http_requests_total[5m]))
  * on (instance) group_left(node) count by (instance, node) (up == 1)

# 忽略多余标签后用 ignoring 匹配
metric_a / ignoring (pod) metric_b

修饰符对照

写法含义使用场景
on (labels)只按这些标签匹配两侧标签维度不同
ignoring (labels)忽略这些标签一侧标签更多
group_left左侧一对多把附加信息贴在左边
group_right右侧一对多较少使用,注意方向
向量匹配出错的典型表现:两个表达式单独都有数据,相除后为空;先检查两侧标签集差异,再看匹配修饰符。
on 会丢弃未列出的标签:输出只剩指定维度,如果后续还要按其他维度聚合,聚合层级要提前设计。
group_left 一侧应是「多」的一方,写反会报错或得到错乱结果;报错信息里通常会指出匹配不唯一。
忘记写 on/ignoring 时按全部标签匹配,两侧只要有一个标签差异就无法匹配,这是新写表达式最常见的失败原因。

易错点

  • 忘写 on/ignoring 时按全部标签匹配,两侧有任何标签差异都会导致匹配失败
  • group_left 一侧应是「多」的一方,写反会报错或得到错乱结果
  • on 只保留指定标签,输出会丢掉其他维度,后续聚合会与预期不符
  • 两侧量纲不一致(Counter 与 Gauge)时先换算再相除,否则数值没有意义
  • 匹配不唯一时(一侧同一标签出现多条)会直接报错,需要先聚合再匹配

数据来源与参考

  • Prometheus 文档 · Vector matching
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌