Прометей: как мне суммировать с двумя различными показателями - PullRequest
0 голосов
/ 07 января 2020

У меня есть 2 разные метрики: metric_a с типом поля metric_b с типом поля (тот же)

Я пытаюсь суммировать a и b одного и того же типа. Если тип существует только для metric_a, а не для metric_b - он должен вернуть результат metric_b. Я пробовал много вариантов на прометее:

sum by (type)(metric_a{job=~"provision-dev"}) or vector(0) + sum by(type)(metric_b{job=~"provision-dev"}) or vector(0): возвращает только значения из metric_a и не вычисляет результаты metric_b.

sum by (type)(metric_a{job=~"provision-dev"}) + sum by(type)(metric_b{job=~"provision-dev"}): возвращает только значения из metric_b и не вычисляет результаты metric_a.

sum by (cluster_id)(provision_scale_out_failures{job=~"provision-dev"} + provision_scale_out_success{job=~"provision-dev"}): ну, это даже не правильный запрос

В основном вот пример успеха:

metric_a:

  • type = type_1, sum = 5
  • type = type_2, sum = 2

metric_b:

  • type = type_1, sum = 4
  • type = type_3, sum = 3

результат запроса:

  • type = type_1, sum = 9
  • type = type_2, sum = 2
  • type = type_3, sum = 3

1 Ответ

0 голосов
/ 08 января 2020

Это ожидаемое поведение при использовании бинарного оператора : для обеих сторон должна быть установлена ​​соответствующая метка для учета.

Если вы хотите объединить обе стороны и получить единственный, вы сначала должны получить объединение различных метрик, используя метку __name__:

 sum by(__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"})

. Вы можете каскадно объединить оператор агрегирования :

sum by (type) (sum by (__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"}))

Наконец, вы также можете сжать все в:

sum by (type) ({__name__=~"metric_a|metric_b",job=~"provision-dev"})
...