VPS для бота-уведомителя: мониторинг и алерты 24/7
Бот-уведомитель следит за сайтами, серверами и метриками и шлёт алерт в Telegram, когда что-то ломается. Такому боту нужен независимый сервер: если он стоит на той же машине, что и объект мониторинга, он умрёт вместе с ней.
Содержание
Зачем уведомителю отдельный VPS
['Главный принцип мониторинга: наблюдатель должен быть независим от объекта. Если бот, следящий за вашим сайтом, живёт на том же сервере, то при падении сервера вы не получите алерт — упадёт и наблюдатель.', 'Поэтому уведомителя выносят на отдельный дешёвый VPS, желательно в другой локации. Оттуда он пингует ваши сервисы снаружи — ровно так, как их видят пользователи.', '- Внешняя точка обзора — видите то же, что и клиенты.
- Независимость — падение объекта не выключает мониторинг.
- Дёшево — уведомителю хватает младшего тарифа.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота-уведомителяОтправка алерта в Telegram через curl
['Отправить сообщение боту можно одним запросом к Bot API — никакой библиотеки не нужно. Создайте бота у @BotFather, узнайте свой chat_id и проверьте отправку:', 'BOT_TOKEN=\'123456:AA...\'\nCHAT_ID=\'100500\'\ncurl -s "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \\\n --data-urlencode "chat_id=${CHAT_ID}" \\\n --data-urlencode "text=Тест: уведомитель на связи"', 'Этого достаточно, чтобы встроить алерты в любой bash-скрипт мониторинга.']
Скрипт мониторинга сайтов
['Простой health-check: проверяем HTTP-код и шлём алерт только при проблеме. Флаг-файл не даёт спамить одинаковыми сообщениями каждую минуту.', '#!/usr/bin/env bash\nset -euo pipefail\nsource /opt/notifier/.env # BOT_TOKEN, CHAT_ID\nURL=\'https://example.com/health\'\nFLAG=\'/tmp/notifier_down\'\n\nnotify() {\n curl -s "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \\\n --data-urlencode "chat_id=${CHAT_ID}" \\\n --data-urlencode "text=$1" >/dev/null\n}\n\ncode=$(curl -s -o /dev/null -w \'%{http_code}\' --max-time 10 "$URL" || echo 000)\nif [ "$code" != "200" ]; then\n [ -f "$FLAG" ] || notify "🔴 $URL недоступен (код $code)"\n touch "$FLAG"\nelse\n if [ -f "$FLAG" ]; then notify "🟢 $URL снова работает"; rm -f "$FLAG"; fi\nfi', 'sudo mkdir -p /opt/notifier\nsudo mv check.sh /opt/notifier/ && sudo chmod +x /opt/notifier/check.sh']
Таймер systemd вместо cron
['Таймеры systemd надёжнее cron: у них есть логи, зависимости и защита от наложений запусков. Создаём service и timer:', "sudo tee /etc/systemd/system/notifier.service >/dev/null <<'EOF'\n[Unit]\nDescription=Site health check\n\n[Service]\nType=oneshot\nExecStart=/opt/notifier/check.sh\nEOF", "sudo tee /etc/systemd/system/notifier.timer >/dev/null <<'EOF'\n[Unit]\nDescription=Run health check every minute\n\n[Timer]\nOnBootSec=1min\nOnUnitActiveSec=1min\n\n[Install]\nWantedBy=timers.target\nEOF", 'sudo systemctl daemon-reload\nsudo systemctl enable --now notifier.timer\nsystemctl list-timers notifier.timer']
Что ещё стоит мониторить
['Тот же подход расширяется на любые метрики самого сервера — место на диске, память, нагрузку. Пример проверки диска:', 'use=$(df / | awk \'END{gsub("%","",$5); print $5}\')\n[ "$use" -gt 90 ] && notify "⚠️ Диск заполнен на ${use}%"', '- Аптайм сайтов и API — HTTP-код и время ответа.
- Ресурсы сервера — диск, RAM, load average.
- Сертификаты TLS — алерт за 14 дней до истечения.
- SSH-входы — уведомление о новом логине.
Где брать сервер и частые ошибки
['Уведомителю нужен минимум ресурсов — младшего тарифа хватает с запасом. На MAATRIX это AMD EPYC + NVMe от $8/мес с ежедневными бэкапами, а две локации (UK и США) позволяют держать мониторинг в другой стране относительно ваших основных серверов — так вы поймаете и региональные сетевые сбои. Оплата картой РФ, СБП, криптой или токеном MAAT.', '- Уведомитель на том же сервере — не сообщит о его падении.
- Нет защиты от повторов — бот засыпет вас алертами каждую минуту.
- Малый --max-time или его отсутствие — ложные срабатывания на медленном ответе.
- cron без логов — молчаливые сбои проверки; берите systemd-таймер.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота-уведомителяЧастые вопросы
Как узнать свой chat_id?
Напишите боту любое сообщение и откройте https://api.telegram.org/bot<ТОКЕН>/getUpdates — в ответе будет поле chat.id.
Таймер systemd или cron?
Таймер systemd предпочтительнее: есть журнал в journalctl, защита от параллельных запусков и привязка к состоянию системы.
Можно ли слать алерты в группу?
Да, добавьте бота в группу и используйте её chat_id (он отрицательный). Для тем супергрупп добавьте параметр message_thread_id.