Grafana Prometheus для расчета общего времени простоя при неудачном ответе probe_success, но без учета времени простоя в одну минуту - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть запрос скажем (1-probe_success {instance = "https://www.google.com"}) - я в основном пытаюсь получить общее количество раз, когда экземпляр был недоступен. На данный момент он работает нормально, когда я настроил его как «Singlestat», показывающий значение «Total» на Grafana.

Однако, что если я хочу исключить время простоя, которое составляет менее одной минуты? Позволяет ли Прометей разрешить подзапрос / условие для достижения этого?

Мой Прометей в настоящее время настроен на очистку данных каждые 15 секунд. В идеале я хотел бы видеть мое общее значение как 5 в приведенном ниже сценарии;

Пример данных за последние 2 минуты

7: 00: 00AM - 1 (вниз)

7: 00: 15:00 - 1 (вниз)

7: 00: 30:00 - 1 (вниз)

7: 00: 45:00 - 1 (Вниз)

7: 01: 00 утра - 1 (Вниз)

7: 01: 15:00 - 0 (вверх)

7: 01: 30:00 - 1 (вниз) )

7: 01: 45 утра - 0 (вверх)

7: 02: 00 утра - 0 (вверх)

Спасибо

1 Ответ

0 голосов
/ 05 февраля 2020

Путь к express времени простоя более одной минуты:

max_over_time(up[1m])

Показывает, сколько раз служба была недоступна в течение более 1 минуты. Например, для входной серии (0 означает «вниз») с интервалом 15 с, выходная серия будет 0 только когда 0 в течение 1 мин (4 последовательных нуля)

input : '1 1 1 1 0 1 0 0 1 0 0 0 0 0 0'
output: '1 1 1 1 1 1 1 1 1 1 1 1 0 0 0'

Если вы хотите вычислить число если система не работала (т. е. сколько раз она переключалась с 1 на 0), вы можете использовать функцию изменения , чтобы вычислить, сколько раз она переключилась. Затем с небольшой логикой c, сколько раз он был выключен

floor(changes(max_over_time(up[1m])[1d:])/2) + (up == bool 0)

Если вы хотите посчитать время, проведенное в выключенном состоянии, это становится более сложным, потому что вы должны обнаружить переключение с 1 на 0, которые учитываются в течение 1 минуты и последующего состояния «вниз» до первого переключения обратно с 0 на 1.

Это может быть что-то вроде:

(max_over_time(up[60s]) == bool 0) * ((up offset 61s == bool 1) * count(up[60s]) OR vector(1))

Что даст число перед 0 при переключении более 1 мин, а затем 1

input : '1 1 1 1 0 1 0 0 1 0 0 0 0 0 0'
output: '0 0 0 0 0 0 0 0 0 0 0 0 4 1 1'

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

 # downtime for more than 1min other the previous day
 average((...)[1d:]) * 86400

Примечание: я не проверял выражения, они могут потребовать некоторого улучшения

...