Перейти к содержимому

Активные мониторы — HTTP-эндпоинт и TCP-порт

В отличие от heartbeat-а, где cron сам подтверждает работоспособность, активный монитор работает наоборот: Notifly сам периодически дёргает указанный URL или TCP-порт. Это удобно, когда:

  • сервис стоит на чужом сервере или у вас нет доступа править его cron;
  • нужно проверять внешние зависимости — платёжные шлюзы, чужие API, IoT-устройства;
  • вы хотите быть уверены не только, что cron на сервере жив, но и что сам сервис принимает соединения (порт открыт, TLS не протух, healthcheck отвечает).
Создать монитор:
Тип: HTTP(S)
Цель: https://example.com/health
Период: 60 сек
Таймаут: 10 сек
Подряд неудач: 3 ← чтобы не реагировать на единичный сетевой джиттер
Ожид. код: 0 ← любой 2xx
Alert: "Сайт example.com недоступен!" приоритет 9
Recovery: "Сайт example.com снова отвечает."

При первой же серии из 3 подряд неуспешных GET-ов прилетит push с заголовком Сайт example.com недоступен! и расшифровкой ошибки (status=502 или dial tcp: i/o timeout). Когда сайт ответит снова — вторым push-ом «снова отвечает».

Создать монитор:
Тип: TCP-порт
Цель: db-replica.internal:5432
Период: 30 сек
Таймаут: 5 сек
Подряд неудач: 2
Alert: "Postgres-реплика не принимает соединения!" приоритет 10
Recovery: "Реплика снова отвечает на 5432."

Notifly раз в 30 секунд делает net.Dial("tcp", host:port) с таймаутом 5 секунд. Удобно для:

  • БД — Postgres :5432, MySQL :3306, MongoDB :27017, Redis :6379;
  • mail/SMTP:25, :465, :587;
  • SSH-bastion:22 (если на нём что-то слушает — порт открыт);
  • кастомных gRPC/TCP-демонов, у которых нет HTTP-healthcheck.

TCP-проверка не делает протокольного hand­shake — только подтверждает, что порт принимает соединение. Этого обычно достаточно: если процесс упал, порт больше никто не слушает.

Не совсем «недоступность», но сюда же: установите HTTP-монитор на ваш сайт с expectedStatus: 200 и периодом 1 час. Если сертификат протухнет — Go-клиент откажется открывать соединение и придёт алёрт x509: certificate has expired. Не самый красивый способ, но работает «бесплатно» поверх обычного healthcheck-а.

HeartbeatАктивный монитор
Кто инициируетВаш cron / сервисСама Notifly
Сетевая модельInbound (Notifly слушает)Outbound (Notifly стучится)
Когда полезенКонтролировать факт запуска cronКонтролировать доступность сервиса
Защищает отCron не запустился, скрипт повисУпал процесс, закрыт порт, протух SSL
ТребуетДоступ к cron-файлу/кодуПросто публичный URL/host:port

Часто оба используют в паре: heartbeat — что бэкап запустился, монитор — что сам сервис, который он бэкапит, всё ещё отвечает.

> Поставь активный монитор на https://api.notifly.ru/health,
проверять каждые 30 секунд, алёрт после 3 подряд неудач,
с recovery-сообщением «API снова работает».

См. полный список параметров.