Хабр, привет!

Это история о том, как желание просто проверить, жив ли мой блог, привело к трём дням танцев с бубном вокруг SSL-сертификата, а затем — к созданию собственного сервиса мониторинга, который теперь используют сотни разработчиков. Расскажу, почему существующие решения перестали устраивать, как мы реализовали поддержку UDP и ICMP в облаке и почему мониторинг должен быть «скучным».

Предыстория: как я стал сисадмином мониторинга

Год назад у меня была простая задача: настроить уведомления о падении личного блога и API пары пет-проектов. Думал, уложусь в 15 минут.

Спойлер: не уложился.

Я решил попробовать self-hosted решение — Uptime Kuma. Отличный опенсорс-проект, ничего не скажешь. Но:

  1. Нужен был сервер (или хотя бы VPS).

  2. Настройка Docker + обратный прокси + Let's Encrypt для статус-страницы заняла вечер.

  3. Через месяц пришло обновление, которое сломало совместимость с моей версией Node.js.

Я понял, что трачу больше времени на поддержку инструмента для наблюдения, чем на код, который этот инструмент должен защищать.

Боль существующих решений (субъективно, но честно)

Я прошерстил всё, что есть на рынке, и выделил ключевые проблемы.

1. UptimeRobot

Плюсы: Бесплатный порог входа, простой.
Минусы: Алерты приходят с задержкой 5-10 минут. Для продакшна это критично. За 5 минут пользователи успевают уйти к конкурентам, а поисковые боты - задетектить падение. Плюс - только HTTP и TCP. Ни UDP, ни ICMP.

2. Pingdom

Плюсы: Надёжный, много фич.
Минусы: Цена. $20/мес за мониторинг небольшого проекта - жирновато. Кредитка для триала - отдельный раздражитель.

3. Self-hosted (Uptime Kuma, Prometheus + Alertmanager)

Плюсы: Полный контроль, гибкость.
Минусы: Требует инфраструктуры и времени на поддержку. Обновления, безопасность, бэкапы - всё ложится на вас. Если у вас нет выделенного DevOps-инженера, это оверхед.

4. Better Stack

Плюсы: Красивый интерфейс, хорошие интеграции.
Минусы: Ценовая политика. UDP-мониторинг и многие другие «нишевые» фичи - только в дорогих тарифах.

5. Отдельная боль - UDP и ICMP

Большинство SaaS-мониторов вообще не умеют работать с UDP. А если умеют - это enterprise-функция за долларов в месяц.

Зачем вообще нужен UDP-мониторинг?

  • Игровые сервера (Minecraft, CS:GO, Rust) - работают поверх UDP.

  • DNS-серверы - без UDP они не живут.

  • Собственные приложения на UDP (например, syslog-коллекторы, трекеры).

  • Просто проверить, отвечает ли хост на ICMP-запросы (ping), чтобы понять, жив ли сервер, даже если веб-сервер упал.

Как мы строили PingZen

Я решил, что хочу инструмент, который:

  • не требует моей инфраструктуры;

  • поддерживает HTTP, TCP, UDP и ICMP «из коробки»;

  • шлёт алерты мгновенно;

  • и при этом остаётся бесплатным для небольших проектов.

Так родился PingZen.

Архитектура (кратко)

Мы используем распределённую сеть проверок из нескольких регионов (сейчас AWS + Fly.io), чтобы минимизировать ложные срабатывания и обеспечить глобальный охват.

Как работает UDP-мониторинг:

  1. Пользователь указывает хост и порт (например, mc.example.com:25565 для Minecraft).

  2. Наш checker формирует UDP-пакет (для Minecraft - специальный handshake-пакет, для DNS - запрос типа A).

  3. Если в течение таймаута приходит ответ - сервис жив. Если нет - фиксируем даунтайм.

  4. Важно: мы учитываем, что UDP - протокол без гарантии доставки, поэтому делаем несколько ретраев с разных нод, прежде чем подтвердить проблему.

ICMP-мониторинг реализован через сырые сокеты с правами CAP_NET_RAW (в контейнерах это отдельная история, но мы решили).

HTTP(S) и TCP - стандартно, с проверкой кодов ответа, таймаутов и валидацией тела (например, поиск подстроки в JSON-ответе).

