如何连接标签不同的两个指标并保留全部三个标签?
Prometheus 指标关联查询(保留全部标签)
首先纠正你指标语法的小错误:第二个指标的括号应该是大括号,正确格式是:
metric1{ValueA=1, ValueB=2} metrics2{ValueB=2, ValueC=3}
要关联这两个指标并保留全部3个标签,有两种常用的PromQL写法:
方法一:使用 group_left/group_right(推荐,支持一对多关联)
如果两个指标通过ValueB标签匹配,想要合并所有标签,可以用以下语句:
metric1 * on(ValueB) group_left(ValueC) metrics2
on(ValueB)指定以ValueB作为关联匹配的标签group_left(ValueC)表示保留左侧metric1的所有标签(ValueA、ValueB),同时添加右侧metrics2的ValueC标签
反过来,也可以用group_right实现同样效果:
metrics2 * on(ValueB) group_right(ValueA) metric1
方法二:使用 join 函数(仅支持一对一关联)
如果确定两个指标中ValueB是一对一匹配的,也可以用join函数:
join(ValueB, metric1, metrics2)
这个函数会直接合并ValueB相同的样本,自动保留所有标签,但如果存在一个ValueB对应多个样本的情况,查询会报错,这时候还是用第一种方法更稳妥。
内容的提问来源于stack exchange,提问作者Joe Devilla
相关产品推荐
相关产品推荐

