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

如何通过多对一匹配为Prometheus向量关联标签并保留原有标签?

解决PromQL标签关联问题:将metric_2的label_3关联到metric_1

你的需求完全可行,问题出在之前的PromQL语句写法上。以下是正确的实现方式和解释:

正确语句

metric_1 * on(label_1) group_left(label_3) metric_2

为什么之前的语句报错?

你之前的语句metric_1 * on(label_1) group_left metric_2报错是因为未明确指定从右侧指标获取的标签,Prometheus需要明确知道你要保留哪些右侧标签。另外,虽然你的metric_2中label_1是唯一的(一对一匹配),但未指定group_left的目标标签时,Prometheus会默认尝试合并所有标签,可能触发误判的多对多匹配检查。

语句说明

  • on(label_1):指定仅通过label_1进行标签匹配
  • group_left(label_3):表示保留左侧metric_1的所有标签(包括label_2),同时将右侧metric_2中匹配的label_3添加到结果中。这里group_left专门处理左侧一对多、右侧一对一的匹配场景(一个label_1对应多个metric_1序列,但仅对应一个metric_2序列),完全符合你的数据结构。

保留metric_1原始数值的优化

如果metric_2的数值对你无关紧要,只想保留metric_1的原始数值,可以用以下语句:

metric_1 * on(label_1) group_left(label_3) (metric_2 / metric_2)

通过metric_2 / metric_2将右侧数值转为1,相乘后不会改变metric_1的原始值。

结果验证

执行上述语句后,会得到你预期的结果:

metric_1{label_1="aaa",label_2="bba",label_3="cca"} metric_1{label_1="aaa",label_2="bbb",label_3="cca"} metric_1{label_1="aab",label_2="bba",label_3="ccb"} metric_1{label_1="aab",label_2="bbb",label_3="ccb"}

内容的提问来源于stack exchange,提问作者Боздомир Конфьюжен

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:12:39