OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

Self‑hosted uptime: Uptime Kuma, Gatus и клоны Healthchecks на VDS

Когда проектов становится несколько, «зайти глазами на сайт» перестаёт работать. Нужен честный uptime: свои проверки, алерты и история инцидентов. Разбираем, как на одном VDS развернуть лёгкий self‑hosted мониторинг и грамотно комбинировать Uptime Kuma, Gatus и Healthchecks‑подобные сервисы.
Self‑hosted uptime: Uptime Kuma, Gatus и клоны Healthchecks на VDS

В какой-то момент любой прод вырастает из уровня «посмотрю сайт глазами, вроде работает». Нужен честный uptime: свои проверки, алерты и история инцидентов. Но тянуть сразу весь стек Prometheus + Alertmanager + Grafana ради пары сайтов и кронов тоже не хочется.

Баланс где-то посередине: лёгкие self‑hosted решения под uptime и healthchecks, которые удобно крутить на обычном VDS. В этой статье разберём три класса таких инструментов:

  • Uptime Kuma — GUI‑мониторинг HTTP/TCP/ICMP с уведомлениями;
  • Gatus — декларативный uptime в YAML, «для тех, кто любит конфиги»;
  • клоны Healthchecks.io — для мониторинга cron‑задач и фоновых воркеров.

Поговорим, где каждый из них уместен, как они вписываются в общую схему мониторинга и как минимальными силами навести порядок в проверках доступности.

Что такое self‑hosted uptime и зачем он нужен, если есть внешние сервисы

Внешние сервисы мониторинга uptime видят ваш сервис «со стороны интернета», а self‑hosted — «изнутри вашей инфраструктуры». Обе точки зрения нужны, но задачи разные.

Внешний uptime отвечает на вопрос «пользователь из мира может зайти на мой сайт?», а self‑hosted — «у меня внутри всё живо и между сервисами нет обрывов?».

Типичные сценарии, где self‑hosted uptime на VDS полезен:

  • проверка доступности внутренних сервисов (админки, API, базы, брокеры), которые не должны светиться в интернет;
  • проверка backend‑зависимостей изнутри: сайт может быть доступен снаружи, но не может достучаться до базы или платёжного шлюза;
  • контроль cron‑задач: бэкапы, импорты, расчёты, очистки — всё, что не видно по HTTP;
  • быстрый старт: вы не готовы завязываться на SaaS, хотите максимальный контроль и независимость.

Self‑hosted инструменты для uptime обычно:

  • просты в развёртывании (часто один контейнер или бинарь);
  • заточены именно под проверки доступности, а не под полноразмерный metrics‑мониторинг;
  • хорошо сочетаются с уже существующими стэками (Prometheus, Zabbix и т.д.).

Общий ландшафт: Kuma, Gatus, Healthchecks‑like

Если коротко, то обзор получится такой.

Uptime Kuma

Фокус: визуальный, удобный, «поставил и кликаешь мышкой».

  • UI‑ориентированный: всё настраивается из веб‑панели;
  • поддержка разных типов мониторов: HTTP(S), TCP, ICMP, DNS, WebSocket и др.;
  • много каналов уведомлений: Telegram, e‑mail, Slack, Discord и т.п.;
  • простая история инцидентов и наглядные дашборды.

Gatus

Фокус: конфиги в Git и декларативность.

  • конфигурация в YAML: описываем эндпоинты, условия и алерты;
  • есть веб‑интерфейс, но он вторичен по отношению к конфигам;
  • поддерживает HTTP/HTTPS, TCP, DNS, gRPC (через HTTP/JSON‑прокси);
  • легко интегрируется в GitOps: MR → ревью → деплой конфигов.

Клоны Healthchecks.io

Фокус: контроль периодических задач.

  • каждая задача «пингает» сервис по HTTP, когда успешно отработала;
  • если пинга не было в заданный интервал — алерт;
  • часто есть поддержка «start / success / fail» пингов и grace‑периодов;
  • интеграция с cron и systemd‑таймерами, без агентов.

