Прометей - условие на основе арифметики меток

Предположим, у меня есть метрика my_metric, и я хочу вычислить разницу между текущей метрикой и метрикой, полученной два дня назад, на основе метки my_label. Есть ли способ сделать это в PromQL без жесткого кодирования значений меток?

my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-01"}   10
my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-02"}   20
my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-03"}   60

Предположим, мы на 2020-05-01 - ожидаемый результат будет 60-10 = 50.

Другими словами - мне нужен запрос, который в SQL будет примерно таким:

SELECT m_2.value - m_1.value FROM my_metric m_1, my_metric m_2 
WHERE diff_date('day', m_2.my_label, m_1.my_label) = 2

person mrjoseph    schedule 08.05.2020    source источник
comment
Итак, ваша основная проблема заключается в том, что вы хотите выполнить сравнение на основе времени, но используя метку как истинную метку времени, а не метку времени, при которой метрика была извлечена? Это известный вопрос, см. github.com/prometheus/pushgateway / blob / master / github.com/prometheus/pushgateway/issues/109   -  person Nemo    schedule 03.03.2021


Ответы (1)


это даст вам разницу между временем, когда вы вызываете запрос, и значением метрики и двумя днями ранее:

my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"}
- ignoring(my_label) my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"} offset 2d

Подробнее о ключевом слове смещения можно прочитать здесь: https://prometheus.io/docs/prometheus/latest/querying/basics/#offset-modifier.

person KompiKompi    schedule 08.05.2020
comment
Это не так просто, как кажется;). Я не хочу жестко кодировать значения меток. Представьте себе таблицу записей с разными значениями для my_label. Мне нужна эта разница my_label - 2 для всей таблицы. - person mrjoseph; 08.05.2020
comment
Я отредактировал свой ответ, похоже, я неправильно понял ваш вопрос - person KompiKompi; 09.05.2020
comment
Нет, еще раз - обратите внимание, что я имею в виду ярлык, а не значение. Меня не волнует метка времени метрик, сгенерированная Prometheus, поскольку это техническая дата - мне нужно выполнить расчет на основе значения моей метки, которая является деловой датой. - person mrjoseph; 11.05.2020
comment
Я отредактировал свой вопрос по аналогии с SQL, чего я хотел бы достичь. - person mrjoseph; 11.05.2020
comment
Я думаю, что это можно было бы сделать в Grafana с объявлением переменной, но не в простом PromQL - person KompiKompi; 11.05.2020
comment
Объявление переменной также основано на источнике данных, поэтому мы оказываемся в одном месте ... В любом случае - спасибо за вашу помощь! А пока мне придется представить некоторые обходные пути. - person mrjoseph; 12.05.2020
comment
Самый простой способ - вычислить его в коде и раскрыть таким образом, без использования promql - person KompiKompi; 13.05.2020