Уровень 0: Curl в кроне

Самое простое что можно сделать:

*/5 * * * * curl -s -o /dev/null -w "%{http_code}" https://example.com | grep -v 200 && \
  curl -s "https://api.telegram.org/botTOKEN/sendMessage?chat_id=ID&text=Сайт упал"

Работает. Но у этого подхода куча проблем: нет истории, нет повторной проверки перед алертом, нет мониторинга SSL, нет красивой страницы для клиента. И если сервер сам упадёт — скрипт тоже упадёт вместе с ним.

Уровень 1: HTTP мониторинг

Правильный HTTP мониторинг — это не просто проверка что сервер отвечает. Это проверка HTTP-статуса, измерение времени ответа, повторная проверка перед алертом чтобы исключить флапы, и отдельная проверка с внешнего сервера.

Последний пункт критичен. Если мониторинг живёт на том же сервере что и сайт — при падении сервера упадёт и мониторинг.

Уровень 2: SSL мониторинг

Let's Encrypt иногда не продлевается автоматически. Сертификат истекает — браузер показывает «Небезопасно». Конверсия падает до нуля.

Правильное решение — отдельный тип монитора который подключается к хосту через TLS и смотрит not_after в сертификате. Алерт за 14 дней до истечения — достаточно времени чтобы спокойно разобраться.

Уровень 3: Keyword мониторинг

Сайт может отвечать 200 OK но показывать страницу ошибки, пустой экран или результат взлома. Keyword мониторинг проверяет наличие конкретного текста в ответе — например названия компании или элемента интерфейса.

Уровень 4: Heartbeat мониторинг

HTTP мониторинг не поможет для фоновых задач — cron-джобов, воркеров очередей, скриптов обработки данных. Heartbeat работает наоборот: задача сама пингует мониторинг после каждого выполнения. Если пинг не пришёл в ожидаемое время — алерт.

# В конце cron-задачи
curl -s https://uppulse.ru/hb/ВАШ_ТОКЕН

Уровень 5: Webhook и интеграции

Telegram-уведомления хороши для личного использования. Но в команде нужна интеграция с существующими инструментами. Webhook решает это просто: при инциденте отправляется POST-запрос с JSON на указанный URL.

{
  "monitor_name": "Production API",
  "status": "down",
  "error": "Connection timeout",
  "timestamp": "2026-04-14T10:30:00Z"
}

Итого

Каждый уровень добавляет надёжности. Для личного сайта достаточно HTTP мониторинга с Telegram-алертом. Для production-сервиса нужны все уровни — от HTTP до Webhook интеграции.