Assuming I have two different metrics with different labels names but the same a group of values :
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
Now I want to query metric1 with label1 but filter out all metrics with the same value as in metric2 label2
I know I can metric1{label1!=~"val2|val3"}
but what if i have 300 values in metric1 and 200 in metric2 and these can change over time? how to filter it out dynamically?
tried many things like this:
metric_name1 unless metric_name2 on(common_label) group_left
but without success
Your attempt is in correct direction. It's just that on()
clause needs label common for both metrics, but based on your example, they are not.
This is not a problem though: label_replace
can help us here.
metric_name1
unless on(label1)
label_replace(metric_name2, "label1", "$1", "label2", "(.*)")
Here, I copy label label2
into label1
, and then use it in unless
to exclude all the metrics with matching label1
.
You don't need group_left
since unless
with on
clause doesn't change left operand's labels set (unlike and
with on
clause).