Promql 动态过滤掉标签中值与另一个指标相同的时间序列

问题描述 投票:0回答:1

假设我有两个不同的指标,具有不同的标签名称,但一组值相同:

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
但没有成功

prometheus metrics promql victoriametrics metricsql
1个回答
0
投票

你的尝试方向是正确的。只是

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
不同)。

© www.soinside.com 2019 - 2024. All rights reserved.