Как добавить две метрики Прометея вместе - PullRequest
0 голосов
/ 03 ноября 2019

Я запрашиваю одну метрику и получаю результат 1:

node_systemd_unit_state{name="web.service",state="active",type="simple"}

Если я запрашиваю ту же метрику, но с другой меткой, я получаю результат 0:

node_systemd_unit_state{name="web.service",state="inactive",type="simple"}

Но если я попытаюсь сложить их вместе, я получу no data

node_systemd_unit_state{name="web.service",state="active",type="simple"} + node_systemd_unit_state{name="web.service",state="inactive",type="simple"}

Но при чтении https://prometheus.io/docs/prometheus/latest/querying/examples/#using-functions-operators-etc я ожидаю, что мое выражение сработает:

Если у нас есть две разные метрики с одинаковыми размерными метками, мы можем применить к ним двоичные операторы, и элементы с обеих сторон с одинаковым набором меток будут сопоставлены и распространены в выходных данных. Например, это выражение возвращает неиспользуемую память в MiB для каждого экземпляра (в вымышленном кластерном планировщике, раскрывающем эти метрики об экземплярах, которые он запускает):

(instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024/1024

  • Как мне добавить две мои метрики вместе?
  • Что не так с моим запросом?

1 Ответ

0 голосов
/ 03 ноября 2019

Ключ в том, чтобы использовать функцию ignoring по причинам, которые, вероятно, связаны с линейной алгеброй, но это то, что вы ищете:

node_systemd_unit_state{name="web.service",state="active",type="simple"} * 4 + ignoring(state) node_systemd_unit_state{name="web.service",state="inactive",type="simple"} * 3

Я нашел пример, описанный в Прометеедокументы о: Соответствии вектора

Один-к-одному находит уникальную пару записей с каждой стороны операции. В случае по умолчанию это операция, следующая за форматом vector1 vector2. Две записи совпадают, если они имеют одинаковый набор меток и соответствующие значения. Ключевое слово ignoring позволяет игнорировать определенные метки при сопоставлении, а ключевое слово on позволяет сократить набор рассматриваемых меток до предоставленного списка:

<vector expr> <bin-op> ignoring(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) <vector expr>

Пример ввода:

method_code:http_errors:rate5m{method="get", code="500"}  24
method_code:http_errors:rate5m{method="get", code="404"}  30
method_code:http_errors:rate5m{method="put", code="501"}  3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21

method:http_requests:rate5m{method="get"}  600
method:http_requests:rate5m{method="del"}  34
method:http_requests:rate5m{method="post"} 120

Пример запроса:

method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m
...