假设我有两个不同的指标,具有不同的标签名称,但一组值相同:
metric1{label1="some_values_the_same_as_in_metric2"} val examples: val1 val2 val3
metric2{label2="some_values_the_same_as_in_metric1"} val examples: val2 val3
现在我想用 label1 查询 metric1 但过滤掉与 metric2 label2 中具有相同值的所有指标
我知道我可以
metric1{label1!=~"val2|val3"}
但是如果我在 metric1 中有 300 个值,在 metric2 中有 200 个值,并且这些值会随着时间的推移而改变,该怎么办? 如何动态过滤掉它?
尝试了很多这样的事情:
metric_name1 unless metric_name2 on(common_label) group_left
但没有成功
你的尝试方向是正确的。只是
on()
子句需要两个指标通用的标签,但根据您的示例,它们不是。
但这不是问题:
label_replace
可以帮助我们。
metric_name1
unless on(label1)
label_replace(metric_name2, "label1", "$1", "label2", "(.*)")
在这里,我将标签
label2
复制到 label1
中,然后在 unless
中使用它来排除所有与 label1
匹配的指标。
您不需要
group_left
,因为带有 unless
子句的 on
不会更改左操作数的标签集(与带有 and
子句的 on
不同)。