Uptime Kuma: мониторинг и статус-страница за 30 минут

Что такое Uptime Kuma и почему стоит использовать

Uptime Kuma — open-source система мониторинга доступности сервисов с красивым веб-интерфейсом. Это self-hosted альтернатива платным сервисам вроде UptimeRobot, Pingdom и StatusPage.io.

Возможности:

  • Мониторинг HTTP(S), TCP, DNS, PING, Docker, SQL, MQTT, gRPC
  • Уведомления в Telegram, Slack, Discord, Email, Webhook (90+ интеграций)
  • Публичная статус-страница для клиентов
  • Мониторинг SSL-сертификатов с уведомлением об истечении
  • Поддержка нескольких пользователей и 2FA
  • Встроенные графики времени отклика и аптайма
  • Минимальные требования: 256 МБ RAM, 1 vCPU

Uptime Kuma написан на Node.js и использует SQLite — никаких внешних зависимостей. Один контейнер Docker и через 5 минут система готова к работе.

Установка через Docker Compose

Рекомендуемый способ установки — Docker Compose с монтированием тома для сохранения данных:

# Создание директории
mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma

# docker-compose.yml
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  # для Docker мониторинга
    environment:
      - TZ=Europe/Moscow

# Запуск
docker compose up -d

# Проверка
docker logs uptime-kuma

Откройте http://your-server:3001 в браузере. При первом входе создайте учётную запись администратора. Обязательно включите 2FA в настройках безопасности.

Настройка Nginx reverse proxy с SSL

Для продуктивного использования разместите Uptime Kuma за Nginx с Let's Encrypt сертификатом:

# /etc/nginx/sites-available/status.example.com
server {
    listen 443 ssl http2;
    server_name status.example.com;

    ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.example.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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name status.example.com;
    return 301 https://$server_name$request_uri;
}

WebSocket-подключение (Upgrade и Connection headers) обязательно — без него дашборд не будет обновляться в реальном времени.

Настройка мониторов

После установки добавьте мониторы для ваших сервисов. Рассмотрим основные типы:

HTTP(S) монитор — проверка веб-сайта:

  • URL: https://example.com
  • Метод: GET
  • Ожидаемый код ответа: 200
  • Интервал: 60 секунд
  • Количество попыток: 3 (уведомление после 3 неудачных проверок)
  • Ключевое слово: «Добро пожаловать» (проверяет содержимое страницы)

TCP монитор — проверка порта:

  • Хост: 10.0.1.10
  • Порт: 1433 (SQL Server)
  • Интервал: 30 секунд

DNS монитор — проверка DNS-записей:

  • Хост: example.com
  • Тип записи: A
  • DNS-сервер: 8.8.8.8
  • Ожидаемый ответ: 1.2.3.4

Docker монитор — проверка контейнера:

  • Контейнер: postgres-db
  • Проверяет статус контейнера через Docker socket

Для каждого монитора настройте теги (tags) для группировки на статус-странице: «Веб-сайты», «Базы данных», «Инфраструктура».

Настройка уведомлений в Telegram

Telegram — наиболее оперативный канал уведомлений для российских IT-команд. Настройка:

Шаг 1: Создайте бота через @BotFather в Telegram, получите токен.

Шаг 2: Получите Chat ID. Отправьте любое сообщение боту, затем откройте: https://api.telegram.org/bot<TOKEN>/getUpdates — найдите chat.id в ответе.

Шаг 3: В Uptime Kuma: Settings → Notifications → Setup Notification:

  • Тип: Telegram
  • Bot Token: ваш токен
  • Chat ID: ID чата или группы (для группы начинается с -)
  • Включите «Apply on all existing monitors»
# Проверка бота через curl
curl -s "https://api.telegram.org/bot123456:ABC-DEF/sendMessage" \
  -d "chat_id=-1001234567890" \
  -d "text=Тест уведомления Uptime Kuma" \
  -d "parse_mode=HTML"

Uptime Kuma отправляет уведомления при изменении статуса: DOWN (сервис недоступен) и UP (сервис восстановлен). Сообщения содержат имя монитора, время отклика и длительность простоя.

Уведомления в корпоративный чат

Для командной работы создайте группу в Telegram и добавьте бота. Используйте Chat ID группы (отрицательное число). Настройте несколько каналов уведомлений:

  • Telegram-группа «Мониторинг» — все уведомления для дежурных
  • Личный Telegram руководителя — только критичные сервисы (отметьте галочкой конкретные мониторы)
  • Email — резервный канал на случай проблем с Telegram

Создание публичной статус-страницы

Статус-страница показывает клиентам текущее состояние ваших сервисов — вместо ответов на вопросы «У вас всё работает?» вы просто даёте ссылку.

Создание: Settings → Status Pages → New Status Page.

