Как получить точки данных временного ряда, которых нет в другом временном ряду, с помощью Promql?

Например, если у меня есть два временных ряда, как показано ниже.

metric_1{id=1} 1
metric_1{id=2} 1
metric_1{id=3} 1
metric_2{id=1} 1
metric_2{id=3} 1

Я хотел бы получить это как результат запроса, поскольку id=2 отсутствует в metric_2.

{id=2} 1

Подобно этому вопросу Сравнительный запрос для сравнения двух таблиц SQL Server но в Promql. Спасибо за любую помощь.


person Pol    schedule 21.10.2020    source источник


Ответы (1)


Таким образом, вы в основном хотите отбросить все серии в metric_1, которые имеют значение для метки id, которое также можно найти в серии metric_2. В SQL это будет выглядеть примерно так:

metric_1 left outer join metric_2 on id

В «Прометее» сначала вы можете встретить group_left. (подробнее об этом читайте здесь, Левое соединение в PromQL. Но это не сработает Вместо этого мы используем оператор unless.

metric_1 unless on (id) metric_2
person trallnag    schedule 22.10.2020
comment
Спасибо. Это работает. Я как-то пропустил это в документации. Вот на случай, если кому-то понадобится prometheus.io / docs / prometheus / latest / querying / operations /. Также дополнительную информацию и пример использования unless можно найти здесь robustperception.io/absent- метрики оповещения о скопированных данных. - person Pol; 22.10.2020