Следите за своим VPS, не вставая с дивана! Рассказываем, как создать Telegram-бота на Python, который вовремя сообщит о перегрузке CPU, нехватке оперативной памяти или заполнении диска на сервере.
Введение
Серверы в продакшене часто сталкиваются с неожиданными нагрузками, нехваткой ресурсов или другими сбоями, которые могут привести к простоям и потерям. Чтобы не сидеть часами у монитора и не проверять состояние вручную, можно настроить автоматическую систему оповещений, которая сразу предупредит о проблемах.
В статье рассказали, как сделать Telegram‑бота на Python для мониторинга сервера, который будет отслеживать загрузку процессора, памяти и дискового пространства и сразу отправлять уведомления в мессенджер. Объяснили, как подготовить окружение, написать скрипт и настроить постоянную работу бота на сервере.
Как работают уведомления через Telegram API
Telegram‑боты используют для общения с пользователем API — набор правил, который позволяет программам обмениваться сообщениями. Когда ваш бот отправляет уведомление, он фактически делает HTTP‑запрос к серверам Telegram с информацией, что нужно доставить сообщение конкретному пользователю или чату.
Можно настроить бота двумя способами — через опрос сервера (polling) или через webhooks. В первом случае бот регулярно проверяет, есть ли новые сообщения или команды. Во втором случае сервер Telegram сам отправляет уведомление вашему боту, когда происходит событие. Для мониторинга сервера удобнее использовать polling — он проще в настройке и не требует публичного IP или сертификатов.
Telegram доступен и удобен, есть на всех популярных платформах. С API даже новичок может быстро сделать своего бота. В сравнении с e-mail или SMS, Telegram‑уведомления приходят мгновенно и не теряются в спаме. К тому же можно легко расширять функционал, например, добавлять кнопки управления, отправлять графики или логи.
Вместо того, чтобы строить сложную систему оповещений, достаточно запустить небольшой Python‑скрипт на сервере. Он соберёт данные о загрузке CPU, памяти и диске, и если что‑то выйдет за рамки допустимого, бот отправит вам уведомление.
Настройка окружения и создание бота
Для начала нужно создать самого бота в Telegram и подготовить сервер, чтобы он смог запускать скрипт. Всё просто — сначала зайдите в Telegram и найдите бота с именем BotFather. Это официальный помощник для создания новых ботов. Напишите ему команду /newbot, придумайте имя и уникальное имя пользователя для вашего бота. В ответ вы получите токен — длинную строку, похожую на пароль. Она понадобится, чтобы ваш скрипт мог обращаться к Telegram API.
Дальше подключитесь к вашему серверу по SSH и создайте там виртуальное окружение для Python. Это важно, чтобы изолировать зависимости и не мешать другим программам. Выполните команду:
python3 -m venv venv
Затем активируйте окружение:
source venv/bin/activate
После этого установите необходимые библиотеки — python-telegram-bot для работы с Telegram и psutil для получения данных о состоянии сервера:
pip install python-telegram-bot psutil
Теперь окружение готово. Вы создали бота, настроили Python и установили всё, что нужно для мониторинга.
Сбор данных и отправка уведомлений
Когда окружение готово, нужно написать скрипт, который собирает данные о состоянии сервера и отправляет предупреждения в Telegram, если показатели выходят за пределы нормы. Для этого контролируют загрузку процессора, свободную оперативную память и свободное место на диске.
Сначала импортируйте модули psutil для системных метрик и Bot из Telegram для отправки сообщений. Создайте объект бота, передав ему токен, который получили у BotFather:
bot = Bot(token='ваш_токен_бота')
Далее напишите функцию, которая будет проверять три параметра.
Для процессора используется psutil.cpu_percent(interval=1) — возвращает процент использования CPU за одну секунду. Если он выше 80 %, бот отправит предупреждение с текстом, например, «Загрузка CPU 85.3%».
Аналогично проверяется память — с помощью psutil.virtual_memory() вычисляется, сколько процентов оперативной памяти осталось свободной. Если она падает ниже 15 %, отправляется предупреждение.
Для диска используется psutil.disk_usage('/'), чтобы узнать, сколько места осталось на основном разделе. Если свободного места меньше 10 %, вы получите сообщение.
Вся логика проверки упакована в функцию, которая вызывается в бесконечном цикле с паузой в 60 секунд.
Ниже пример такого скрипта. Он автоматически отправляет уведомления, если сервер перегружен или на нём заканчивается память или место.
import time
import psutil
from telegram import Bot
TOKEN = 'ваш_токен_бота'
CHAT_ID = 'ваш_chat_id'
bot = Bot(token=TOKEN)
def check_system():
cpu = psutil.cpu_percent(interval=1)
memory = psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
disk = psutil.disk_usage('/').free * 100 / psutil.disk_usage('/').total
if cpu > 80:
bot.send_message(chat_id=CHAT_ID, text=f'⚠️ Загрузка CPU {cpu:.1f}%')
if memory < 15:
bot.send_message(chat_id=CHAT_ID, text=f'⚠️ Свободной памяти осталось {memory:.1f}%')
if disk < 10:
bot.send_message(chat_id=CHAT_ID, text=f'⚠️ Места на диске осталось {disk:.1f}%')
while True:
check_system()
time.sleep(60)
Таким образом вы получаете простого, но полезного бота, который помогает вовремя реагировать на проблемы сервера. Чтобы избежать повторяющихся сообщений, можно усложнить логику, например, отправлять предупреждения только при первом обнаружении проблемы и после её устранения.
Поддержка, логирование и инструкции по CMS
Чтобы бот работал без сбоев и вы всегда были в курсе важных событий, стоит организовать логирование — запись всех отправленных сообщений и ошибок в отдельный файл. Для этого используйте встроенный модуль Python logging. Он поможет отследить, когда и какие уведомления отправлялись, а если скрипт упадёт, вы сразу увидите причину.
Добавьте в начало скрипта такую настройку:
import logging
logging.basicConfig(filename='bot.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
В функциях отправки сообщений после каждого вызова bot.send_message вызовите:
logging.info('Отправлено сообщение: текст сообщения')
Если возникает исключение, например, проблемы с сетью, добавьте блок try-except, чтобы поймать ошибку и записать её в лог:
try:
bot.send_message(...)
except Exception as e:
logging.error(f'Ошибка при отправке сообщения: {e}')
Так вы не потеряете важные данные и сможете понять, что произошло при сбое.
Если у вас есть сайт или лендинг на CMS, например, WordPress, можно расширить мониторинг — добавить проверку доступности сайта. Это делается простым HTTP-запросом с помощью библиотеки requests. Если сервер не отвечает или возвращает ошибку, бот сразу отправит сигнал тревоги.
Убедитесь, что в вашем скрипте есть функция, которая раз в несколько минут делает запрос к URL вашего сайта. Если статус не 200, сообщите об этом в поддержку Telegram. Так вы сразу узнаете о сбоях и успеете среагировать до того, как это заметят пользователи.
Итоги
Настроить Telegram-бота для мониторинга сервера — задача, которая реально помогает держать всё под контролем, даже если вы не сидите постоянно у монитора. Такой бот становится настоящим сторожем, который не пропустит важные сбои и вовремя даст знать, что нужно вмешаться.
Читайте в блоге:
- Безопасность Telegram-бота на VPS в 2025 году: профессиональная защита от атак и утечек данных
- Настройка автозапуска Python-скриптов на сервере: cron, systemd, nohup
- Лучшие инструменты мониторинга сервера на Ubuntu 24.04: Netdata, Glances, htop