Узнать от клиента, что сайт уже час лежит, — худший способ узнать о сбое. Uptime Kuma — бесплатный self-hosted инструмент мониторинга: он проверяет сайты, порты, ping и DNS с интервалом от нескольких секунд до нескольких минут, заранее предупреждает об истечении SSL-сертификатов, публикует статус-страницу и отправляет уведомления в Telegram, на email и в десятки других каналов. В статье: установка в Docker, публикация через Nginx с HTTPS и настройка уведомлений в Telegram.
Установите Docker и Docker Compose по нашему руководству по установке Docker. Uptime Kuma нужно совсем немного: одного ядра CPU и 512 МБ–1 ГБ RAM с запасом хватает на несколько сотен проверок.
Веб-интерфейс слушает порт 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: при мажорном обновлении может выполняться миграция базы данных.
Направьте поддомен, например 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 и сразу создайте учётную запись администратора: администратором становится первый посетитель страницы настройки.
Интервал проверки 60 секунд с 2–3 повторами — хороший баланс: о реальных сбоях вы узнаете в течение нескольких минут, а единичный потерянный пакет не поднимет вас среди ночи. В HTTP-проверках включите Certificate Expiry Notification, чтобы получать предупреждения до истечения SSL-сертификатов.
Создайте бота и узнайте 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 групповых чатов начинаются со знака минус.
В разделе Status Pages можно опубликовать публичную страницу с состоянием выбранных проверок — это удобно и для клиентов, и для вашей команды. Её можно разместить на отдельном домене и публиковать на ней уведомления о плановых работах.
# 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 секунд. Тогда проверка будет помечаться как недоступная только после нескольких неудач подряд.
Сервер или его файрвол отбрасывает ICMP. Используйте вместо этого проверку TCP Port или HTTP.
Uptime Kuma измеряет доступность из того места, где он запущен. Чтобы увидеть картину из Китая, запустите второй экземпляр на сервере с хорошими маршрутами в Китай, например на сервере в Гонконге с CN2 GIA, или воспользуйтесь инструментами тестирования сети из нескольких точек.
Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, выполненную команду и полный текст ошибки, чтобы мы быстрее нашли причину.