#prometheus #grafana
#prometheus #графана
Вопрос:
У меня есть датчик в Prometheus, который имеет значение -1, когда моя служба не работает (в моем развертывании 0 модулей). Когда служба запущена, датчик сохраняет количество пользователей, вошедших в систему. Я пытаюсь рассчитать общее время, в течение которого этот индикатор составлял -1 в течение дня, и, возможно, среднее значение за неделю.
Я попытался использовать timestamp()
функцию следующим образом: timestamp(my_gauge[1d] == -1)
, но я получаю сообщение об ошибке. Я пробовал другие вещи, например min_over_time()
, но это тоже не сработало.
РЕДАКТИРОВАТЬ: если у кого-нибудь есть другая идея о том, как рассчитать общее время простоя развертывания k8s за день, не используя мой датчик, я был бы признателен.
Ответ №1:
Вы можете получить время, в течение которого служба не работала в течение предыдущих 24 часов, используя:
avg_over_time((my_gauge == bool 0)[1d:])
Вам нужен Prometheus с поддержкой подзапросов (версия 2.7), и вы можете генерировать метрику только в скользящем окне.
Комментарии:
1. Спасибо! В итоге я получил следующее :
sum_over_time( (my_gauge == bool -1)[1d:] )
. Это дает мне количество минут, в течение которых мой датчик был равен -1 в последний день.
Ответ №2:
Я бы сделал count(my_gauge == bool -1)
и прочитал сумму с течением времени в Графане в разделе Итого, когда для диаграммы установлено значение 1d. Вы можете дополнительно установить значение Min step
1d, но тогда Grafan будет усреднять количество, поэтому вам нужно будет умножить запрос на некоторый коэффициент $__interval_ms
. Коэффициент будет зависеть от частоты метрики.
Комментарии:
1. Вместо
count()
этого лучше использоватьavg()
. Тогда у вас нет временного фактора. Оставшаяся проблема заключается в том, чтобы иметь метрику в границах дня, что невозможно. Вы также должны подать в суд на подзапросы