Представьте: вы настроили ежедневный бэкап базы данных. Скрипт надёжно лежит в cron и каждую ночь складывает копию в S3. Вы спокойны. А через месяц обнаруживаете, что бэкапы не создавались… потому что две недели назад сервер перезагрузили, а скрипт забыли добавить в автозагрузку.
Знакомо? Или другая ситуация: вы разрабатываете устройство для умного дома, которое работает за NAT и не имеет публичного IP. Как узнать, что оно всё ещё онлайн и отправляет данные?
Обычный HTTP-мониторинг тут бессилен - нет открытого порта, до которого можно достучаться извне. Но есть элегантное решение, которое называется Heartbeat мониторинг. И в PingZen он работает из коробки - бесплатно и без танцев с бубном.
Почему стандартный мониторинг не помогает
Самый распространённый способ проверки - «мы стучимся к вам». Мониторинговый сервер пытается открыть TCP-соединение, отправить HTTP-запрос или пинг. Это отлично работает для сайтов, API и публичных сервисов.
Но что, если проверяемый объект:
сам инициирует соединения (cron-задачи, фоновые обработчики);
находится в приватной сети (за NAT, в корпоративной VPN);
не имеет публичного IP (умные розетки, камеры, датчики);
работает по расписанию и просыпается только для выполнения работы?
Во всех этих случаях классический pull-мониторинг (когда проверяющий идёт к цели) бесполезен. Цель просто недоступна для входящих подключений.
Heartbeat меняет правила игры
Идея проста до гениальности: не мы проверяем сервис, а сервис сам сообщает нам, что он жив. Это называется heartbeat-мониторинг (или push-мониторинг). Вы даёте своему приложению уникальный URL, а оно регулярно стучится на этот адрес. Если стук прекратился - значит, что-то пошло не так.
В PingZen такой монитор создаётся за минуту. Вот как выглядит экран создания Heartbeat-монитора:

Что мы видим на экране:
Название монитора - просто чтобы не запутаться.
URL Slug - уникальная часть адреса, по которому сервис будет стучаться. Полный URL выглядит так: https://pingzen.dev/api/v1/ping/my-super-job
Ожидаемый интервал проверки - как часто ваш скрипт должен «пинать» нас (например, раз в 5 минут).
Льготный период (grace period) - дополнительное время ожидания после интервала. Это чтобы случайная задержка в пару минут не вызвала ложную тревогу. Если интервал 5 минут, а льготный период 2 минуты, то тревога сработает только если heartbeat не будет получен в течение 7 минут.
После создания вы попадаете на страницу монитора, после нужно нажать на редактирование монитора, где увидите уникальный эндпоинт и готовые примеры интеграции:


