Путь к 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
Примечание: я не проверял выражения, они могут потребовать некоторого улучшения