Как получить разницу между двумя разными метриками прометея?

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

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 = "app-name", exported_instance = "application_111111111111111111", exported_job = "application_111111111111111111", instance = "XX.XXX.X.XX", job = "job_name", number = "1", role = "executor" }

    kafka_server_brokertopicmetrics_messagesin_total

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

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

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


person Cherry    schedule 26.03.2019    source источник


Ответы (1)


В 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>.

person Michael Doubez    schedule 26.03.2019