Как видите, PingZen даёт не просто URL, а сразу готовые команды для самых популярных сценариев: для cron, для bash-скриптов, для Python. Просто копируете и вставляете.
Где это реально нужно
1. Мониторинг cron-задач и scheduled jobs
Самый частый сценарий. Вы добавляете в свой crontab строчку, скопированную прямо из интерфейса:
*/5 * * * * curl -fsS -m 10 --retry 5 -o /dev/null https://pingzen.dev/api/heartbeat/backup-job
Или, если хотите более надёжный вариант с retry:
*/5 * * * * curl -fsS -m 10 --retry 5 -o /dev/null https://pingzen.dev/api/v1/ping/backup-job
Теперь если задача не выполнится (скрипт упал, сервер лёг, cron сломался), PingZen через заданное время пришлёт уведомление в Telegram, Slack или на почту.
2. Мониторинг фоновых процессов в приложении
В любом приложении есть фоновые воркеры: обработчики очередей, парсеры, сборщики метрик. Добавьте вызов heartbeat в их основной цикл:
# Пример на Python import requests import time def worker_loop(): while True: # делаем полезную работу process_jobs() # сообщаем, что живы requests.get("https://pingzen.dev/api/heartbeat/worker-1") time.sleep(60)
Если воркер завис или упал, запросы перестанут приходить - вы узнаете об этом быстро.
3. Устройства за NAT (IoT, умный дом, роутеры)
Ваше устройство не имеет публичного IP, но оно может инициировать соединения наружу. Пусть оно раз в час отправляет heartbeat. Если сигнал пропал - значит, устройство потеряло связь с интернетом или выключилось.
# На роутере с OpenWrt можно добавить в cron 0 * * * * wget -qO- https://pingzen.dev/api/heartbeat/router-home
4. Мониторинг VPN-подключений
Если у вас удалённые офисы подключаются по VPN, вы можете на каждом шлюзе настроить heartbeat. Пока туннель жив, heartbeat доходит. Нет heartbeat - сработала тревога, можно проверять соединение.
5. Проверка скриптов в изолированных средах
CI/CD пайплайны, временные контейнеры, Lambda-функции - они живут недолго, но важно знать, что они успешно выполнились. Heartbeat в конце работы скажет: «Задача выполнена». Добавьте вызов в конец вашего скрипта сборки или теста:
curl -X POST https://pingzen.dev/api/v1/ping/github-actions-run
Почему это лучше, чем self-hosted решения
Конечно, можно поднять свой сервер с cron-проверками. Но зачем, если есть готовый SaaS?
Никакой инфраструктуры. Не нужно ставить PostgreSQL, настраивать окружение, думать об отказоустойчивости.
Мгновенные уведомления. Telegram, Slack, Discord, email - всё из коробки.
Бесплатный порог. В PingZen можно создать неограниченное количество мониторов (включая heartbeat) с интервалом от 60 секунд и 6 каналами уведомлений: Telegram, Slack, Discord, MS Teams, Mattermost, Webhook.
Льготный период - настраивается под ваши нужды, чтобы избежать ложных срабатываний из-за редиректов или временных задержек.
Статистика и история. Все приходы heartbeat записываются, можно посмотреть график и убедиться, что задача работает стабильно.
Как это устроено внутри PingZen (немного техники)
Если интересно, под капотом всё просто и надёжно:
Каждый heartbeat-монитор имеет уникальный slug, по которому мы принимаем POST/GET запросы (поддерживаются оба метода, как указано на скриншоте).
При получении запроса мы сохраняем событие в таблицу
heartbeat_pingsPostgreSQL черезHeartbeatMonitorRepositoryImpl. Время каждого пинга фиксируется — это и есть наша история.Фоновый воркер запускается каждые 30 секунд (параметр
check_interval). Чтобы в кластерной среде несколько экземпляров приложения не дублировали работу, мы используем Redis для распределённой блокировки (distributed lock) — только один воркер получает право на сканирование.Воркер перебирает все heartbeat-мониторы и для каждого вычисляет, не превысило ли время с последнего сохранённого пинга допустимый порог (интервал + льготный период). Если превысило — статус меняется на DOWN, и мы инициируем отправку уведомлений.
В отличие от обычных мониторов, у heartbeat нет настраиваемого порога подтверждения сбоя (
confirmation_threshold). Статус DOWN фиксируется сразу при первом же пропуске. При этом мы всё равно отслеживаем количество последовательных пропусков (consecutive_misses) для статистики и отладки, но это значение не влияет на смену статуса.График прихода heartbeat строится на основе данных из таблицы
heartbeat_pingsс помощью обычных SQL-запросов (логика в_stats.py). Мы не используем для этого отдельную time-series базу — PostgreSQL отлично справляется с таким объёмом данных, а вам в интерфейсе всё равно отображается красивый и понятный график.
Никакой магии, только надёжный код на Python asyncio и быстрые реакции.
Пара слов о ложных срабатываниях
Самая частая проблема heartbeat-мониторинга - случайные задержки. Сервер может быть временно недоступен из-за сетевых проблем, или скрипт выполняется чуть дольше обычного.
Поэтому мы добавили льготный период (grace period). Если интервал 5 минут, а льготный период 2 минуты, тревога сработает только через 7 минут молчания. Этого достаточно, чтобы отсечь большинство временных глюков, но не пропустить реальную проблему.
Как создать Heartbeat-монитор: проще, чем кажется
Зарегистрируйтесь на PingZen.dev (есть вход через Telegram, Google, Yandex - мучительно не больно).
Нажмите «Создать монитор» и выберите тип Heartbeat.
Задайте имя, интервал и льготный период.
Получите уникальный URL и готовые примеры интеграции (как на скриншотах выше).
Вставьте вызов этого URL в свой скрипт, crontab или конфиг устройства.
Готово! Вы будете знать о проблемах раньше, чем они станут критичными.
Заключение
Heartbeat-мониторинг - это простой и надёжный способ следить за тем, что нельзя проверить извне. Он закрывает огромный пласт задач: от мелких cron-скриптов до распределённых устройств в полях. И теперь у вас есть готовый инструмент, который не требует сервера, настройки и денег (по крайней мере, пока вы не вырастете из стартового тарифа).
Попробуйте прямо сейчас, а в комментариях расскажите, какие ещё сценарии вы видите для heartbeat-мониторинга. Может быть, мы что-то упустили?
Жду ваших историй и вопросов!
P.S. Кстати, в PingZen есть и обычные HTTP/TCP/UDP/ICMP мониторы, и даже сложные проверки через Playwright (протокол Transaction) - можно эмулировать действия пользователя и проверять не просто доступность, а корректную работу интерфейса.
