Мониторинг нагрузки сервера - критически важная задача для системных администраторов. Когда сервер испытывает чрезмерную нагрузку, это может привести к замедлению работы сервисов или полному отказу. В этой статье мы рассмотрим, как настроить автоматическую отправку уведомлений в Telegram при превышении порогового значения нагрузки.
Подготовка Telegram бота
Создание бота
- Откройте Telegram и найдите @BotFather
- Отправьте команду
/newbot
и следуйте инструкциям - Получите API-токен для вашего нового бота
Получение Chat ID
Существует несколько способов получить Chat ID:
- Через getUpdates API:
curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates" | jq
- Используя специальных ботов вроде @userinfobot
- Через групповые чаты (для этого нужно добавить бота в группу)
Настройка скрипта мониторинга
Создание скрипта 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, которые предлагают более гибкие возможности настройки уведомлений и визуализации данных.