Каждая минута простоя интернет-магазина, CRM-системы или медиапортала стоит денег и репутации: клиенты уходят к конкурентам, контекстная реклама сливает бюджет в ошибку 502 Bad Gateway, а поисковые роботы снижают позиции сайта. Хуже внезапного падения сервера может быть только просроченный SSL-сертификат, когда браузер блокирует вход огромным красным экраном «Подключение не защищено».
В этой статье мы за 10 минут развернем полноценную систему мониторинга на базе популярного open-source решения Uptime Kuma в Docker, подключим мгновенные пуш-уведомления в Telegram и разберем резервный Bash-скрипт контроля SSL-сертификатов через Cron.
1. Зачем сайту собственный мониторинг и почему облачные SaaS подводят
Большинство вебмастеров начинают с бесплатных облачных сервисов (UptimeRobot, Better Stack, Pingdom). Однако бесплатные тарифы имеют критические ограничения:
- Редкий интервал опроса: Проверка раз в 5–15 минут. За 15 минут простоя интернет-магазин успевает потерять десятки заказов.
- Лимит на количество проверок: Обычно до 5–10 мониторов, чего недостаточно даже для одного проекта с API, базой данных и поддоменами.
- Платные Telegram и SMS алерты: За уведомления в мессенджеры SaaS-платформы требуют подписку от $15–30 в месяц.
- Ограничения по геолокации: Невозможно проверить доступность сайта изнутри конкретной страны или локального дата-центра.
Собственный инстанс Uptime Kuma полностью бесплатен, проверяет неограниченное число сайтов с интервалом от 20 секунд, контролирует сроки SSL Let's Encrypt, замеряет TTFB, строит публичные статус-страницы и мгновенно присылает детальные отчеты с графиками прямо в Telegram.
2. Шаг 1: Создание Telegram-бота для алертов за 2 минуты
Telegram — самый оперативный канал для получения тревожных сигналов (Incident Alerts). Создадим служебного бота для отправки сообщений:
- Откройте официального бота @BotFather в Telegram.
- Отправьте команду
/newbot, задайте понятное имя (например, MySite Uptime Alert) и username бота (например, mysite_uptime_bot). - Скопируйте полученный HTTP API Token (вида
7123456789:AAFn_xxxxxxxxx). - Запустите своего нового бота, нажав кнопку /start.
- Создайте закрытую группу для дежурных администраторов (или используйте личный чат) и добавьте туда созданного бота.
- Узнайте
Chat ID: добавьте в чат бота @userinfobot (или @getmyid_bot), он сразу выдаст числовой идентификатор чата (например:-1001987654321для группы или123456789для личного чата).
Проверьте отправку тестового сообщения через cURL в терминале:
curl -s -X POST "https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage" \
-d "chat_id=<ВАШ_CHAT_ID>" \
-d "text=🔔 Тестовое оповещение: бот мониторинга успешно подключен!"
3. Шаг 2: Развертывание Uptime Kuma в Docker Compose за 3 минуты
Uptime Kuma написан на Node.js и SQLite, потребляет всего 60–100 МБ оперативной памяти и идеально работает на самом дешевом KVM VPS с 1 vCPU и 1 GB RAM.
1. Установка Docker и Docker Compose на чистый VPS (Ubuntu 24.04 / Debian 12):
# Обновляем пакеты и ставим официальный Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
2. Создание файла docker-compose.yml:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
nano docker-compose.yml
Вставьте следующую конфигурацию:
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
volumes:
- uptime-kuma-data:/app/data
ports:
- "3001:3001"
security_opt:
- no-new-privileges:true
volumes:
uptime-kuma-data:
3. Запуск контейнера:
docker compose up -d
docker compose ps
Откройте в браузере http://IP_ВАШЕГО_СЕРВЕРА:3001, задайте логин и пароль администратора. Для защиты входа паролем сгенерируйте надежную комбинацию через наш Генератор паролей.
Рекомендуемые VDS-провайдеры
Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с
Идеальные изолированные KVM-серверы для систем мониторинга, Uptime Kuma и ботов. Собственные дата-центры Tier III в Москве и СПб, трафик 3 ТБ на порту 1 Гбит/с.
Высокоскоростные VDS с предустановленным Docker и Ubuntu 24.04. Поминутная тарификация, моментальные снапшоты и удобное мобильное приложение.
Стабильный аптайм 99.98%, установка Docker и баз данных за 60 секунд, круглосуточная русскоязычная поддержка 24/7.
4. Шаг 3: Настройка мониторов HTTP(s), Ping, TCP и срока SSL
После входа в панель Uptime Kuma привяжем Telegram и добавим ваши веб-ресурсы:
1. Подключение уведомлений в Telegram:
- Перейдите в Settings (Настройки) ➔ Notifications (Уведомления) ➔ Setup Notification.
- Выберите тип: Telegram.
- Вставьте Bot Token и Chat ID, полученные на Шаге 1.
- Включите чекбокс «Default enabled» (уведомлять по умолчанию для всех новых мониторов).
- Нажмите Test — в Telegram мгновенно придет тестовый алерт! Нажмите Save.
2. Добавление монитора сайта и SSL-сертификата:
- Нажмите + Add New Monitor в верхнем меню.
- Monitor Type:
HTTP(s). - Friendly Name: Название проекта (например: Интернет-магазин (Prod)).
- URL:
https://example.com. - Heartbeat Interval:
60секунд (интервал проверки). - Retries:
2(количество повторных попыток перед алертом для исключения ложных срабатываний). - Certificate Expiry Notification: активируйте галочку! Укажите порог уведомления, например 14 дней (Uptime Kuma начнет предупреждать вас за две недели до окончания срока SSL).
200 OK. В секции HTTP Options можно включить поиск ключевого слова в теле страницы (например, наличие текста в футере или копирайта). Это спасет вас от ситуации, когда Nginx отдает пустой белый экран или страницу ошибки с кодом 200. Проверить валидность SSL и заголовков можно через наш SSL Чекер и Инспектор HTTP-заголовков.
5. Альтернатива без Docker: легковесный Bash-скрипт проверки SSL по Cron
Если у вас нет отдельного сервера с Docker, можно настроить автономный скрипт на любом Linux-сервере, который раз в сутки проверяет срок годности SSL всех ваших доменов через утилиту openssl и шлет отчет в Telegram.
Создайте скрипт /usr/local/bin/check_ssl.sh:
#!/bin/bash
# -------------------------------------------------------------
# SysKit.ru - Автоматический чекер срока SSL-сертификатов
# -------------------------------------------------------------
BOT_TOKEN="ВАШ_TELEGRAM_BOT_TOKEN"
CHAT_ID="ВАШ_TELEGRAM_CHAT_ID"
DAYS_ALERT=14 # Порог предупреждения в днях
# Список проверяемых доменов через пробел
DOMAINS=("example.com" "api.example.com" "syskit.ru")
for DOMAIN in "${DOMAINS[@]}"; do
# Получаем дату окончания срока SSL через сокет OpenSSL
EXPIRY_DATE=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN":443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$EXPIRY_DATE" ]; then
TEXT="⚠️ Внимание! Не удалось проверить SSL для домена $DOMAIN. Порт 443 недоступен или отсутствует сертификат!"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "parse_mode=HTML" -d "text=$TEXT"
continue
fi
# Переводим дату в Unix Timestamp
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))
if [ $DAYS_LEFT -le $DAYS_ALERT ]; then
TEXT="🚨 Критическое предупреждение SSL!%0AДомен: $DOMAIN%0AОсталось дней: $DAYS_LEFT%0AДата истечения: $EXPIRY_DATE%0AСрочно обновите сертификат (Certbot / acme.sh)!"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "parse_mode=HTML" -d "text=$TEXT"
fi
done
Сделайте скрипт исполняемым и добавьте в системный Cron:
chmod +x /usr/local/bin/check_ssl.sh
# Открываем crontab
crontab -e
# Запуск каждое утро в 09:00 (составить расписание поможет наш Генератор Cron):
0 9 * * * /usr/local/bin/check_ssl.sh >/dev/null 2>&1
Сгенерировать правильное Cron-расписание можно онлайн в нашем Генераторе Cron задач SysKit.
6. Публичная статус-страница (Status Page) для клиентов
В Uptime Kuma встроен превосходный конструктор Status Page (как у GitHub, Cloudflare или OpenAI). Он позволяет вывести публичный дашборд доступности ваших сервисов на отдельном домене или поддомене (например: status.yourdomain.com):
- В панели Uptime Kuma перейдите в Status Pages ➔ New Status Page.
- Укажите название компании, логотип и выберите мониторы, которые должны видеть пользователи.
- Группируйте сервисы по категориям: «Веб-сайт», «API», «База данных», «Платежный шлюз».
- В случае аварии вы можете прямо в панели публиковать сообщения об инциденте (Incident Management), информируя пользователей о ведущихся технических работах.
7. Инженерные правила надежного мониторинга
✅ Лучшие практики мониторинга:
- Мониторинг развернут на отдельном независимом хостинге/VDS.
- Настроены алерты по числу повторов (Retries: 2–3) для защиты от кратковременных сетевых микро-спайков.
- Проверяется не только статус 200, но и наличие ключевых слов в HTML.
- Контролируется время ответа (Response Time > 2000 мс — сигнал о деградации БД).
- SSL-алерты настроены с запасом минимум в 14–21 день.
❌ Ошибки, создающие иллюзию контроля:
- Мониторинг на том же VPS: при падении питания или ядра Linux вы не получите алерт.
- Проверка только главной страницы: падение микросервиса авторизации или корзины останется незамеченным.
- Отсутствие мониторинга DNS: если истечет регистрация домена или слетят NS, HTTP-чекер покажет таймаут слишком поздно.
8. Итоговый чек-лист настройки
- Создан бот через
@BotFatherи получен Chat ID. - Развернут контейнер
uptime-kumaв Docker Compose. - Telegram подключен в качестве дефолтного канала оповещений.
- Добавлены мониторы HTTP(s) ключевых URL проекта с интервалом 60 сек.
- Активирована проверка срока SSL с порогом 14 дней.
- Опубликована статус-страница для службы поддержки и клиентов.
🚀 Нужен изолированный сервер под мониторинг от 200 ₽?
Разверните надежный KVM VPS с чистыми NVMe дисками и каналом 1 Гбит/с для круглосуточного мониторинга ваших проектов 24/7.
Выбрать микро-VPS для мониторинга на Selectel →