Стек технологий

  • Бэкенд: Go (микросервисы checker'ов), Node.js (API)

  • Брокер сообщений: RabbitMQ (для очередей проверок и алертов)

  • База данных: PostgreSQL + TimescaleDB (для хранения временных рядов)

  • Кэш: Redis

  • Инфраструктура: Docker, Kubernetes, AWS (EC2, EKS), Fly.io

Особенности реализации

  1. Мгновенные алерты - никаких батчей. Как только кворум нод подтверждает проблему, событие летит в очередь, откуда его забирают воркеры уведомлений.

  2. Поддержка множества каналов - Telegram, Discord, Slack, Webhooks. Мы используем общий интерфейс Notifier, под который можно подписать любой новый канал.

  3. Публичные статус-страницы - генерируются статически и раздаются через CDN. Никакой нагрузки на базу. Пользователь может привязать свой домен, мы автоматически выдаём SSL через Let's Encrypt.

Технические детали для интересующихся

Как мы боремся с false positives

У нас есть настройка Confirmation Count - сколько последовательных неудачных проверок с разных нод нужно, чтобы считать сервис упавшим. По умолчанию - 2. Это позволяет отсекать случайные сетевые глюки.

Мониторинг UDP на практике

Чтобы проверить Minecraft-сервер, мы отправляем пакет 0xFE (server list ping) и ждём ответа с описанием сервера. Для DNS - отправляем запрос типа A на google.com и ждём ответ с кодом NOERROR.

JSON-валидация для API

Можно указать JSONPath (например, $.status) и ожидаемое значение (ok). Если ответ не соответствует - монитор падает.

Что дальше

Сейчас PingZen мониторит больше 500 проектов - от портфолио до продакшн-бэкендов. Мы активно собираем фидбек и планируем:

  • добавить проверки по GraphQL;

  • сделать более глубокую интеграцию с PagerDuty и Opsgenie;

  • реализовать «умные» эскалации (если через 5 минут не ответил в Telegram — дублируем в SMS).

Но главное - мы хотим, чтобы сервис оставался простым и полезным.

Сам по себе pingzen.dev бесплатный на данный момент и еще долго будет. Он все еще на стадии разработки. Ноо, уже сейчас можете создать неограниченное количество мониторов и использовать весь функционал. Основа в рабочем состоянии.

Так что, если заинтересованы - это отличная возможность попробовать что-то новое и упростить себе жизнь.

Мне очень интересна обратная связь.

  • Что используете для мониторинга сейчас?

  • Какие фичи вам реально нужны?

Возможно есть что-то еще ,что я могу сделать чтобы наша жизнь стала чуточку проще :-)

Я отвечу на все вопросы. Спасибо, что дочитали! ?

