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

Prometheus 1:1 Join场景下添加额外标签及group_left用法疑问

Prometheus Join查询标签保留问题

背景指标

Metric1

{"metric":{"namespace":"ns1", "instance_id":"someid", "label2":"somevalue", "label4":"somethingelse"},"values":[[1675145655,"1"]]}

Metric2

{"metric":{"namespace":"ns1", "instance_id":"someid", "label3":"someothervalue"},"values":[[1675145655,"1"]]}

两个指标均包含namespace和instance_id标签,还有各自的额外标签(label2、label3、label4)。

尝试的查询

无group修饰符的1:1 Join

(metric1{namespace="ns1"} == 1) * on (namespace, instance_id)  (metric2{namespace="ns1", label3="something"} == 1)

该查询无法保留Metric1中独有的额外标签。

使用group_left()修饰符后的查询

(metric1{namespace="ns1"} == 1) * on (namespace, instance_id) group_left() (metric2{namespace="ns1", label3="something"} == 1)

结果:

{"metric":{"label2":"somevalue", "label4":"somethingelse"},"values":[[1675145655,"1"]]} 

疑问

  1. 1:1 Join场景下,是否必须使用group类修饰符才能保留额外标签?
  2. 按照文档描述,group_left后的标签列表应保留"one"侧的指定标签,但我使用group_left(label2)时,结果反而缺失了label2,只保留了label4,这是否符合预期?

解答

问题1

没错,1:1 Join场景下必须用group_left()或group_right()这类修饰符才能保留非连接键的额外标签。

Prometheus默认的Join逻辑(不带group修饰符)只保留on()里指定的连接标签,它默认认为两边的标签完全匹配,不需要保留额外标签。哪怕是1:1的匹配,你也得明确用group_left()(保留左侧指标的额外标签)或group_right()(保留右侧指标的额外标签),才能让Prometheus保留非连接标签。

问题2

这种情况不符合预期,大概率是操作时的语句有误。

按照文档,group_left(label2)应该只保留左侧指标的label2标签(加上连接键标签)。你说结果只保留了label4,可能是写查询时把标签名写错了,比如误写成group_left(label4),或者有其他过滤条件干扰了结果。正常情况下指定group_left(label2),结果里应该包含label2,而非label4。


内容的提问来源于stack exchange,提问作者Djoby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:25:23