Отправка сообщения в Telegram при высокой нагрузке сервера

Мониторинг нагрузки сервера - критически важная задача для системных администраторов. Когда сервер испытывает чрезмерную нагрузку, это может привести к замедлению работы сервисов или полному отказу. В этой статье мы рассмотрим, как настроить автоматическую отправку уведомлений в Telegram при превышении порогового значения нагрузки.

Подготовка Telegram бота

Создание бота

  1. Откройте Telegram и найдите @BotFather
  2. Отправьте команду /newbot и следуйте инструкциям
  3. Получите API-токен для вашего нового бота

Получение Chat ID

Существует несколько способов получить Chat ID:

  1. Через getUpdates API:
    curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates" | jq
  2. Используя специальных ботов вроде @userinfobot
  3. Через групповые чаты (для этого нужно добавить бота в группу)

Настройка скрипта мониторинга

Создание скрипта check_load.sh

Скрипт будет проверять среднюю нагрузку за 5 минут и сравнивать с заданным порогом.

#!/bin/bash
# Конфигурационные параметры
BOT_TOKEN="YOUR_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
LOAD_THRESHOLD=80  # Пороговое значение нагрузки
HOSTNAME=$(hostname)
LOG_FILE="/var/log/load_monitor.log"

# Получаем среднюю нагрузку за 5 минут
LOAD=$(cat /proc/loadavg | awk '{print $2}')

# Преобразуем в целое число (удаляем десятичную часть)
LOAD_INT=$(printf "%.0f" "$LOAD")

# Логируем текущую нагрузку
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Текущая средняя нагрузка: $LOAD" >> "$LOG_FILE"

# Проверяем превышение порога
if [ "$LOAD_INT" -gt "$LOAD_THRESHOLD" ]; then
    MESSAGE="🚨 ВНИМАНИЕ! Высокая нагрузка на сервере $HOSTNAME
    ▫️ Текущая нагрузка: $LOAD
    ▫️ Пороговое значение: $LOAD_THRESHOLD
    ▫️ Время: $(date '+%Y-%m-%d %H:%M:%S')"
    
    echo "$MESSAGE" >> "$LOG_FILE"
    
    # Отправляем сообщение в Telegram
    curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
        -d chat_id="$CHAT_ID" \
        -d text="$MESSAGE" \
        -d parse_mode="Markdown"
fi

Настройка автоматического выполнения

Установка прав и тестирование

sudo chmod +x /usr/local/bin/check_load.sh
sudo /usr/local/bin/check_load.sh

Добавление в cron

Для регулярной проверки (например, каждые 10 минут):

sudo crontab -e

Добавьте строку:

*/10 * * * * /usr/local/bin/check_load.sh

Дополнительные меры мониторинга

Мониторинг других параметров

Вы можете расширить скрипт для проверки:

  • Использования памяти
  • Свободного места на диске
  • Количества активных процессов
  • Температуры процессора

Пример расширенной проверки:

# Проверка свободной памяти
FREE_MEM=$(free -m | awk '/Mem:/ {print $4}')
if [ "$FREE_MEM" -lt 100 ]; then
    # Добавить предупреждение о нехватке памяти
fi

# Проверка места на диске
DISK_USAGE=$(df -h / | awk '/\// {print $5}' | tr -d '%')
if [ "$DISK_USAGE" -gt 90 ]; then
    # Добавить предупреждение о нехватке места
fi

Обработка ошибок и логирование

Рекомендуется добавить в скрипт обработку ошибок:

  • Проверку доступности Telegram API
  • Логирование неудачных попыток отправки
  • Ограничение частоты отправки уведомлений

Заключение

Настроенная система мониторинга нагрузки сервера с уведомлениями в Telegram позволит оперативно реагировать на критические ситуации. Вы можете дополнительно настроить скрипт для мониторинга других важных параметров сервера и интегрировать более сложные системы оповещения.

Для более продвинутого мониторинга можно рассмотреть специализированные системы, такие как Zabbix, Prometheus или Nagios, которые предлагают более гибкие возможности настройки уведомлений и визуализации данных.