Найти в Дзене

«Мониторинг сервера через Telegram‑бота: CPU, RAM, количество игроков».

Пошаговая инструкция по созданию Telegram‑бота для мониторинга сервера. bash pip install python-telegram-bot psutil server_monitor/
├── config.py
├── utils.py
└── bot.py 1. config.py — хранение токена: python BOT_TOKEN = "ваш_токен_от_BotFather" 2. utils.py — функции сбора данных: python import psutil
import subprocess
def get_cpu_load():
"""Возвращает загрузку CPU в процентах."""
return psutil.cpu_percent(interval=1)
def get_ram_usage():
"""Возвращает использование RAM в процентах и в ГБ."""
ram = psutil.virtual_memory()
used_gb = ram.used / (1024 ** 3)
total_gb = ram.total / (1024 ** 3)
percent = ram.percent
return f"{used_gb:.2f} GB / {total_gb:.2f} GB ({percent}%)"
def get_player_count():
"""
Возвращает количество игроков онлайн.
Замените команду на актуальную для вашего сервера.
Пример для TFS: grep "Player logged in" logs/server.log | wc -l
"""
try:
# Пример для игрового сервера с логами
result = subproces
Оглавление

Пошаговая инструкция по созданию Telegram‑бота для мониторинга сервера.

Шаг 1. Создание бота в Telegram

  1. Найдите в Telegram @BotFather и начните диалог.
  2. Отправьте команду /newbot.
  3. Укажите имя бота (например, Server Monitor Bot).
  4. Выберите username (должен заканчиваться на bot, например, my_server_monitor_bot).
  5. Сохраните API‑токен, который выдаст BotFather.

Шаг 2. Установка зависимостей

bash

pip install python-telegram-bot psutil

  • python-telegram-bot — библиотека для работы с Telegram API.
  • psutil — библиотека для сбора информации о системе.

Шаг 3. Структура проекта

server_monitor/
├── config.py
├── utils.py
└── bot.py

Шаг 4. Код бота

1. config.py — хранение токена:

python

BOT_TOKEN = "ваш_токен_от_BotFather"

2. utils.py — функции сбора данных:

python

import psutil
import subprocess

def get_cpu_load():
"""Возвращает загрузку CPU в процентах."""
return psutil.cpu_percent(interval=1)

def get_ram_usage():
"""Возвращает использование RAM в процентах и в ГБ."""
ram = psutil.virtual_memory()
used_gb = ram.used / (1024 ** 3)
total_gb = ram.total / (1024 ** 3)
percent = ram.percent
return f"{used_gb:.2f} GB / {total_gb:.2f} GB ({percent}%)"

def get_player_count():
"""
Возвращает количество игроков онлайн.
Замените команду на актуальную для вашего сервера.
Пример для TFS: grep "Player logged in" logs/server.log | wc -l
"""
try:
# Пример для игрового сервера с логами
result = subprocess.run(
["grep", "Player logged in", "/path/to/server/logs/server.log"],
capture_output=True, text=True
)
players = result.stdout.count("Player logged in")
return players
except Exception:
return "Не удалось определить"

3. bot.py — основной код бота:

python

from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
from config import BOT_TOKEN
from utils import get_cpu_load, get_ram_usage, get_player_count

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"🤖 Бот мониторинга сервера запущен!\n"
"Используйте команды:\n"
"/status — текущее состояние сервера\n"
"/players — количество игроков онлайн"
)

async def status(update: Update, context: ContextTypes.DEFAULT_TYPE):
cpu = get_cpu_load()
ram = get_ram_usage()
players = get_player_count()

message = (
f"🖥 **Состояние сервера**\n\n"
f"📊 **CPU**: {cpu}%\n"
f"🧠 **RAM**: {ram}\n"
f"👨‍👦‍👦 **Игроки онлайн**: {players}"
)
await update.message.reply_text(message, parse_mode='Markdown')

async def players(update: Update, context: ContextTypes.DEFAULT_TYPE):
players = get_player_count()
await update.message.reply_text(f"👨‍👦‍👦 Игроки онлайн: {players}")

def main():
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("status", status))
app.add_handler(CommandHandler("players", players))
print("Бот запущен...")
app.run_polling()

if __name__ == "__main__":
main()

Шаг 5. Настройка запуска бота

Вариант 1. Ручной запуск

  1. Запустите скрипт:

bash

python bot.py

  1. Бот будет работать, пока активен терминал.

Вариант 2. Запуск как службы (systemd)

  1. Создайте файл службы:

bash

sudo nano /etc/systemd/system/server-monitor.service

  1. Вставьте содержимое:

ini

[Unit]
Description=Telegram Server Monitor Bot
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/path/to/your/bot
ExecStart=/usr/bin/python3 bot.py
Restart=always

[Install]
WantedBy=multi-user.target

  1. Активируйте и запустите:

bash

sudo systemctl daemon-reload
sudo systemctl enable server-monitor.service
sudo systemctl start server-monitor.service

  1. Проверьте статус:

bash

sudo systemctl status server-monitor.service

Шаг 6. Тестирование бота

  1. Найдите бота в Telegram по username.
  2. Отправьте /start.
  3. Протестируйте команды:
    /status — покажет CPU, RAM и игроков;
    /players — только количество игроков.

Дополнительные функции

1. Автоматические уведомления

Добавьте в bot.py перед main():

python

async def send_alert(context: ContextTypes.DEFAULT_TYPE, message: str):
chat_id = "ваш_chat_id" # ID чата для уведомлений
await context.bot.send_message(chat_id=chat_id, text=message)

# Пример проверки нагрузки CPU
async def check_cpu_alert(context: ContextTypes.DEFAULT_TYPE):
cpu = get_cpu_load()
if cpu > 90: # Порог 90 %
await send_alert(context, f"🚨 Высокая загрузка CPU: {cpu}%")

2. Интеграция с игровым сервером

Для TFS или другого игрового сервера:

  • настройте логирование входов/выходов игроков;
  • измените get_player_count() для чтения логов или API сервера.

3. Графики нагрузки

Используйте библиотеки matplotlib или plotly для генерации графиков CPU/RAM за период.

4. Расписание отчётов

Настройте отправку ежедневного отчёта в определённое время:

python

from datetime import time

def setup_daily_report(app):
app.job_queue.run_daily(
callback=send_daily_report,
time=time(hour=9, minute=0, tzinfo=pytz.timezone('Europe/Moscow'))
)

Чек‑лист настройки

  1. [ ] Создан бот через BotFather, сохранён токен.
  2. [ ] Установлены python-telegram-bot и psutil.
  3. [ ] Написаны функции сбора данных (utils.py).
  4. [ ] Реализованы команды /start, /status, /players.
  5. [ ] Бот протестирован вручную.
  6. [ ] Настроена служба systemd (для круглосуточной работы).
  7. [ ] Протестированы уведомления (если добавлены).
  8. [ ] Проверен доступ к логам игрового сервера.
  9. [ ] Добавлены пороги алертов (опционально).
  10. [ ] Настроено расписание отчётов (опционально).

Заключение

Готовый бот:

  • отслеживает CPU и RAM в реальном времени;
  • показывает количество игроков онлайн;
  • работает круглосуточно как служба;
  • легко расширяется (алерт‑система, графики, расписание);
  • интегрируется с игровыми серверами через логи или API.