Uptime Kuma: мониторинг серверов и сайтов
Uptime Kuma — саморазмещаемая open-source альтернатива UptimeRobot с красивым интерфейсом, уведомлениями в Telegram и поддержкой HTTP, TCP, DNS, Docker и других мониторов.
Установка через Docker
docker run -d --name uptime-kuma -p 3001:3001 -v uptime-kuma:/app/data --restart unless-stopped louislam/uptime-kuma:latestОткройте http://your-server:3001 для первичной настройки.
Docker Compose
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- ./uptime-kuma-data:/app/data
restart: unless-stoppedNginx Reverse Proxy + SSL
server {
listen 443 ssl;
server_name status.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/status.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}Настройка мониторов
- HTTP(S) — проверка сайта, ожидаемый статус 200, keyword match
- TCP Port — проверка доступности порта (MySQL 3306, SSH 22)
- DNS — мониторинг DNS-записей
- Docker Container — статус контейнера
- Ping — ICMP-проверка доступности
Уведомления в Telegram
В настройках добавьте Notification → Telegram:
Bot Token: 123456:ABCdefGHIjklMNO
Chat ID: -1001234567890 # для группы
# Получить Chat ID:
curl "https://api.telegram.org/bot{TOKEN}/getUpdates"Status Page (публичная страница)
Uptime Kuma поддерживает создание красивых публичных Status Page — отображайте статус сервисов для клиентов без доступа к панели администратора.
Разбор реальных ошибок
Три ситуации закрывают почти все обращения при первой настройке Uptime Kuma: права на volume, неверный Chat ID в Telegram и самоподписанный сертификат у внутреннего сервиса. Все три легко воспроизвести и так же легко устранить, если понимать первопричину, а не просто перезапускать контейнер.
База данных недоступна на запись
Error: EACCES: permission denied, open '/app/data/kuma.db'Контейнер Uptime Kuma работает от непривилегированного пользователя внутри образа, а смонтированная директория ./uptime-kuma-data на хосте принадлежит root. Исправляется командой chown -R 1000:1000 ./uptime-kuma-data — узнать реальный UID процесса внутри контейнера можно через docker exec uptime-kuma id.
Telegram не доставляет уведомления
Error: Bad Request: chat not foundChat ID указан неверно — частая причина в том, что для групп Telegram использует отрицательные ID (например, -1001234567890), а супергруппы начинаются с -100. Если бот не является участником группы или заблокирован пользователем в личке — ошибка будет та же самая.
Uptime Kuma vs UptimeRobot vs Healthchecks.io
| Критерий | Uptime Kuma | UptimeRobot | Healthchecks.io |
|---|---|---|---|
| Хостинг | Self-hosted | SaaS | SaaS или self-hosted |
| Стоимость | Бесплатно (свой VPS) | Free до 50 мониторов, далее платно | Free до 20 проверок |
| Проверка из нескольких регионов | Нет, один сервер | Есть | Есть |
| Публичная Status Page | Есть, встроена | Есть | Ограничена |
Когда Uptime Kuma не подходит
- Нужен мониторинг из нескольких географических регионов одновременно — self-hosted инсталляция проверяет только с одного VPS, и локальный сбой сети даст ложную тревогу.
- Клиентам важен независимый сторонний отчёт о доступности — self-hosted статус-страница не считается нейтральным доказательством для SLA-споров.
- Нужны сложные цепочки эскалации дежурств (on-call rotation) — здесь честнее PagerDuty или Opsgenie.
- Планируется несколько тысяч мониторов — SQLite по умолчанию не рассчитан на такую нагрузку без дополнительной настройки.
- Требуется долгая история метрик для SLA-отчётности за годы — Uptime Kuma хранит агрегаты ограниченный срок.
Проверка результата
# Контейнер поднят и слушает порт
docker ps | grep uptime-kuma
curl -I http://localhost:3001
# API статуса конкретного монитора (публичный, если включена Status Page)
curl https://status.yourdomain.com/api/status-page/heartbeat/default
# Логи контейнера при странном поведении
docker logs uptime-kuma --tail 50Пустой ответ на curl -I или код отличный от 200/301 означает, что nginx reverse proxy не достучался до контейнера — проверьте, что proxy_pass указывает на правильный порт и что контейнер вообще запущен. После первичной проверки стоит настроить сам сервер мониторинга по чек-листу из статьи про настройку облачного сервера, а бэкапы базы Uptime Kuma удобно гонять через rclone.