На практике удобно комбинировать: Kuma или Gatus — для доступности сервисов, Healthchecks‑like — для кронов и воркеров. Всё это отлично размещается на одном VDS, особенно если завернуть в Docker.

Схема self hosted стека мониторинга uptime на одном VDS

Где self‑hosted uptime реально экономит нервы

Ниже несколько типичных кейсов, где такие инструменты быстро окупаются.

«Сайт жив, но корзина не работает»

Снаружи проверяется только главная страница, а внутри никто не мониторит API корзины или оплат. Внешний uptime улыбается, бизнес злится.

Решение: добавить внутренние HTTP‑проверки на те же URL, которые использует фронтенд. В них уже можно проверять не только код ответа, но и наличие конкретных строк в JSON/HTML, время ответа, редиректы.

Сломался cron с бэкапами

Скрипт бэкапа тихо перестал работать — права, путь, квота, что угодно. Логи никто не читает, инцидент всплывает только перед восстановлением.

С Healthchecks‑подобными сервисами каждый запуск бэкапа обязан «постучаться» на URL. Если стука нет — через несколько минут или часов придёт уведомление. Можно заодно мониторить и длительность задания.

Если вы уже задумывались о выносе бэкапов в отдельное хранилище, может быть полезна статья о резервных копиях в S3 с restic и Borg — такие задачи идеально дополняются healthchecks.

Несколько окружений и тестовые стенды

На одном VDS живут dev/stage/prod стенды. Хотелось бы видеть, что именно лежит, и не путаться, когда QA жалуется на «упал стенд».

Uptime Kuma или Gatus позволяют развести проверки по папкам/группам: prod, stage, dev. В Gatus можно ещё и через labels в конфиге делать фильтры.

Uptime Kuma: дружелюбный UI‑мониторинг

Uptime Kuma часто становится первой точкой входа в self‑hosted uptime, потому что:

  • быстро ставится (особенно в Docker);
  • имеет простой веб‑интерфейс «из коробки»;
  • понятен не только DevOps, но и менеджерам и саппорту.

Типы проверок

Основные проверки, которые обычно используют на веб‑проектах:

  • HTTP(S) — проверка кода ответа, строк в теле, времени ответа;
  • TCP‑порты (например, 5432 для PostgreSQL, 6379 для Redis, 25/587 для SMTP);
  • ICMP ping — базовое понимание, жив ли хост и сеть;
  • DNS‑запросы — проверка, что DNS‑запись резолвится как надо.

Для сложных систем удобно комбинировать проверки: ping VDS, TCP к базе, HTTP до приложения. Тогда проще локализовать, где именно обрыв.

Алерты и уведомления

Сильная сторона Kuma — много готовых интеграций уведомлений. Обычно первым делом настраивают:

  • Telegram‑бота или канал для команды дежурных;
  • e‑mail для более «официальных» сообщений;
  • внутренний чат (Slack/Discord/Mattermost) — для общего фона.

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

Когда Uptime Kuma — оптимальный выбор

  • у вас немного сервисов, и их удобно «кликать мышкой»;
  • конфиги в Git не являются строгим требованием;
  • вы хотите визуальную доску статусов, понятную саппорту и менеджерам;
  • важна скорость запуска и минимум «админщины».

Gatus: uptime как конфигурация

Gatus интересен тем, что ставит в центр конфиг в YAML, а веб‑интерфейс — лишь надстройка над ним. Это хорошо ложится в GitOps‑подход:

Любая новая служба в инфраструктуре — это не только деплой, но и пулл‑реквест с добавлением проверки в Gatus.

Идея Gatus

Каждый сервис описывается блоком в конфиге: что проверять (URL, порт, хост), какие условия считать «здоровыми» и куда слать алерты. Условия могут быть достаточно сложными: статус‑код, время ответа, наличие или отсутствие строк в теле, заголовки и т.д.

Например, для API вы можете сказать: «сервис считается живым, если отвечает 200 за < 500 ms и в JSON есть поле status=ok». Это сильно честнее, чем просто «HTTP 200».

Преимущества конфиг‑подхода

  • версионирование: все изменения в мониторинге проходят через Git;
  • код‑ревью: коллеги видят, какие проверки добавлены или изменены;
  • лёгкий перенос: на новом VDS достаточно забрать репозиторий с конфигами;
  • шаблоны: можно стандартизировать проверки по микросервисам.

Для команд, где уже есть привычка хранить всё как код (infra as code, pipelines, Helm‑чарты), Gatus воспринимается естественно.

Где Gatus удобнее Kuma

  • много однотипных микросервисов: вы генерите YAML автоматически;
  • жёсткий процесс изменений: без Merge Request ничего не меняется;
  • нужно хранить «историю логики» проверок вместе с кодом;
  • миграции и катастрофы: легко поднять копию в другом месте по тем же конфигам.

Healthchecks‑подобные решения: контроль cron и воркеров

Uptime Kuma и Gatus хороши для постоянных сервисов, которые висят на портах или URL. Но периодические задачи (cron, systemd‑таймеры, очереди) требуют другого подхода.

Логика Healthchecks‑подобных решений:

  1. для каждой задачи создаётся «чек» с ожидаемым интервалом (например, раз в час);
  2. скрипт при успешном завершении делает HTTP‑запрос на уникальный URL;
  3. если сервис не получил пинг в указанный интервал — задача считается «упавшей», и шлётся алерт;
  4. часто можно отправлять отдельные URL для старта и ошибки, плюс передавать логи в теле запроса.

Почему мониторить cron так важно

Периодические задачи — классический источник «скрытых» проблем:

  • их падение не видно из внешнего uptime;
  • ошибки могут долго накапливаться (бэкапы, биллинги, отчёты);
  • ошибка может быть «тихой» (скрипт завершился, но сделал не то).

Контроль факта запуска и успешного завершения не даёт таким проблемам копиться неделями.

Примеры задач, которым полезен Healthchecks‑подход

  • бэкап баз данных и файлов;
  • очистка временных файлов и логов;
  • регулярный импорт и экспорт данных с внешних систем;
  • пересчёт отчётов, витрин, кешей.

Если вы ещё не определились, запускать периодические задачи через cron или systemd‑таймеры, загляните в материал о сравнении cron и systemd‑таймеров — там удобно подобрать формат под мониторинг.

Дашборд с healthchecks для cron задач и недавними алертами

Как комбинировать решения uptime на одном VDS

Частый сценарий для небольших и средних проектов: один не очень нагруженный VDS, на котором крутится всё — от мониторинга до вспомогательных сервисов. Это не идеал с точки зрения разделения ролей, но для старта и небольших бюджетов — вполне рабочий компромисс.

Практическая схема может выглядеть так:

  • Uptime Kuma или Gatus слушает локальный порт, доступный только из админской сети или VPN;
  • Healthchecks‑подобный сервис также слушает отдельный порт или домен, по которому стучатся cron‑задачи;
  • внешний reverse‑proxy (например, Nginx) по доменным именам и путям проксирует запросы к этим сервисам;
  • доступ в панели мониторинга ограничивается базовой авторизацией или VPN.

Важно не забыть, что мониторинг тоже сервис, к которому нужен uptime. Минимальный набор проверок, который стоит завести:

  • ping и TCP‑порты VDS снаружи;
  • HTTP‑проверка самого monitoring‑VDS (если он отдельный);
  • healthcheck баз данных, кэшей, очередей;
  • healthchecks для ключевых кронов: бэкапы, биллинги, миграции.

Типовые ошибки при внедрении self‑hosted uptime

Ниже — несколько ловушек, в которые команды регулярно попадают.

Нет проверки именно критического пути пользователя

Проверять только главную страницу — мало. Нужно мониторить полный путь, который приносит деньги или важную метрику:

  • страницу оформления заказа;
  • API авторизации;
  • страницу оплаты или callback от платёжного провайдера;
  • API ключевого мобильного приложения.

Именно эти точки стоит заводить как отдельные проверки в Kuma или Gatus с более жёсткими SLA.

Алерты без приоритета

Если одинаковыми уведомлениями сыпать про падение тестового стенда и боевой оплаты, команда быстро начнёт игнорировать всё.

Решение — разделять проверки по критичности и для важных сервисов использовать отдельные каналы или уровни важности. Например, в Kuma — отдельная группа мониторов с уведомлениями в другой чат.

Нет дежурств и процессов

Сам по себе uptime не решает проблему, если на алерты никто не реагирует. Даже в небольшой команде полезно:

  • определить, кто «первый контакт» по инцидентам в нерабочее время;
  • описать минимальный плейбук: куда смотреть в первую очередь, что перезапустить;
  • вести короткий журнал инцидентов, чтобы не наступать на те же грабли.

Self‑hosted uptime и «большой» мониторинг

Uptime Kuma, Gatus и Healthchecks‑подобные решения не заменяют полноразмерный мониторинг на уровне метрик (CPU, RAM, latency‑гистограммы, бизнес‑метрики). Они закрывают слой «жив / не жив» и базовую диагностику на уровне доступности.

Здоровая архитектура мониторинга обычно выглядит как слоёный пирог:

  • инфраструктурный уровень: метрики серверов и баз;
  • сервисный уровень: HTTP/TCP‑healthchecks, проверка зависимостей;
  • уровень задач: cron, очереди, фоновые воркеры;
  • бизнес‑уровень: заказы, платежи, регистрации.

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

Итоги

Self‑hosted uptime на VDS — это не обязательно огромный стек с десятком компонентов. В большинстве случаев вполне достаточно комбинации из:

  • Uptime Kuma или Gatus для постоянных HTTP/TCP/ICMP‑проверок;
  • Healthchecks‑подобного сервиса для cron и фоновых задач.

Ключевые мысли:

  • следите не только за «сайтом в целом», но и за критическими точками пользовательского пути и внутренними зависимостями;
  • внедряйте healthchecks для бэкапов и кронов, это спасает в самые неприятные моменты;
  • определите, кто и как реагирует на алерты, иначе любая система мониторинга быстро превратится в фоновой шум.

Дальше можно уже подключать метрики, логирование и трассировки, но честный uptime — это та основа, с которой стоит начать.

Поделиться статьей

Вам будет интересно

SaaS-проект: как грамотно подключать домены клиентов, DNS и SSL OpenAI Статья написана AI (GPT 5)

SaaS-проект: как грамотно подключать домены клиентов, DNS и SSL

Разбираем, как SaaS-сервису аккуратно подключать домены клиентов: какие есть модели (CNAME, A/AAAA, NS и полный перенос), как спро ...
Kubernetes на VDS: k3s, k0s, Nomad и Docker Swarm в реальных проектах OpenAI Статья написана AI (GPT 5)

Kubernetes на VDS: k3s, k0s, Nomad и Docker Swarm в реальных проектах

Разбираемся, как выбирать между k3s, k0s, Nomad и Docker Swarm, если у вас несколько VDS и контейнерные приложения. Сравниваем тре ...
LEMP vs LAMP vs OpenLiteSpeed: что выбрать для современного VDS OpenAI Статья написана AI (GPT 5)

LEMP vs LAMP vs OpenLiteSpeed: что выбрать для современного VDS

Разбираемся, чем в реальной жизни отличаются LEMP, LAMP и OpenLiteSpeed на VDS: как они ведут себя под нагрузкой, сколько ресурсов ...