Алертинг

Как real-time алерты снизили нам MTTR в 4 раза

MTTR (mean time to recovery) — один из честных показателей зрелости эксплуатации. Долгое время мы боролись за него «количеством»: добавляли метрики, дашборды, проверки. Но среднее время восстановления почти не двигалось. Оказалось, проблема была не в данных, а в задержке сигнала.

Где терялось время

Мы разложили инцидент на этапы и измерили каждый:

  • Обнаружение — от поломки до срабатывания алерта.
  • Оповещение — от алерта до того, как дежурный его увидел.
  • Диагностика — от «вижу алерт» до «понимаю причину».
  • Устранение — собственно исправление.

Больше всего времени съедали первые два этапа. Опрос метрик раз в минуту плюс буферизация давали задержку обнаружения до 90 секунд ещё до того, как кто-то получал уведомление.

Переход на стриминг

Мы перевели доставку метрик и срабатывание правил на потоковую модель: значения приходят по WebSocket-каналу, а правила вычисляются на лету. Подробнее транспорт описан в документации WebSocket API.

// правило срабатывает на потоке, а не по опросу
when("errRate").above(1).for("30s")
  .notify("telegram:oncall");

Задержка обнаружения упала с десятков секунд до единиц. Дежурный получал сообщение почти одновременно с самим отклонением.

Что ещё помогло

  • Дедупликация и подавление шума. Один корневой инцидент — одно уведомление, а не двадцать.
  • Контекст в самом алерте. Ссылка на дашборд и связанные логи прямо в сообщении.
  • Эскалации. Если за 5 минут никто не отреагировал — сигнал уходит выше.

Результат

За квартал медианный MTTR снизился с 48 до 11 минут. Главным рычагом оказалась не глубина мониторинга, а скорость, с которой сигнал доходит до человека.

Попробуйте DevSec на своих сервисах — живые метрики и алерты подключаются за несколько минут.