Как сделать Telegram‑бота на Python для мониторинга сервера

Как сделать Telegram‑бота на Python для мониторинга сервера

Следите за своим VPS, не вставая с дивана! Рассказываем, как создать Telegram-бота на Python, который вовремя сообщит о перегрузке CPU, нехватке оперативной памяти или заполнении диска на сервере.

Введение

Серверы в продакшене часто сталкиваются с неожиданными нагрузками, нехваткой ресурсов или другими сбоями, которые могут привести к простоям и потерям. Чтобы не сидеть часами у монитора и не проверять состояние вручную, можно настроить автоматическую систему оповещений, которая сразу предупредит о проблемах.

В статье рассказали, как сделать Telegram‑бота на Python для мониторинга сервера, который будет отслеживать загрузку процессора, памяти и дискового пространства и сразу отправлять уведомления в мессенджер. Объяснили, как подготовить окружение, написать скрипт и настроить постоянную работу бота на сервере.

Аренда VPS/VDS — от ₽219/месяц

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

Как работают уведомления через 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-бота для мониторинга сервера — задача, которая реально помогает держать всё под контролем, даже если вы не сидите постоянно у монитора. Такой бот становится настоящим сторожем, который не пропустит важные сбои и вовремя даст знать, что нужно вмешаться.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях