Uptime Kuma: честный обзор — 33 типа проверок, 100+ каналов уведомлений и одна точка, из которой всё видно
Самый популярный self-hosted мониторинг в мире: 90 тысяч звёзд на GitHub, 182 миллиона скачиваний образа, версия 2.x с поддержкой MariaDB. Разбираем на цифрах, что он умеет, чего не умеет принципиально, сколько на самом деле стоит «бесплатный» мониторинг и в какой схеме Kuma работает лучше всего.
Uptime Kuma — открытая программа для мониторинга доступности, которую вы разворачиваете на своём сервере: она сама опрашивает сайты, порты, базы и контейнеры и присылает уведомления в сотню каналов. Лицензия MIT, код на Node.js, один процесс, данные в SQLite или MariaDB. Главное архитектурное свойство — проверки идут из одной точки, той, где Kuma установлена.
Проект в цифрах
Kuma — не «поделка энтузиаста», а один из самых живых проектов в своей нише. Все числа ниже сняты с GitHub API и Docker Hub на середину сентября 2026 года.
| Показатель | Значение |
|---|---|
| Звёзд на GitHub | 90 700 |
| Форков | 8 300 |
| Скачиваний Docker-образа | 182 млн |
| Открытых issues и PR | 791 |
| Лицензия | MIT |
| Актуальная версия | 2.5.4 от 11 сентября 2026 |
| Последняя 1.x | 1.23.17 от 20 октября 2025 |
| Релизов за последний год | 6 минорных + 10 патчей |
| Требование к Node.js | 20.4 и новее; образ собран на Node 22 |
| Языков интерфейса | 46, русский есть |
| Мейнтейнер | Louis Lam, проект держится на нём и двух-трёх ядровых контрибьюторах |
В ветке master уже лежит 3.0.0-beta.0 с переездом на TypeScript и требованием Node 26 — на Docker Hub собираются теги nightly3. Релиза пока нет, но направление понятно: проект не стоит.
Версия 2.0: что изменилось и где ловушка
Двойка вышла в октябре 2025 года после года беты и принесла главное — внешнюю базу данных. Но у неё есть особенность, на которой спотыкается каждый второй: Docker-тег latest до сих пор указывает на 1.23.17. Чтобы получить двойку, нужен тег 2.
| Появилось в 2.x | Исчезло в 2.x |
|---|---|
| MariaDB и MySQL как внешняя база, плюс встроенная MariaDB в образе | Экспорт и импорт в JSON — бэкапить теперь только каталог data |
| Агрегация истории в поминутные, почасовые и дневные таблицы | Образ на Alpine — только Debian |
| Rootless-образ, SNMP, удалённый браузер, DNS-условия | Поддержка Node 14 и 16, Debian Buster |
| 15+ новых провайдеров уведомлений, прокси для уведомлений | Кэш DNS внутри HTTP-мониторов |
| Мониторы NTP, SFTP, Oracle, истечения домена по RDAP | Retries по умолчанию: было 1, стало 0 |
При первом запуске двойки таблица heartbeat пересобирается в агрегаты. Ориентир из документации: 20 мониторов с историей за 90 дней — около 7 минут, крупные инсталляции — часы. Прерывать нельзя: единственный путь назад — восстановление каталога data из бэкапа. Прямой миграции SQLite → MariaDB тоже нет: базу выбирают один раз при первичной настройке.
Установка: пять минут, три варианта образа
# Одной командой
docker run -d --restart=unless-stopped -p 3001:3001 \
-v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
# compose.yaml из репозитория
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "3001:3001"
# Без Docker: Node.js 20.4+ и pm2
git clone https://github.com/louislam/uptime-kuma.git && cd uptime-kuma
npm run setup
npm install pm2 -g && pm2 install pm2-logrotate
pm2 start server/server.js --name uptime-kuma
# Обновление
docker compose pull && docker compose up -d --force-recreate
| Тег образа | Что внутри | Когда брать |
|---|---|---|
| 2 | Полный: Chromium для браузерных проверок, встроенная MariaDB | По умолчанию |
| 2-slim | Без Chromium и MariaDB | Слабый VPS, Raspberry Pi, только HTTP и ping |
| 2-rootless | Процесс не от root | Жёсткие требования безопасности; не для апгрейда с 1.x «в лоб» |
| latest | До сих пор 1.23.17 | Не брать, если нужна двойка |
Все данные живут в /app/data: файл kuma.db плюс журналы -wal и -shm. Файловая система должна поддерживать POSIX-блокировки — SQLite на NFS или SMB рано или поздно повредит базу. Официальных минимальных требований к CPU и памяти у проекта нет; образы собираются под amd64, arm64 и armv7.
33 типа мониторов
Здесь Kuma сильнее большинства облачных сервисов: она умеет ходить не только снаружи в сайт, но и внутрь инфраструктуры — в базы, очереди, контейнеры и игровые серверы. Список из исходников версии 2.5.4.
| Группа | Типы | Что нужно дополнительно |
|---|---|---|
| Общие (11) | HTTP(s), HTTP по ключевому слову, TCP-порт, Ping, DNS, Docker-контейнер, системный сервис, процесс PM2, браузерный движок, WebSocket, SFTP | Браузерный — Chromium из полного образа; Docker — доступ к сокету |
| Пассивные (2) | Push (сервис сам стучится по токену), Manual | — |
| Специальные (11) | Globalping, gRPC, JSON-запрос, Kafka, MQTT, NTP, RabbitMQ, SIP, SMTP, SNMP, Tailscale Ping | Globalping — API-токен стороннего сервиса; Tailscale — клиент на хосте |
| Базы данных (7) | MS SQL, MongoDB, MySQL/MariaDB, Oracle, PostgreSQL, Radius, Redis | Сетевой доступ до базы и учётка |
| Игровые (2) | GameDig, Steam Game Server | Steam — API-ключ |
| Служебные (1) | Группа — агрегирует статус вложенных мониторов | — |
Монитор Globalping заслуживает отдельного слова: это единственный способ заставить Kuma проверить сайт не с собственного сервера, а через чужие пробы по миру. Работает только для HTTP, ping и DNS и требует токен внешнего сервиса — то есть часть проверок уезжает в облако, от которого вы как раз хотели уйти.
Уведомления: сто с лишним провайдеров и что из них живёт в России
README скромно обещает «90+», по коду версии 2.5.4 провайдеров больше сотни. Для российского администратора интересна не общая цифра, а вот эта выборка.
| Канал | Есть | Нюанс |
|---|---|---|
| Telegram | Да | Свой бот, топики форумов, тихая отправка, шаблон сообщения. Есть поле Server URL под собственный прокси Bot API — на случай блокировки api.telegram.org |
| Макс | Да, с 2.3.0 | Бот-токен, отправка через platform-api.max.ru |
| VK и VK Teams | Да, с 2.3.0 и 2.4.0 | Личные сообщения через API |
| Да | Любой SMTP, с 2.5.0 — свои заголовки | |
| Webhook | Да | JSON или form-data, свои заголовки — мост к чему угодно |
| Matrix, ntfy, Gotify, Signal | Да | Всё self-hosted — логично для тех, кто и Kuma ставит у себя |
| SMS через российских операторов | Частично | Есть SMSC, но с адресом smsc.kz в коде; SMS.ru нет. Ещё два десятка зарубежных SMS-шлюзов |
| Голосовой звонок | Почти нет | Единственный провайдер с реальным звонком — Plivo, зарубежный. Twilio в Kuma умеет только SMS. Остальное — через внешние on-call системы: PagerDuty, Opsgenie, Grafana OnCall |
Уведомление можно повторять каждые N неудачных проверок (resend interval) и гонять через прокси. Но эскалации как класса нет: «сначала Telegram, а через полчаса позвонить, если не поднялось» — это уже внешняя система поверх Kuma.
Статус-страницы и окна обслуживания
Публичные страницы состояния — сильная сторона Kuma и частая причина её выбора. Несколько страниц, свои домены, инциденты с Markdown, RSS-лента, свой CSS, тёмная тема, счётчики аналитики. Окна обслуживания — с 1.19: разовое, по cron, по интервалу, по дню недели или месяца, со своим часовым поясом; на время окна мониторы синие, а на странице висит баннер.
Запрос открыт с 2022 года (issue #1756) и закрыт мейнтейнером как not planned; дубликаты продолжают появляться. Страница либо публичная, либо её нет. Внутренний статус для команды придётся прятать за reverse-proxy с авторизацией.
Настройки проверки, которые стоит знать до первого инцидента
| Параметр | По умолчанию | Что с этим делать |
|---|---|---|
| Интервал проверки | 60 секунд | Минимум технически 1 с, интерфейс предупреждает при значении меньше 20. Верхний потолок снят в 2.5.0 |
| Повторы до объявления DOWN | 0 | В 1.x был 1. С нулём любая единичная потеря пакета — это инцидент и уведомление. Ставьте 2–3 |
| Интервал повтора | = интервал проверки | Можно сократить, чтобы подтверждать падение быстрее |
| Повтор уведомления | 0 — выключен | Каждые N неудачных проверок присылать снова |
| Хранение истории | 365 дней | 0 — не удалять никогда. Для SQLite после чистки нужен Shrink Database |
| Предупреждение о сертификате | Список дней настраивается | Отдельно есть монитор истечения домена по RDAP |
| Upside-down mode | Выкл. | Инвертирует логику: «работает» = плохо. Для проверки, что тестовый стенд закрыт снаружи |
Авторизация в HTTP-мониторах закрывает почти всё: Basic, Bearer, OAuth2 client credentials, NTLM, mTLS; плюс свои заголовки, тело запроса и прокси на монитор. Для сравнения интервалов с облачным подходом полезно помнить, как считается время обнаружения инцидента: оно всегда равно интервалу проверки плюс повторы.
Под капотом: SQLite против MariaDB
Kuma — один процесс Node.js. Пока мониторов десятки, о базе можно не думать. Дальше начинаются нюансы, и они хорошо задокументированы в issues проекта.
| Масштаб | Что наблюдается | Источник |
|---|---|---|
| 20–30 мониторов | 60–80 МБ памяти в покое, SQLite справляется | Отчёты пользователей |
| 13 мониторов на Raspberry Pi с SD-картой | SQLITE_BUSY: database is locked после 2.2.0 | Issue #7289; в 2.3.2 вернули одно соединение по умолчанию |
| Типичная инсталляция | Около 150 МБ по словам мейнтейнера | Issue #7537 |
| Сотни мониторов | Рекомендация переезжать на MariaDB | Wiki проекта |
| 1 400 мониторов, 16 vCPU, 64 ГБ, внешний MySQL | Дашборд открывается 10–15 секунд; issue закрыт как not planned | Issue #5641 |
Issue #7537: на 12–23 мониторах процесс за 42 часа разрастался со 151 МБ до 3 ГБ, у части пользователей — до 22 ГБ. Комментарий мейнтейнера дословно: «I still have no clue where is the memory leak». В релиз-нотах 2.5.4 исправление не заявлено. Практический вывод: ограничивайте память контейнера и ставьте политику перезапуска — это и так стоит делать всегда.
Честные ограничения
Все семь пунктов ниже — не баги, а сознательные решения проекта. Спорить с ними в issues бесполезно, это проверено сотнями людей до вас.
| Ограничение | Статус в проекте | Чем закрывать |
|---|---|---|
| Одна точка проверки | Issue #84 открыт с 2021 года. Мейнтейнер: «we are not a distributed system», out of scope | Второй инстанс, Globalping-монитор или внешний сервис |
| Один пользователь | Запросы с 2022 года закрываются как not planned | Общая учётка или SSO через reverse-proxy в режиме disableAuth |
| Нет стабильного REST API | Внутренний Socket.io-API официально не поддерживается, breaking changes без предупреждения | /metrics для Prometheus по API-ключу, push-эндпоинт, бейджи, AutoKuma через Docker-лейблы |
| Нет отказоустойчивости | Кластеризации и HA нет | Кто-то должен мониторить саму Kuma |
| Нет SLA-отчётов | Только процент аптайма за 24 ч, 30 дней и год | Grafana поверх /metrics |
| Бэкап только каталогом | JSON-экспорт удалён в 2.0 | Снапшот тома или дамп MariaDB по расписанию |
| HTTPS своими руками | Встроенный TLS есть, но без автопродления | Nginx, Caddy, Traefik или Cloudflare Tunnel — в wiki есть конфиги для всех |
Первый пункт — принципиальный, и о нём вспоминают уже после установки. Kuma стоит на вашем VPS в одном дата-центре одного оператора. Она не увидит, что сайт недоступен для абонентов другого провайдера, что маршрут в регион оборвался или что падение видно только из части страны. А если ляжет сам VPS с Kuma — уведомлений не будет вообще, потому что некому их отправлять.
Безопасность: 16 бюллетеней за три года
Для проекта такого размера это нормальная статистика, но она задаёт правило эксплуатации: админку Kuma нельзя светить в интернет без дополнительной защиты.
| Год | Бюллетеней | Самое заметное |
|---|---|---|
| 2023 | 5 | Сессии не завершались после смены пароля (High); RCE через Tailscale Ping для авторизованных |
| 2024 | 3 | RCE и path traversal через плагины — плагины удалили целиком; LFI через браузерный монитор |
| 2025 | 4 | Неавторизованное чтение файлов (High); SSTI в шаблонах уведомлений — закрыт в 2.0.0 и 1.23.17 |
| 2026 | 4 | Второй SSTI (закрыт в 2.2.1); XSS через Matomo на статус-странице, CVSS 8.1, статус патча не подтверждён |
Большинство уязвимостей требуют авторизации — то есть опасны, когда админка доступна снаружи и пароль слабый. Два конкретных шага: включить 2FA (есть из коробки) и закрыть порт 3001 всем, кроме reverse-proxy. С версии 2.5.0 проект ввёл 14-дневную задержку на обновление npm-зависимостей против supply-chain атак — редкий для open source уровень дисциплины.
Сколько стоит бесплатный мониторинг
Kuma бесплатна как программа, но не как система. Посчитаем на условном примере: 30 сайтов, один администратор. Цифры ниже — расчётные допущения, подставьте свои.
| Статья расходов | Допущение | В месяц |
|---|---|---|
| Минимальный VPS под Kuma | 1 vCPU, 1–2 ГБ | условно 500 ₽ |
| Первичная настройка | Docker, reverse-proxy, TLS, 2FA, бэкап, 30 мониторов — 4 часа, размазать на год | 20 минут |
| Обновления | Минорный релиз раз в 1–2 месяца, 15 минут с чтением релиз-нот | 10 минут |
| Проверка бэкапа и разбор ложных срабатываний | Раз в месяц | 30 минут |
| Второй инстанс, который следит за первым | Ещё один VPS у другого провайдера | условно 500 ₽ |
| Итого | около 1 000 ₽ + 1 час администратора |
Час администратора — самая дорогая строка, и именно её обычно не считают. При ставке даже в 1 500 ₽ за час «бесплатная» Kuma обходится в 2 500 ₽ в месяц. Это не аргумент против неё: для тех, кому нужны проверки баз, очередей и контейнеров изнутри периметра, альтернатив такого качества за эти деньги нет. Это аргумент против слова «бесплатно» в расчётах.
Кому подходит, а кому нет
| Сценарий | Kuma | Почему |
|---|---|---|
| Домашняя лаборатория, NAS, десяток сервисов | Идеально | Бесплатно, Raspberry Pi хватает, статус-страница для семьи |
| Внутренняя инфраструктура: базы, очереди, Docker, PM2 | Сильно | Облачный сервис внутрь периметра не попадёт — Kuma стоит внутри |
| Данные не должны покидать контур | Сильно | Всё у вас; уведомления через self-hosted Matrix или ntfy |
| Публичный сайт с аудиторией по всей России | Недостаточно | Одна точка не покажет региональных проблем и падений маршрутов |
| Команда из нескольких человек с разными правами | Нет | Один пользователь, RBAC не планируется |
| Нужны звонки при падении и эскалация | Нет | Звонит только Plivo, эскалации нет — нужна внешняя on-call система |
| Отчёты по SLA для клиентов | Слабо | Только процент аптайма и бейджи; отчёты — через Grafana |
| Специфика РФ: РКН, DNSBL, Safe Browsing, фиды | Нет | Таких типов проверок в Kuma нет |
Uptime Kuma и Пруфен: где что сильнее
Это не «кто лучше», а «кто для чего». Kuma смотрит на инфраструктуру изнутри и бесплатна как код; облачный сервис смотрит на сайт снаружи глазами пользователей и берёт на себя эксплуатацию.
| Критерий | Uptime Kuma | Пруфен |
|---|---|---|
| Откуда проверяет | Одна точка — ваш сервер | 13 точек, 11 из них в России, плюс Минск и Испания |
| Подтверждение падения | Повторы с одной точки | Кворум по доле локаций, порог настраивается |
| Типов проверок | 33, включая базы, очереди, Docker, игровые серверы | 18, включая РКН, DNSBL, Safe Browsing, PageSpeed, фиды, трекеры, robots.txt |
| Минимальный интервал | Технически 1 с, разумно от 20 с | От 2 минут для частых типов |
| Каналы уведомлений | 100+, в том числе Telegram, Макс, VK, Matrix, ntfy | Email, Telegram, Макс и голосовой звонок как эскалация при затяжной недоступности |
| Задержка уведомления | Только через повторы | От 0 до 30 минут отдельной настройкой |
| Статус-страницы | Да, публичные, без пароля | Гостевые ссылки на отчёты проверок |
| API | Prometheus /metrics, push, бейджи; REST не гарантирован | REST API |
| Пользователи | Один | Проекты, передача проекта, договор для юрлиц |
| Эксплуатация | Ваша: сервер, TLS, обновления, бэкап, безопасность | Не ваша |
| Цена | 0 ₽ за софт, VPS и время — ваши | Бесплатный план на 5 проверок, дальше оплата за фактические запуски от 0,005 ₽ |
Схема, в которой Kuma работает лучше всего
Самый устойчивый вариант, к которому приходят почти все, кто эксплуатирует Kuma дольше года, — разделение обязанностей. Kuma стоит внутри периметра и следит за тем, до чего облачный сервис не дотянется: базы, очереди, контейнеры, внутренние API, сервисы на localhost. Внешний мониторинг следит за тем, чего не видит Kuma: как сайт открывается из разных регионов, не заблокирован ли он, не попал ли IP в спам-листы, не истёк ли сертификат глазами реального посетителя. И — отдельным пунктом — за самим сервером с Kuma, потому что упавший мониторинг молчит так же, как здоровый.
Технически это два монитора со стороны облака: HTTP-проверка страницы статуса Kuma и TCP-проверка порта 3001 или того, что стоит перед ним. Если оба молчат — вы узнаёте о проблеме от внешней системы, а не утром от клиентов.
Пруфен проверяет сайт с интервалом от 2 минут из 13 точек мониторинга, подтверждает падение кворумом локаций и присылает уведомление в Email, Telegram или Макс; если ресурс так и не поднялся, подключается голосовой звонок. Бесплатного плана на 5 проверок хватает, чтобы закрыть внешний контур для небольшого проекта — в том числе присмотреть за вашей Kuma.
Частые вопросы
Можно ли сделать несколько точек проверки на нескольких Kuma? Формально да: поднять инстансы в разных дата-центрах и мониторить одно и то же. Но у каждой будет своя история, свои уведомления и свой процент аптайма — сводить их придётся руками или через Grafana. Кворума «упало для двух из трёх» не получится.
Telegram заблокирован у провайдера — уведомления перестанут приходить? В настройках Telegram-провайдера есть поле Server URL: туда подставляется адрес собственного прокси Bot API, и уведомления идут через него. Либо перевести оповещения в Макс, который в Kuma есть с версии 2.3.0.
Что будет, если обновить 1.23 до 2.x через тег latest? Ничего: latest по-прежнему указывает на 1.23.17. Чтобы получить двойку, нужно явно указать тег 2, предварительно сделав бэкап каталога data — миграция схемы необратима.
Есть ли мобильное приложение? Официального нет. Веб-интерфейс работает как PWA, с версии 2.1.0 есть Web Push. Сторонние клиенты: KumaAlert и Wuma для iOS, Uptime Kuma Manager для iOS и Android, OpenKuma для Android с открытым кодом.
Можно ли управлять мониторами из кода? Стабильного REST API нет. Рабочие обходы: AutoKuma создаёт мониторы из Docker-лейблов, Python-библиотека uptime-kuma-api работает через Socket.io, но официально совместима только с 1.17–1.23. Для чтения метрик — Prometheus-эндпоинт по API-ключу.
Если выбираете между несколькими облачными сервисами, а не между облаком и self-hosted, — у нас есть отдельный разбор российских альтернатив UptimeRobot с таблицей возможностей.