Активные мониторы — HTTP-эндпоинт и TCP-порт
В отличие от heartbeat-а, где cron сам подтверждает работоспособность, активный монитор работает наоборот: Notifly сам периодически дёргает указанный URL или TCP-порт. Это удобно, когда:
- сервис стоит на чужом сервере или у вас нет доступа править его cron;
- нужно проверять внешние зависимости — платёжные шлюзы, чужие API, IoT-устройства;
- вы хотите быть уверены не только, что cron на сервере жив, но и что сам сервис принимает соединения (порт открыт, TLS не протух, healthcheck отвечает).
Сценарий 1: HTTP healthcheck сайта
Заголовок раздела «Сценарий 1: HTTP 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-ом «снова отвечает».
Сценарий 2: TCP-порт базы данных
Заголовок раздела «Сценарий 2: TCP-порт базы данных»Создать монитор: Тип: 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-проверка не делает протокольного handshake — только подтверждает, что порт принимает соединение. Этого обычно достаточно: если процесс упал, порт больше никто не слушает.
Сценарий 3: SSL-сертификат на грани
Заголовок раздела «Сценарий 3: SSL-сертификат на грани»Не совсем «недоступность», но сюда же: установите HTTP-монитор на ваш сайт
с expectedStatus: 200 и периодом 1 час. Если сертификат протухнет —
Go-клиент откажется открывать соединение и придёт алёрт x509: certificate has expired. Не самый красивый способ, но работает «бесплатно» поверх
обычного healthcheck-а.
Чем это отличается от heartbeat-а
Заголовок раздела «Чем это отличается от heartbeat-а»| Heartbeat | Активный монитор | |
|---|---|---|
| Кто инициирует | Ваш cron / сервис | Сама Notifly |
| Сетевая модель | Inbound (Notifly слушает) | Outbound (Notifly стучится) |
| Когда полезен | Контролировать факт запуска cron | Контролировать доступность сервиса |
| Защищает от | Cron не запустился, скрипт повис | Упал процесс, закрыт порт, протух SSL |
| Требует | Доступ к cron-файлу/коду | Просто публичный URL/host:port |
Часто оба используют в паре: heartbeat — что бэкап запустился, монитор — что сам сервис, который он бэкапит, всё ещё отвечает.
Создание из MCP
Заголовок раздела «Создание из MCP»> Поставь активный монитор на https://api.notifly.ru/health, проверять каждые 30 секунд, алёрт после 3 подряд неудач, с recovery-сообщением «API снова работает».