Комментарии (9)


  1. pantsarny
    21.02.2026 22:36

    Есть возможность импорта списка сайта файлом или через апи ?


  1. Heavenanvil
    21.02.2026 22:36

    Интересует возможность так называемого обратного пинга.
    Допустим у меня серый ip на сервере, либо корпоративный прокси, до которого вашему сервису не пробиться, но наоборот – с него, я могу пинговать или посылать post/get запросы.
    Можно ли сделать отслеживание такого уровня, что раз в минуту вам сигнал не подал, значит оффлайн?


  1. fedorro
    21.02.2026 22:36

    Uptime Kuma можно запустить с докера - и он не будет ничего ломать, ну и можно запустить на модных нынче Docker-хостингах в два клика, и в остальном будет бесплатно хоть миллион хостов добавь. Ну и если сложности с инфрой и настройкой такой мелочи как UK, то не понятно как вы будете обслуживать то что хотите мониторить. Ну и UDP он поддерживает, и прочие протоколы.


  1. aborouhin
    21.02.2026 22:36

    3. Self-hosted (Uptime Kuma, Prometheus + Alertmanager)

    ...
    Минусы: Требует инфраструктуры и времени на поддержку. Обновления, безопасность, бэкапы - всё ложится на вас. Если у вас нет выделенного DevOps-инженера, это оверхед.

    Ну если Вам есть что мониторить - то инфраструктура у Вас уже есть... А насчёт ужасов про поддержку, с которой справится только DevOps - текущую инсталляцию Prometheus + Grafana я настроил 4 года назад за полдня, с тех пор оно через unattended-upgrades (тут сейчас любители каждый апдейт проверять вручную и прогонять на тестовом контуре упадут в обморок - но у меня не так критично, плюсы перевешивают риски) само обновляется, работает и за все 4 года никакой головной боли. Только что новые метрики/дашборды/алерты добавляю по необходимости или старые уточняю.

    Большинство SaaS-мониторов вообще не умеют работать с UDP.

    Так потому что невозможно сделать универсальный мониторинг для любого сервиса, работающего по UDP, - мы же не знаем, какой пакет надо отправить, чтобы что-то получить в ответ. Вы и сами реализовали, как я понял, ровно 2 кейса из многих тысяч возможных. Решений под отдельные UDP сервисы полно. DNS - тот же blackbox exporter, под Minecraft Ваш тоже, вроде, экспортер имеется. Если какая-то совсем экзотика или самописный сервер - то свой exporter пишется за вечер даже без помощи LLM; но в этом случае и Ваш продукт надо будет дорабатывать под такой сценарий.


  1. swshoo
    21.02.2026 22:36

    mikrotik dude - бесплатно, ставится на виртуалки и не плохо справляется с небольшой сеткой хостов на 100-200. удобная фишка, это графическая карта сети и отображение загрузки сетевых интерфейсов (каналов). хорошая интеграция с snmp разных версий (мониторинг железа, серверов и.т.д. которые умеют snmp). может показывать визуально нагрузку по клиентам на родных точках доступа / роутерах. Если в сети начинает ложится сегмент, то видно откуда ж**а началась...


  1. paizuri
    21.02.2026 22:36

    Даже не представляю как можно настраивать куму целый вечер и что там в nodejs сломалось. Там же композ развернуть одной командой и дальше кликать в ui.

    Для ваших целей уже давно изобретен Prometheus+alertmanager+blackbox exporter. Если вы трясетесь за аптайм то вы наверно и за метриками следить захотите, а не приходить когда уже все горит?

    Хотелось бы сравнить, сколько вы времени убили на написание своего сервиса и сколько бы заняло разворот стека выше.


  1. zwalker
    21.02.2026 22:36

    Использую везде selfhosted gatus.


  1. BigD
    21.02.2026 22:36

    Как уже написали выше, откройте для себя Gatus.


  1. stylish_me
    21.02.2026 22:36

    Сегодня решил попробовать вас сервис чисто для домашнего использования. Обычно использую uptimerobot но из-за блокировок он стал работать максимально криво.
    Из непоняток - при создании монитора http с ключевым словом - кнопка тест проверяет сам адрес, безотносительно наличия или отсутствия этого слова, что сильно вводит в заблуждение. После создания монитора - всё работает как и должно. Далее. При создании алерта через телегу - в 80% случаев манипуляций с алертом - кнопка создания алерта становится неактивной. Приходится переключаться на соседний тип алерта - и обратно, тогда кнопка отдупляется и можно сохранить. Не хватает возможности переноса мониторов из того же uptimerobot - было бы удобно. Лично мне не хватает интеграции в Home Assistant. Понятно, что через вебхуки всё можно сделать, но нативная интеграция была бы удобна. Не нашел на сайте никаких контактов для вопросов и тд. При каждом заходе на главную - для перехода к мониторам выпадает интерфейс логина через "начать". Зачем мне начинать и логиниться при каждом заходе на главную, если я и так уже создал у вас мониторы - непонятно. Далее. Есть непонятки с бесплатностью. Навсегда бесплатно? Тестовый период? Сколько бесплатно, сколько платно? Вот эта неопределенность и неоднозначность может остановить от переезда к вам с концами. У вашего телеграм бота нет аватарки - каждый раз непонятки, что это за ноунейм пишет. А так да с моей бытовой точки зрения очень удобный и шустрый сервис. Если поправятся детские болезни, не попадет под ковровые блокировки и не будет вводиться монетизация для мелких юзеров типа меня - вообще отлично. Всяческих успехов!