Linux-сервер

Мониторинг сайта и сервера на Uptime Kuma: Docker, HTTPS и уведомления в Telegram

7 шагов 13 мин чтения 8 просмотров 0
Содержание

Узнать от клиента, что сайт уже час лежит, — худший способ узнать о сбое. Uptime Kuma — бесплатный self-hosted инструмент мониторинга: он проверяет сайты, порты, ping и DNS с интервалом от нескольких секунд до нескольких минут, заранее предупреждает об истечении SSL-сертификатов, публикует статус-страницу и отправляет уведомления в Telegram, на email и в десятки других каналов. В статье: установка в Docker, публикация через Nginx с HTTPS и настройка уведомлений в Telegram.

Запускайте мониторинг на отдельном сервере, в идеале в другом регионе, чем серверы, за которыми он следит. Если мониторинг стоит на той же машине или в той же сети, что упала, уведомление никто не получит. Достаточно небольшого VPS в другой локации IMIDC (например, сервер в Гонконге следит за Токио).

Шаг 1: Установка Docker

Установите Docker и Docker Compose по нашему руководству по установке Docker. Uptime Kuma нужно совсем немного: одного ядра CPU и 512 МБ–1 ГБ RAM с запасом хватает на несколько сотен проверок.

Шаг 2: Запуск Uptime Kuma

Веб-интерфейс слушает порт 3001. Привязка к 127.0.0.1 закрывает его от интернета, пока перед ним не появится Nginx с HTTPS.

docker run -d --name uptime-kuma --restart=always \
  -p 127.0.0.1:3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:1

docker ps --filter name=uptime-kuma
curl -I http://127.0.0.1:3001

Тег :1 соответствует давней стабильной ветке релизов. Перед переходом на новую мажорную версию изучите релизы проекта на GitHub: при мажорном обновлении может выполняться миграция базы данных.

Шаг 3: Публикация по HTTPS через Nginx

Направьте поддомен, например status.example.com, на сервер мониторинга, выпустите сертификат (см. бесплатный SSL с Certbot или acme.sh) и настройте проксирование на контейнер. Uptime Kuma использует WebSocket, поэтому заголовки Upgrade обязательны.

server {
    listen 443 ssl;
    http2 on;
    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;
    }
}
nginx -t && systemctl reload nginx

Откройте https://status.example.com и сразу создайте учётную запись администратора: администратором становится первый посетитель страницы настройки.

Шаг 4: Добавление проверок

  • HTTP(s): проверяет URL и код ответа. Тип HTTP(s) - Keyword дополнительно проверяет наличие слова на странице и ловит страницы ошибок, которые всё равно отдают 200.
  • TCP Port: проверяет, что служба принимает соединения, например SSH на порту 22, RDP на 3389 или MySQL на 3306.
  • Ping: базовая проверка доступности. Некоторые сети отбрасывают ICMP, поэтому для критичных серверов лучше использовать проверку TCP.
  • DNS: проверяет, что запись по-прежнему разрешается в ожидаемое значение.

Интервал проверки 60 секунд с 2–3 повторами — хороший баланс: о реальных сбоях вы узнаете в течение нескольких минут, а единичный потерянный пакет не поднимет вас среди ночи. В HTTP-проверках включите Certificate Expiry Notification, чтобы получать предупреждения до истечения SSL-сертификатов.

Шаг 5: Уведомления в Telegram

Создайте бота и узнайте ID чата, в который будут приходить уведомления.

# 1. In Telegram, talk to @BotFather, send /newbot and copy the token
# 2. Send any message to your new bot (or add it to a group and post there)
# 3. Read the chat ID from the bot's updates
curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates" | grep -o '"chat":{"id":-\?[0-9]*'

В Uptime Kuma откройте Settings → Notifications → Setup Notification, выберите Telegram, вставьте токен бота и ID чата, нажмите Test и включите Default enabled и Apply on all existing monitors. ID групповых чатов начинаются со знака минус.

Шаг 6: Создание статус-страницы

В разделе Status Pages можно опубликовать публичную страницу с состоянием выбранных проверок — это удобно и для клиентов, и для вашей команды. Её можно разместить на отдельном домене и публиковать на ней уведомления о плановых работах.

Шаг 7: Резервное копирование и обновление

# Back up the data volume (monitors, history, settings)
docker run --rm -v uptime-kuma:/data -v "$PWD":/backup alpine \
  tar czf /backup/uptime-kuma-$(date +%F).tgz -C /data .

# Update to the latest release of the same major version
docker pull louislam/uptime-kuma:1
docker rm -f uptime-kuma
docker run -d --name uptime-kuma --restart=always \
  -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data louislam/uptime-kuma:1

Частые вопросы

Приходят уведомления о кратковременных сбоях, которые не являются реальными простоями

Увеличьте число повторов до 3, а интервал между повторами — до 30–60 секунд. Тогда проверка будет помечаться как недоступная только после нескольких неудач подряд.

Ping всегда завершается ошибкой, хотя сайт работает

Сервер или его файрвол отбрасывает ICMP. Используйте вместо этого проверку TCP Port или HTTP.

Можно ли отслеживать, как сайт работает из материкового Китая?

Uptime Kuma измеряет доступность из того места, где он запущен. Чтобы увидеть картину из Китая, запустите второй экземпляр на сервере с хорошими маршрутами в Китай, например на сервере в Гонконге с CN2 GIA, или воспользуйтесь инструментами тестирования сети из нескольких точек.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, выполненную команду и полный текст ошибки, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства