Как получить разницу между 2 различными метриками Прометея? - PullRequest
0 голосов
/ 26 марта 2019

Рассмотрим примеры метрик:

increase(application_executor_recordsWritten[20m])
increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[20m])

Если я выполню эти метрики отдельно на графе Прометея - все работает.Но когда попробуйте что-то вроде:

increase(application_executor_recordsWritten[20m]) -  increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[20m])

Я получил No datapoints error.

  1. Возможно, это происходит потому, что application_executor_recordsWritten получено за последний 1 час, а kafka_server_brokertopicmetrics_messagesin_total получено за6+ часов.
  2. Может ли это произойти из-за того, что эти метрики имеют разные «настройки сбора», рассмотрим вывод консоли Prometheus:

    application_executor_recordsWritten

    {app_name = "имя приложения", exported_instance = "application_111111111111111111", exported_job = "application_111111111111111111", экземпляр = "XX.XXX.X.XX", работа = "job_name", номер = "1", роль = "исполнитель"}

    kafka_server_brokertopicmetrics_messagesin_total

    {instance = "XX.XXX.X.XX", job = "job_name", topic = "my_topic"}

Прометей использует что-то вроде ключевого слова ignore(???), но я не могу понять, как оно работает и как применять его для этих метрик.

Есть какие-нибудь идеи, как выполнить различие в метриках?Какой правильный синтаксис для этого?

1 Ответ

0 голосов
/ 27 марта 2019

В PromQL арифметические бинарные операторы между двумя диапазонами метрик (или векторами) подчиняются сопоставлению векторов : операция применяется только к записям с одинаковым точным набором меток (имя и значение).

Если есть разница, и никакие значения не спарены, вы получите печально известную ошибку No data point.

Если вы хотите, чтобы они совпадали, вы должны

  • либо игнорируя некоторые метки, которые не совпадают (metric1 - ignoring(a_lone_label) metric2)
  • , либо указывая, на какой метке выполняется совпадение (metric1 - on(common_label_name_and_value) metric2)

В приведенных вами примерах этонепонятно что должно совпадать.Я бы сказал instance и job;это может быть:

increase(application_executor_recordsWritten[...]) - on (job,instance) increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[...])

Если у вас есть одна сторона оператора, содержащая элементы, которые должны быть соединены с более чем одним элементом другой стороны (вызовите сопоставление «один ко многим»), вы должны указатькакая сторона оператора (правая или левая) имеет больше записей: использование group_<side:rigth|left>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...