Одна команда — и мониторинг работает:
docker run -d --restart=always -p 3001:3001 \
-v uptime-kuma:/app/data --name uptime-kuma \
louislam/uptime-kuma
Открой http://ВАШ-IP:3001, создай аккаунт, добавь первый монитор. Telegram-алерты — в Settings → Notifications. Всё.
1. Диагноз: «сайт упал — узнали от клиента»
Сервер лёг в 03:47. Поднялся в 05:20 по крону. Ты узнал в 09:15 — от клиента, который не смог оформить заказ. И написал в Google-отзывы. Знакомо?
Это не невезение. Это отсутствие мониторинга. И это лечится за один вечер.
Что получишь из этой статьи:
- Uptime Kuma в Docker — работает через 2 минуты
- Telegram-алерты — настроены, протестированы
- Мониторинг сайтов, API, Docker-контейнеров, cron-задач
- Публичная статус-страница для клиентов
- Nginx reverse proxy + SSL — доступ по HTTPS
- Troubleshooting — если что-то пошло не так
Сколько времени: 15–30 минут от нуля до работающего алертинга.
2. Почему Uptime Kuma, а не Zabbix / UptimeRobot
Вопрос честный. Инструментов много. Вот почему Kuma закрывает 80% задач SMB и фриланса быстрее остальных.
| Критерий | Uptime Kuma | Zabbix | Prometheus + Grafana | UptimeRobot |
|---|---|---|---|---|
| Время установки | 2–5 минут | 1–3 часа | 2–4 часа | 0 (SaaS) |
| Self-hosted | Да | Да | Да | Нет |
| Open Source | Да (MIT) | Да (GPL) | Да (Apache) | Нет |
| Порог вхождения | Низкий | Высокий | Очень высокий | Очень низкий |
| Метрики CPU/RAM | Нет | Да | Да | Нет |
| Статус-страница | Встроена | Нет | Через плагин | Да (платно) |
| Telegram-алерты | Нативно | Настройка | Alertmanager | Да |
| RAM | ~50–100 MB | ~300–500 MB | ~500 MB+ | 0 (SaaS) |
| Конфиденциальность | Полная | Полная | Полная | Данные в облаке |
| Цена | Бесплатно | Бесплатно | Бесплатно | От $7/мес |
Что умеет Uptime Kuma: HTTP/HTTPS, TCP Port, Ping, DNS, Docker Container, Push (для cron), Keyword в ответе, gRPC, игровые серверы. Уведомления — Telegram, Slack, Email, Discord, Webhook, PagerDuty и ещё 90+ интеграций. Данные — локально в SQLite, никаких облаков.
3. Рецепт: установка Uptime Kuma шаг за шагом
Подготовка: установка Docker
Если Docker ещё не стоит — ставим:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER newgrp docker
Проверь:
docker --version # Docker version 24.x.x — хорошо
Шаг 1. Запуск через Docker (рекомендуется)
Одна команда — и мониторинг работает:
docker run -d \ --restart=always \ -p 3001:3001 \ -v uptime-kuma:/app/data \ --name uptime-kuma \ louislam/uptime-kuma
--restart=always — поднимется после перезагрузки сервера автоматически.-v uptime-kuma:/app/data — именованный том. Удалишь контейнер — данные останутся.-p 3001:3001 — порт. После запуска открой http://ВАШ-IP:3001.Что должно получиться:
docker ps | grep uptime-kuma # uptime-kuma louislam/uptime-kuma ... Up X seconds
Через 20–30 секунд открывай браузер: http://ВАШ-IP:3001. Форма регистрации администратора — создай логин и пароль.
Шаг 2. Docker Compose (если любишь порядок)
mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma nano docker-compose.yml
Содержимое:
version: "3"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
docker compose up -d
Плюс этого варианта: папка ./data рядом с compose-файлом. Бэкап — просто копируешь директорию /opt/uptime-kuma.
Шаг 3. Первый монитор — сайт по HTTP(S)
Нажми «Add New Monitor». Заполни:
- Monitor Type: HTTP(S)
- Friendly Name: например,
client-site.ru - URL:
https://client-site.ru - Heartbeat Interval: 60 секунд
- Retries: 3 — три подряд ошибки перед алертом
- Certificate Expiry Notification: включи, поставь 30 дней
Сохрани. Через минуту монитор зелёный — сайт живой.
4. Примеры мониторинга: 5 реальных кейсов
Мониторинг MikroTik (Ping + Winbox Port)
Два монитора на роутер:
| Поле | Монитор 1 — Ping | Монитор 2 — Winbox |
|---|---|---|
| Monitor Type | Ping | TCP Port |
| Hostname | 192.168.1.1 | 192.168.1.1 |
| Port | — | 8291 |
| Interval | 30 сек | 60 сек |
Мониторинг API с проверкой ответа
Сервер отвечает 200, но приложение внутри сломалось — классика. Используй Keyword:
- Monitor Type: HTTP(S) — Keyword
- URL:
https://api.your-service.ru/health - Keyword:
"status":"ok"
Нет ключевого слова в ответе — монитор красный. Даже если HTTP 200.
Мониторинг Docker-контейнера
Чтобы Kuma видела контейнеры — пробрось Docker-сокет. В docker-compose.yml добавь:
volumes: - ./data:/app/data - /var/run/docker.sock:/var/run/docker.sock:ro
Потом в Settings → Docker Hosts → добавь локальный сокет. Тип монитора: Docker Container, выбери имя контейнера.
:ro — read-only. Kuma читает статус, но не управляет контейнерами. Всё равно — не открывай сокет наружу.Push-мониторинг для cron-задач
Cron выполняется — но ты не знаешь, выполняется ли на самом деле. Push-монитор решает это элегантно.
Создай монитор типа Push, интервал — 86400 секунд (24 часа). Kuma выдаст URL вида:
https://kuma.your-domain.ru/api/push/abc123xyz
Добавь в bash-скрипт бэкапа последней строкой:
#!/bin/bash # ... твой <a class="wpil_keyword_link" title="Скрипты" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="1314">скрипт</a> бэкапа ... # Пинг после успешного выполнения: curl -fsS "https://kuma.your-domain.ru/api/push/abc123xyz?status=up&msg=OK" > /dev/null
Скрипт упал до этой строки — Kuma не получила пинг — через 24 часа алерт. Без агентов, без сложности.
5. Настройка Telegram-алертов: пошагово
Создай бота через @BotFather
# В Telegram: # 1. Найди @BotFather # 2. /newbot # 3. Введи имя: MyMonitoringBot # 4. Введи username: my_monitoring_bot # 5. Получи токен вида: 1234567890:ABCdefGHIjklMNO...
Получи Chat ID
# Напиши боту /start, потом открой в браузере:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
# В ответе найди: "chat":{"id": 123456789}
# Для группового чата id будет отрицательным: -1001234567890
Подключи в Uptime Kuma
- Settings → Notifications → Add Notification
- Тип: Telegram
- Вставь Bot Token и Chat ID
- Нажми «Test» — должно прийти сообщение
- Сохрани и назначь на мониторы
Email (SMTP) и Webhook
В Notifications → Email (SMTP):
- SMTP Host: smtp.gmail.com
- Port: 587 (TLS)
- Username / Password: email + пароль приложения Google
Для Slack, Teams, любых систем — тип Webhook, вставь Incoming Webhook URL.
6. Публичная статус-страница для клиентов
Статус-страница — это то, что отличает профи от «у нас всё хорошо, честно».
- Status Page → New Status Page
- Задай slug:
status→ страница будет по адресу/status/status - Добавь нужные мониторы
- Сохрани, открой ссылку
Что можно кастомизировать: заголовок, описание, логотип, история инцидентов за 90 дней, кастомный CSS, собственный домен (status.client-site.ru) через reverse proxy.
Ночью лёг сервер на 41 минуту. Утром злой клиент. Вместо оправданий ты отправляешь ссылку: инцидент зафиксирован в 03:47, восстановлено в 04:28. Это называется прозрачность. Клиенты ценят её больше, чем идеальный аптайм.
7. Nginx Reverse Proxy + SSL: Kuma по HTTPS
Открывать Kuma по HTTP на порту 3001 в продакшне — плохая идея. Она знает адреса всех твоих серверов и токены уведомлений.
Установка Nginx и Certbot
sudo apt install nginx certbot python3-certbot-nginx -y
Конфиг Nginx с WebSocket-поддержкой
sudo nano /etc/nginx/sites-available/uptime-kuma
Содержимое:
server {
listen 80;
server_name kuma.your-domain.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name kuma.your-domain.ru;
ssl_certificate /etc/letsencrypt/live/kuma.your-domain.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kuma.your-domain.ru/privkey.pem;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo certbot --nginx -d kuma.your-domain.ru
Что должно получиться: Kuma открывается по https://kuma.your-domain.ru с зелёным замком. HTTP автоматически редиректит на HTTPS.
location / добавь:allow 10.0.0.0/8; — твоя VPN-подсетьdeny all;8. Проверка: что смотреть после установки
# Контейнер запущен: docker ps | grep uptime-kuma # Логи — если что-то не так: docker logs uptime-kuma --tail 50 # Потребление ресурсов: docker stats uptime-kuma --no-stream # Веб доступен: curl -I http://localhost:3001 # HTTP/1.1 200 OK — хорошо # SSL работает (после настройки Nginx): curl -I https://kuma.your-domain.ru # HTTP/2 200 — отлично
Проверь в интерфейсе:
- Мониторы зелёные → сайты отвечают
- Settings → Notifications → Test → пришло сообщение в Telegram
- Status Page открывается без авторизации
9. Осложнения: troubleshooting Uptime Kuma
| Ошибка / симптом | Причина | Решение | Команда |
|---|---|---|---|
| Порт 3001 недоступен извне | Firewall на VPS закрывает порт | Открой порт или сразу настрой Nginx (рекомендуется) | sudo ufw allow 3001/tcp |
| Telegram-алерты не приходят | Неверный токен или chat_id. Бот не написал первым — нет обновлений | Напиши боту /start, пересоздай уведомление, нажми Test | curl https://api.telegram.org/bot<TOKEN>/getUpdates |
| WebSocket-ошибка в браузере после Nginx | Не добавлены заголовки Upgrade/Connection | Проверь конфиг Nginx — должны быть proxy_set_header Upgrade и Connection | sudo nginx -t && sudo systemctl reload nginx |
| Контейнер перезапускается в петле | Порт 3001 занят другим процессом | Найди и останови процесс или смени порт | sudo ss -tlnp | grep 3001 |
| После обновления данные пропали | Не использовался именованный том или volume не был примонтирован | Данные в томе uptime-kuma — проверь |
docker volume inspect uptime-kuma |
| Монитор всегда красный, хотя сайт работает | Сайт отдаёт редирект (301/302) или нестандартный код | В настройках монитора добавь нужные коды в Accepted Status Codes | Monitor → Edit → Accepted Status Codes: 200-302 |
| Push-монитор не получает пинги | URL недоступен с сервера, где выполняется cron. Или curl не установлен | Проверь доступность URL с сервера скрипта | curl -v "https://kuma.your-domain.ru/api/push/abc123" |
| Много ложных алертов ночью | Retries = 1 или Retry Interval слишком мал — реагирует на сетевой шум | Установи Retries: 3, Retry Interval: 20s | Monitor → Edit → Retries: 3 |
Как смотреть логи
# Последние 100 строк: docker logs uptime-kuma --tail 100 # В реальном времени: docker logs uptime-kuma -f # Ошибки Nginx (если настроен): sudo tail -f /var/log/nginx/error.log
10. Альтернативы Uptime Kuma
| Инструмент | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Uptime Kuma | SMB, фриланс, 5–200 сервисов | Быстро, просто, красиво | Нет метрик CPU/RAM |
| Zabbix | 50+ серверов, нужны агенты и метрики | Мощные триггеры, SNMP, LDAP | Долгая настройка, тяжёлый |
| Prometheus + Grafana | Kubernetes, микросервисы, SRE-команды | Метрики, алертинг, красивые дашборды | Высокий порог, требует DevOps |
| Netdata | Нужен real-time мониторинг ресурсов одного сервера | Ставится за минуту, метрики в реальном времени | Нет мониторинга внешних URL |
| UptimeRobot | Нет своего сервера, нужно быстро | Нулевая настройка | Данные в облаке, ограничения бесплатного тарифа |
Uptime Kuma + Netdata — хорошая связка: Kuma мониторит доступность сайтов и сервисов, Netdata — метрики самого сервера. Два инструмента, обе задачи закрыты.
Установка и настройка Zabbix: полный гайд Docker Compose: установка, команды и настройка контейнеров MikroTik для профессионалов: настройка с нуля до production Nginx Proxy Manager: конфигурация для веб-интерфейсов11. Профилактика: как не сломать снова
Бэкап данных
# Бэкап именованного тома: docker run --rm \ -v uptime-kuma:/data \ -v $(pwd):/backup \ alpine tar czf /backup/kuma-backup-$(date +%Y%m%d).tar.gz /data # Бэкап для docker-compose (папка ./data): tar czf kuma-backup-$(date +%Y%m%d).tar.gz /opt/uptime-kuma/data
Поставь этот скрипт в cron. И — хорошая идея — настрой push-монитор в самой же Kuma для проверки выполнения бэкапа.
Обновление Uptime Kuma
docker pull louislam/uptime-kuma:1 docker stop uptime-kuma docker rm uptime-kuma docker run -d \ --restart=always \ -p 3001:3001 \ -v uptime-kuma:/app/data \ --name uptime-kuma \ louislam/uptime-kuma:1
Данные в именованном томе — никуда не денутся. Весь процесс: 2–3 минуты.
Чеклист здорового мониторинга
- Retries: 3, Retry Interval: 20s — не реагируй на сетевой шум
- Два канала уведомлений: Telegram + Email
- Раз в месяц нажимай Test на всех уведомлениях
- SSL Expiry Notification: 30 дней — включён на всех HTTP-мониторах
- Мониторишь не только главную, но и критичные эндпоинты: оплата, API, логин
- Бэкап данных в cron — и push-монитор на него же
12. FAQ: часто задаваемые вопросы про Uptime Kuma
Бесплатен ли Uptime Kuma?
Да, полностью. Лицензия MIT. Никаких платных планов, никаких ограничений по количеству мониторов. Единственные расходы — VPS, на котором он живёт.
Сколько ресурсов потребляет Uptime Kuma?
При 50–100 мониторах — около 100–150 MB RAM, CPU близко к нулю в режиме ожидания. Работает на VPS с 512 MB без проблем.
Можно ли мониторить внутренние сервисы (не доступные из интернета)?
Да. Kuma работает из твоей сети и мониторит 192.168.x.x, внутренние базы, роутеры — всё, что доступно с сервера, где она запущена. Через VPN — тоже работает. Именно для этого self-hosted и нужен.
Почему Uptime Kuma не отправляет Telegram-уведомления?
Три причины: неверный токен, неверный chat_id, бот не получил /start от тебя (нет обновлений). Открой https://api.telegram.org/bot<TOKEN>/getUpdates — если пусто, напиши боту /start и обнови. Потом пересоздай уведомление в Kuma и нажми Test.
Как запустить несколько экземпляров Uptime Kuma для разных клиентов?
Запусти несколько контейнеров на разных портах (3001, 3002, 3003…) с разными томами данных. Nginx с разными поддоменами разграничивает доступ. Каждый экземпляр работает полностью независимо.
Что если нужны метрики CPU/RAM, а не только «живой/мёртвый»?
Uptime Kuma этого не умеет — и не должна. Рядом поставь Netdata (один контейнер, метрики в реальном времени) или Prometheus + Node Exporter. Uptime Kuma закрывает доступность. Netdata/Prometheus — ресурсы. Разные инструменты для разных задач.
Когда Uptime Kuma не подойдёт?
Когда нужны: триггеры по метрикам (CPU > 90% в течение 5 минут), RBAC с ролевым доступом, интеграция с LDAP/AD, мультитенантность на уровне платформы. В этих случаях смотри в сторону Zabbix, Grafana Enterprise или Datadog.
Итог: что сделали и что теперь работает
Ты прошёл путь от нулевого мониторинга до работающей системы за один вечер. Uptime Kuma в Docker, Telegram-алерты настроены и протестированы, статус-страница открывается по HTTPS с твоим доменом. Следующее падение ты узнаешь первым — не от клиента.
Дальше — по задаче. Нужны метрики сервера — ставь Netdata рядом. Выросли до 50+ серверов с агентами — смотри в сторону Zabbix. Kubernetes и микросервисы — Prometheus + Alertmanager. Но это уже другой гайд.
Пиши в комментарии. Укажи: вывод docker logs uptime-kuma --tail 50, что именно не работает (алерты, доступ, монитор). Разберёмся.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →


