Выбор ответа Middle PromQL обновлено

Алерт на пропавший сервис

Вопрос

Алерт sum(rate(http_requests_total{job="api"}[5m])) == 0 не сработал, когда все поды сервиса удалили. Почему и как исправить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Рядов нет, сравнивать не с чем; нужен absent(up{job="api"}). sum по пустому вектору возвращает пустой результат, а не 0, поэтому условие нечему выполнять. absent() возвращает 1, когда рядов нет.

Варианты ответа

  1. Алерт сработает через 15 дней, когда истечёт ретеншн старых рядов
  2. sum по пустому множеству даёт 0, значит сломан Alertmanager
  3. Нужно заменить == 0 на < 1, чтобы учесть дробные значения
  4. Рядов нет, сравнивать не с чем; нужен absent(up{job="api"})правильный ответ

Разбор

sum по пустому вектору возвращает пустой результат, а не 0, поэтому условие нечему выполнять. absent() возвращает 1, когда рядов нет. Хорошая практика: отдельный алерт на исчезновение цели или метрики для каждого критичного сервиса. Ретеншн и замена оператора проблему не решают.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.