· 13 мин чтения

Uptime Kuma: публичная статус-страница и внешний мониторинг для офиса

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15 лет администрирования корпоративных сетей я перепробовал десятки систем мониторинга — от дорогих коммерческих до открытых Nagios и Zabbix. И последние два года на всех наших клиентах первым делом рядом с Zabbix ставлю Uptime Kuma. Не как замену, а как быстрый внешний пингер плюс статус-страница для заказчиков. Десять минут на развёртывание, бесплатно, работает в Docker и даёт именно то, что нужно: зелёный квадратик или красный крестик напротив каждого сервиса.

Что такое Uptime Kuma и кому нужна

Uptime Kuma — это self-hosted аналог UptimeRobot/StatusCake на Node.js. Ставите на свою виртуалку, получаете веб-интерфейс, добавляете мониторы (HTTP, TCP, Ping, DNS, SSL-сертификат, Docker-контейнер) и настраиваете уведомления в 100+ каналов: Telegram, Slack, почта, Discord, Mattermost, Webhook и прочее.

Главных сценария три:

У нас на практике именно эти три задачи закрывают 80% потребностей по мониторингу у среднего клиента. Остальное — детали, которые Zabbix или Prometheus сделают лучше.

Установка в Docker за 5 минут

Рекомендую разворачивать на отдельной Ubuntu 22.04 виртуалке с 1 vCPU и 1 ГБ RAM. Этого хватит на 200+ мониторов. Базовый запуск через docker compose:

mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
EOF
docker compose up -d
docker logs -f uptime-kuma

Заходим на http://server:3001, регистрируем админа. На этом этап первичной установки закончен. Дальше — только настройка мониторов и уведомлений.

Настройка Nginx с HTTPS и доменом

Напрямую открывать 3001 порт в интернет я не рекомендую. Ставим перед Kuma Nginx с Let's Encrypt. Пример конфига:

server {
    listen 443 ssl http2;
    server_name status.company.ru;
    ssl_certificate /etc/letsencrypt/live/status.company.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.company.ru/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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
    }
}

Важный момент — WebSocket-заголовки Upgrade и Connection. Без них веб-интерфейс работает, но статус не обновляется в реальном времени. Я всегда отдельно проверяю это после установки — открываю DevTools, смотрю вкладку WS.

Типы мониторов и как их правильно настраивать

ТипПрименениеИнтервалКомментарий
HTTP(S)Проверка сайтов, API, 1С веб-клиент60 секПроверяйте код и тело ответа, не только код
TCPSMTP/25, RDP/3389, Postgres/543260 секПоказывает порт открыт, но не функциональность
PingРоутеры, коммутаторы, принтеры30 секТребует icmp, иногда блокируется
DNSПроверка записей A/MX/TXT5 минАлерт при изменении — полезно для SPF/DMARC
PushCron-задачи, бэкапыПо событиюСервис сам стучится на URL при успехе
DockerСтатус контейнера60 секЧерез сокет /var/run/docker.sock

Я всегда делаю HTTP-монитор двухсложным — помимо кода 200 проверяю ключевое слово в теле. Для Битрикс24 это «Bitrix24», для 1С — «1С:Предприятие». Иначе сайт может отвечать 200, но отдавать заглушку «техработы».

Статус-страница для клиентов

Status Page — фича, ради которой половина клиентов ставит Kuma. Создаётся так: раздел Settings → Status Pages → New Status Page. Указываете slug (например public), название, логотип, список мониторов. Получаете URL вида https://status.company.ru/status/public.

Что я обычно вывожу на публичную страницу:

На внутреннюю админскую страницу — дополнительно мониторы внутренних серверов, сертификатов, бэкапов. Это пригождается, когда сотрудники пишут «у меня не работает», а я за 2 секунды по статусу вижу реальное состояние сервисов.

Уведомления: Telegram, почта, Webhook