Настройки:

  • Title: Статус сервисов ITfresh
  • Slug: /status (будет доступна как https://status.example.com/status)
  • Theme: Auto (подстраивается под тему системы пользователя)
  • Show powered by: Off (убирает ссылку на Uptime Kuma)
  • Custom CSS: для брендирования под корпоративный стиль

Добавьте группы мониторов на страницу:

  • Группа «Веб-сервисы»: корпоративный сайт, клиентский портал, API
  • Группа «Почта»: SMTP, IMAP, Webmail
  • Группа «Инфраструктура»: VPN, DNS (не показывайте клиентам внутренние сервисы)

Статус-страница доступна без авторизации и показывает аптайм за 90 дней, текущий статус и историю инцидентов. Вы можете публиковать объявления об обслуживании (Maintenance) с указанием времени.

Мониторинг SSL-сертификатов

Просроченный SSL-сертификат — одна из самых частых причин простоя. Uptime Kuma автоматически проверяет срок действия сертификатов для всех HTTPS-мониторов.

Настройка: в параметрах HTTPS-монитора раздел «Certificate Expiry Notification»:

  • Уведомлять за 30 дней до истечения
  • Уведомлять за 14 дней до истечения
  • Уведомлять за 7 дней до истечения

Для мониторинга сертификатов внутренних сервисов (самоподписанных), которые не доступны по HTTP:

# Добавьте TCP-монитор с проверкой сертификата
# Или используйте скрипт для отправки в Uptime Kuma через Push Monitor

#!/bin/bash
# check_cert.sh — проверка сертификата и Push в Uptime Kuma
HOST="internal-service.local"
PORT=443
PUSH_URL="https://status.example.com/api/push/abc123"

EXPIRY=$(echo | openssl s_client -servername $HOST -connect $HOST:$PORT 2>/dev/null | \
  openssl x509 -noout -enddate | cut -d= -f2)

EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))

if [ $DAYS_LEFT -gt 7 ]; then
  curl -s "${PUSH_URL}?status=up&msg=SSL+OK:+${DAYS_LEFT}+days+left"
else
  curl -s "${PUSH_URL}?status=down&msg=SSL+EXPIRING:+${DAYS_LEFT}+days+left"
fi

Запускайте скрипт через cron каждые 6 часов.

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

Данные Uptime Kuma хранятся в SQLite-файле. Бэкап прост:

# Бэкап данных
tar czf /backup/uptime-kuma-$(date +%Y%m%d).tar.gz /opt/uptime-kuma/data/

# Автоматический бэкап через cron
0 3 * * * tar czf /backup/uptime-kuma-$(date +\%Y\%m\%d).tar.gz /opt/uptime-kuma/data/ && find /backup/ -name 'uptime-kuma-*' -mtime +30 -delete

# Обновление до последней версии
cd /opt/uptime-kuma
docker compose pull
docker compose up -d

# Проверка версии
docker logs uptime-kuma 2>&1 | head -5

Также доступен встроенный экспорт/импорт через веб-интерфейс: Settings → Backup → Export. Файл содержит все мониторы, уведомления и статус-страницы в JSON-формате. Это удобно для миграции на другой сервер.

Мониторинг самого Uptime Kuma

Кто мониторит монитор? Используйте внешний сервис для проверки доступности самой Uptime Kuma. Бесплатные варианты:

  • UptimeRobot Free — 50 мониторов бесплатно, проверка каждые 5 минут
  • Второй экземпляр Uptime Kuma на другом сервере/VPS, мониторящий первый
  • Простой скрипт на cron внешнего сервера, проверяющий доступность через curl и отправляющий алерт в Telegram при ошибке

Часто задаваемые вопросы

Технического ограничения нет. На практике один экземпляр с 1 ГБ RAM комфортно обслуживает 500+ мониторов с интервалом 60 секунд. При 1000+ мониторов с интервалом 30 секунд рекомендуется увеличить RAM до 2 ГБ и использовать SSD для SQLite.

Да, установите Uptime Kuma внутри корпоративной сети. Для публичной статус-страницы пробросьте порт 3001 через Nginx на внешний IP или используйте Cloudflare Tunnel. Альтернатива — Push Monitor: внутренний скрипт сам отправляет статус в Uptime Kuma по HTTPS.

Uptime Kuma не замена Zabbix. Zabbix — полноценная система мониторинга инфраструктуры (CPU, RAM, диски, сеть). Uptime Kuma — специализированный инструмент для мониторинга доступности сервисов с красивой статус-страницей. Они дополняют друг друга: Zabbix для внутреннего мониторинга, Uptime Kuma для внешней доступности и клиентской статус-страницы.

Используйте Push Monitor. Создайте монитор типа «Push» в Uptime Kuma — он сгенерирует URL. Ваш скрипт периодически отправляет GET-запрос на этот URL с параметром ?status=up или ?status=down. Если запрос не приходит в течение заданного интервала — монитор переходит в статус DOWN.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Uptime Kuma#мониторинг#статус-страница#uptime monitoring#Telegram уведомления#проверка доступности#SSL мониторинг#бесплатный мониторинг
Комментарии 0

Оставить комментарий

загрузка...