Skip to content

Защита от ложных срабатываний

Ложное срабатывание (false positive) — это когда мониторинг прислал «DOWN!», а сайт на самом деле работает. Один такой ложный алерт в 3 ночи — и доверие к мониторингу подорвано. Мы делаем три уровня защиты от false-positive.

Уровень 1. Многорегиональные проверки

Section titled “Уровень 1. Многорегиональные проверки”

Каждую проверку выполняют одновременно три агента: Москва, Амстердам, США. Решение о статусе принимается по согласию:

  • UP — хотя бы один агент видит OK
  • DOWN — все ответившие агенты согласны что сайт упал

Если только один регион видит проблему — это проблема у проверяющего, а не у вашего сайта. Мы не шлём алерт.

Подробнее в статье Проверки из 3 регионов.

Уровень 2. Ретраи при сетевых ошибках

Section titled “Уровень 2. Ретраи при сетевых ошибках”

Если агент не может подключиться (таймаут, отказ соединения) — он повторяет проверку через 1 секунду. Всего две попытки.

Это защищает от мгновенных сетевых глюков: пакет потерялся, маршрут моргнул, TCP не успел установиться. Если на второй попытке сайт открылся — считаем что всё хорошо, ничего не было.

Таймауты для проверок:

  • Подключение — 10 секунд
  • Полная проверка — 15 секунд

Если сайт открывается медленнее 15 секунд — это уже считается падением. Так и есть: для пользователя сайт который грузится 20+ секунд по факту мёртв.

Уровень 3. Двойная проверка через curl

Section titled “Уровень 3. Двойная проверка через curl”

Это самый интересный уровень. Когда наша асинхронная HTTP-проверка (через библиотеку httpx) сказала «DOWN» — мы не сразу шлём алерт. Сначала перепроверяем через стандартный curl.

Зачем это нужно:

  • httpx и curl — разные клиенты. У них немного отличается работа с TLS, парсингом заголовков, обработкой 100-Continue. Иногда httpx падает там, где curl нет.
  • Имитация настоящего пользователя. curl — самый «обычный» HTTP-клиент, его поведение ближе всего к браузеру.

Если curl говорит UP — мы заменяем результат на UP, алерт не идёт. Это спасает от ложных алертов из-за нюансов TLS-handshake или особенностей конкретного сервера.

Если оба согласны DOWN — значит, действительно DOWN, отправляем уведомление.

После того как сайт упал — у нас включается режим fast-recovery: специальный мини-цикл, который проверяет упавшие сайты каждые 5 секунд (вместо обычной минуты).

Это нужно чтобы:

  • Узнать о восстановлении сайта быстро, а не ждать минуту
  • Отправить UP-алерт в течение секунд после фактического восстановления

Fast-recovery работает только для тех сайтов которые сейчас DOWN и упали не более 24 часов назад. После 24 часов простоя мы переключаемся обратно на обычный минутный интервал — раз сайт лежит давно, нет смысла дёргать его каждые 5 секунд.

Мониторинг шлёт DOWN-уведомление если выполнены все условия:

  1. Все ответившие агенты вернули ошибку
  2. Это не однократная сетевая ошибка (ретрай не помог)
  3. curl тоже подтвердил падение
  4. Сайт не на паузе

Если хотя бы одно условие нарушено — алерт не идёт.

UP-уведомление приходит когда:

  1. Сайт ранее был в статусе DOWN
  2. Хотя бы один агент видит OK
  3. Этот OK подтверждается следующей проверкой (защита от моргания «UP-DOWN-UP»)

Если ложный DOWN всё-таки случился

Section titled “Если ложный DOWN всё-таки случился”

Бывает. Никакая защита не даёт 100%. Если получили ложный алерт:

  1. Не паникуйте — проверьте сайт сами, через браузер
  2. Если сайт работает — посмотрите в кабинете историю проверок: что увидели агенты в момент алерта
  3. Если проблема системная (например, наш агент косячит) — напишите в поддержку, разберёмся и поправим