Как настроить уведомления о падении сервера в Telegram
Хочу себе такие же кнопкиКак настроить уведомления о падении сервера в Telegram
Что вы получите:
- Автоматическое сообщение в ваш Telegram‑чат в момент, когда ваш VDS‑сервер перестаёт отвечать.
- Понимание, как работает Telegram Bot API и почему это надёжный способ оповещения.
- Готовый скрипт, который можно запустить сразу после установки.
1. Почему Telegram — лучший канал оповещения
| Плюс | Что это значит для вас |
|---|---|
| Мгновенность | Сообщение приходит в секунды после обнаружения проблемы. |
| Доступность | Вы получаете уведомление на любой устройстве: телефон, планшет, ПК. |
| Никаких расходов | Bot‑API бесплатен, не требуется сторонних сервисов. |
| Гибкость | Можно отправлять текст, фото, файлы, даже кнопки‑действия. |
Представьте, что ваш сервер — это «дом», а Telegram — это «домофон». Как только в доме появляется непрошенный гость (сервис падает), домофон сразу же сигнализирует вам, чтобы вы могли быстро отреагировать.
2. Что понадобится
| Компонент | Описание | Как получить |
|---|---|---|
| Telegram‑бот | Программный «посредник», который будет отправлять сообщения. | Создаёте через @BotFather. |
| Токен бота | Уникальная строка, позволяющая обращаться к Bot‑API. | Выдаётся BotFather после создания бота. |
| Chat‑ID | Идентификатор чата (личного или группы), куда будет приходить сообщение. | Узнаётся через простой запрос к API. |
| Скрипт‑мониторинг | Bash‑скрипт, проверяющий доступность сервера и вызывающий API. | Пишем вручную, копируем в /usr/local/bin. |
| cron‑задача | Планировщик, который будет запускать скрипт каждые N минут. | Настраиваем через crontab -e. |
Все эти элементы работают в паре: скрипт → Telegram Bot API → ваш чат.
3. Создаём Telegram‑бота
- Откройте диалог с @BotFather в Telegram.
- Отправьте команду
/newbot. - Введите имя бота, например VDSMonitorBot.
- Введите юзернейм, который должен заканчиваться на
bot, напримерvdsmonitor_bot.
BotFather ответит:
Congratulations! Bot was created.
Use this token to access the HTTP API:
123456789:ABCdefGhIJKlmNoPqrSTUvwxYZ
Сохраните токен (строку из цифр и букв). Он понадобится дальше.
4. Узнаём ваш Chat‑ID
Самый простой способ – написать боту любое сообщение, а затем выполнить запрос:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates"
Замените <YOUR_TOKEN> на токен из предыдущего шага. В ответе будет JSON, где в поле chat.id находится ваш Chat‑ID. Пример:
{
"ok": true,
"result": [
{
"update_id": 123456789,
"message": {
"message_id": 1,
"from": { "id": 987654321, "is_bot": false, "first_name": "Иван", "username": "ivan" },
"chat": { "id": 987654321, "first_name": "Иван", "username": "ivan", "type": "private" },
"date": 1700000000,
"text": "Привет"
}
}
]
}
В данном случае chat.id = 987654321. Если вы хотите получать уведомления в группу, добавьте бота в группу, дайте ему права писать, и выполните тот же запрос – в ответе будет chat.id группы (отрицательное число).
5. Пишем скрипт‑мониторинг
Создайте файл /usr/local/bin/vds_monitor.sh и сделайте его исполняемым:
sudo nano /usr/local/bin/vds_monitor.sh
sudo chmod +x /usr/local/bin/vds_monitor.sh
Содержимое скрипта:
#!/bin/bash
# ==============================
# Конфигурация
# ==============================
BOT_TOKEN="YOUR_TOKEN_HERE" # замените на ваш токен
CHAT_ID="YOUR_CHAT_ID_HERE" # замените на ваш chat_id
SERVER_IP="YOUR_SERVER_IP" # IP или домен вашего VDS
PORT=22 # порт, который проверяем (по умолчанию SSH)
TIMEOUT=5 # секунд, сколько ждать ответа
# ==============================
# Функция отправки сообщения в Telegram
# ==============================
send_telegram() {
local MESSAGE=$1
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${MESSAGE}" \
-d parse_mode="HTML"
}
# ==============================
# Проверка доступности сервера
# ==============================
if timeout ${TIMEOUT} bash -c "cat < /dev/null > /dev/tcp/${SERVER_IP}/${PORT}" 2>/dev/null; then
# Сервер живой – ничего не делаем
exit 0
else
# Сервер не отвечает – отправляем уведомление
MESSAGE="<b>⚠️ Сервер недоступен!</b>%0AIP: ${SERVER_IP}%0APорт: ${PORT}%0AВремя: $(date '+%Y-%m-%d %H:%M:%S')"
send_telegram "${MESSAGE}"
fi
Пояснения к коду
| Строка | Что делает |
|---|---|
timeout ${TIMEOUT} bash -c "cat < /dev/null > /dev/tcp/${SERVER_IP}/${PORT}" |
Пытается открыть TCP‑соединение к указанному IP и порту. Если успевает — сервер живой. |
send_telegram() |
Оборачивает вызов Bot‑API, позволяет легко менять формат сообщения. |
MESSAGE="<b>⚠️ Сервер недоступен!</b>..." |
Форматируем HTML‑сообщение (жирный шрифт, эмодзи). |
exit 0 |
Если всё в порядке, скрипт завершается без ошибок, чтобы cron не посылал лишние письма. |
Важно: замените
YOUR_TOKEN_HERE,YOUR_CHAT_ID_HEREиYOUR_SERVER_IPна реальные значения.
6. Тестируем скрипт вручную
/usr/local/bin/vds_monitor.sh
- Если сервер доступен, ничего не произойдёт.
- Если вы умышленно отключите порт (например,
sudo ufw deny 22), в Telegram придёт сообщение.
Проверьте, что сообщение выглядит так:
⚠️ Сервер недоступен!
IP: 123.45.67.89
Порт: 22
Время: 2026-05-17 14:32:10
Если всё работает – переходим к автоматизации.
7. Автоматизируем проверку с помощью cron
Откройте таблицу cron для пользователя root (или вашего пользователя, если скрипт находится в его домашней папке):
sudo crontab -e
Добавьте строку:
*/5 * * * * /usr/local/bin/vds_monitor.sh >/dev/null 2>&1
Эта запись означает: каждые 5 минут запускать скрипт. Вывод отправляется в /dev/null, чтобы не заполнять журнал.
Совет: если у вас несколько сервисов (HTTP, MySQL, Redis) – создайте отдельные функции в скрипте или отдельные скрипты, каждый со своим портом, и добавьте их в cron.
8. Расширяем функционал (по желанию)
| Возможность | Как добавить |
|---|---|
| Отправка скриншота | Сохраните вывод top в файл, отправьте через sendDocument. |
| Кнопка «Перезапустить» | Добавьте inline_keyboard в параметр reply_markup. При нажатии ваш сервер получит callback‑запрос, который можно обработать отдельным скриптом. |
| Множественные получатели | Укажите несколько chat_id, разделяя запятой, или создайте группу и добавьте туда всех участников. |
Эти возможности позволяют превратить простое уведомление в полноценную панель управления.
9. Полезные ссылки
- Официальная документация Bot API: https://core.telegram.org/bots/api?partner=5095
- Пример готового скрипта на GitHub: https://github.com/yourrepo/vds-monitor?partner=5095
Помните: все ссылки, ведущие на vdsina.ru, должны завершаться
?partner=5095. Если вы хотите добавить ссылку на наш сервис, используйте: https://vdsina.ru?partner=5095
Практика для закрепления
- Создайте собственного бота и получите токен. Проверьте, что бот может отправлять простое сообщение в ваш чат.
- Измените скрипт так, чтобы он проверял не только порт 22, но и HTTP‑сервис на порту 80, отправляя отдельные сообщения для каждого.
- Настройте cron так, чтобы проверка происходила каждые 2 минуты, а не каждые 5. Убедитесь, что в журнале нет ошибок.
- Сымитируйте падение: временно заблокируйте порт 22 (
sudo ufw deny 22) и проверьте, что в Telegram пришло уведомление. Затем разблокируйте и убедитесь, что уведомление больше не приходит. - Добавьте кнопку «Перезапустить» в сообщение. При её нажатии скрипт должен выполнить
sudo systemctl restart sshd. Опишите, какие шаги нужны для обработки callback‑запроса (можно использоватьnginx+phpилиpython‑скрипт).
Выполняя эти упражнения, вы полностью освоите процесс настройки уведомлений о падении сервера в Telegram и сможете адаптировать его под любые свои задачи. Удачной автоматизации!
Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат