Вычислить количество секунд (или, что эквивалентно, процент времени) за прошедший час / день / независимо от того, что сработало оповещение, довольно просто:
sum_over_time(ALERTS[1h:1s])
Или с меньшим разрешениемпо соображениям эффективности:
sum_over_time(ALERTS[1h:10s]) * 10
Определение того, когда срабатывает оповещение (или, эквивалентно, сколько времени оно срабатывает с момента последнего срабатывания), несколько сложнее:
ALERTS{alertstate="firing"}
* ignoring(alertstate)
(
time() - max_over_time(timestamp(ALERTS{alertstate="pending"})[1h:10s])
or ignoring(alertstate)
ALERTS{alertstate="firing"} * 3600
)
Т.е. время, прошедшее с тех пор, как оно в последний раз находилось в состоянии "pending"
, если оно в данный момент стреляет. Обратите внимание, что есть диапазон 1h
и значение по умолчанию 3600, что означает, что он достигает максимума в 3600 секунд.