Настройка Telegram-бота стандартная: создаёте через @BotFather, получаете Token, находите Chat ID через curl https://api.telegram.org/bot<TOKEN>/getUpdates. В Kuma раздел Notifications → Add New → Telegram. Вставляете Token и Chat ID, проверяете кнопкой Test.

Настройки алертов на каждом мониторе:

Реальный кейс: статус-страница для аутсорсера

В феврале 2026 года к нам пришёл партнёр-аутсорсер — компания обслуживает 12 юрлиц, у каждого свой набор сервисов в нашем дата-центре МТС. Задача: единая статус-страница, где клиенты видят состояние только своих сервисов. И внутренний дашборд для техподдержки со всеми 80+ мониторами.

Развернули Uptime Kuma на виртуалке с Dell Xeon Platinum 8280, 2 vCPU, 2 ГБ RAM, Ubuntu 22.04. Создали 12 отдельных Status Pages, каждому клиенту отдали slug вида status/akme-pro. Для каждой привязали мониторинг: корпоративный сайт, почта, VPN, файл-сервер, телефония 3CX. Telegram-чаты — отдельные на клиента и общий для админов. Алерты в почту по крит-событиям.

Результат через два месяца: 38 зафиксированных инцидентов (средняя реакция — 4 минуты 20 секунд), клиенты перестали звонить с вопросом «у вас там работает почта?» — смотрят сами. Стоимость внедрения — 24 000 руб., ежемесячная поддержка — включена в сопровождение. Оборудование в дата-центре МТС, 40G Mellanox, аптайм за отчётный период 99.94%.

Бэкап и обновление

Весь стейт Kuma хранится в SQLite-файле kuma.db внутри тома. Плюс файл config.json. Регулярный бэкап — просто rsync папки data:

# Бэкап каждый день в 3:00
cat > /etc/cron.d/kuma-backup <<'EOF'
0 3 * * * root rsync -a --delete /opt/uptime-kuma/data/ /backup/kuma/$(date +\%Y\%m\%d)/ >/dev/null
EOF

Обновление — pull нового образа и перезапуск:

cd /opt/uptime-kuma
docker compose pull
docker compose up -d
docker image prune -f

Дополнительно раз в месяц я вручную делаю Backup через веб-интерфейс (Settings → Backup) — получаю JSON со всеми мониторами и уведомлениями. Кладу в отдельный Git-репозиторий. Так при полной потере сервера восстановлю конфиг за 5 минут на новой машине.

Типичные ошибки и ограничения

Развернём Uptime Kuma в вашей инфраструктуре

Поставим, настроим мониторинг всех ваших сервисов, подключим Telegram-алерты, опубликуем статус-страницу на вашем домене. Делаем под ключ за 1 рабочий день. Если нужно — интегрируем с Zabbix, Grafana и вашей тикет-системой.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы

Чем Uptime Kuma отличается от Zabbix?
Zabbix — тяжёлая система мониторинга с агентами, базой PostgreSQL, триггерами. Uptime Kuma — простой HTTP/TCP-пингер с публичной статус-страницей. Ставится за 10 минут, подходит для проверки внешних сайтов и сервисов.
Какие типы мониторов поддерживает Kuma?
HTTP(S) с проверкой кода ответа и содержимого, TCP-порт, Ping, DNS-resolver, Push, Steam Game Server, gRPC, MQTT, Docker container, SSL-сертификат с предупреждением об истечении.
Можно ли показать клиентам публичный статус?
Да, это главная фича. Создаёте Status Page, выбираете мониторы для отображения, настраиваете логотип и URL. Получаете красивую страницу в стиле атласских или GitHub status.
Как слать алерты в Telegram?
В разделе Notifications добавляете Telegram, вводите Bot Token и Chat ID, привязываете к мониторам. При падении сразу приходит сообщение с названием, статусом и временем.
Как бэкапить Uptime Kuma?
Весь стейт хранится в одном файле kuma.db (SQLite) внутри volume. Копируйте папку /app/data. Я всегда делаю ежедневный rsync в внешний бэкап-сервер и дополнительно — Backup через веб-интерфейс в JSON.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.