Как через Bash-скрипт узнать текущий Load Average сервера и отправить алерт в Telegram, если значение выше 5.0?
Для мониторинга Load Average сервера и отправки алерта в Telegram можно написать простой Bash-скрипт. Ниже — подробное объяснение и готовое решение.
**Что такое Load Average?**
Load Average — это среднее количество процессов, ожидающих выполнения на процессоре, за последние 1, 5 и 15 минут. Значение выше количества ядер CPU обычно сигнализирует о перегрузке сервера.
**Получение Load Average в Bash**
Команда `uptime` выводит строку вида: `load average: 0.45, 0.32, 0.28`. Чтобы извлечь первое значение (за 1 минуту), используется:
bash
LOAD=$(uptime | awk -F’load average:’ ‘{print $2}’ | awk -F’,’ ‘{print $1}’ | tr -d ‘ ‘)
Альтернативно можно читать из `/proc/loadavg`:
bash
LOAD=$(awk ‘{print $1}’ /proc/loadavg)
**Сравнение с порогом**
Bash не поддерживает сравнение дробных чисел напрямую, поэтому используется `bc` или `awk`:
bash
if (( $(echo «$LOAD > 5.0» | bc -l) )); then
# отправить алерт
fi
**Отправка сообщения в Telegram**
Для отправки нужны: токен бота (получить у @BotFather) и chat_id (узнать через API). Используется метод `sendMessage`:
bash
curl -s -X POST «https://api.telegram.org/bot/sendMessage»
-d chat_id=»»
-d text=»⚠️ ALERT: Load Average = $LOAD на $(hostname)»
**Полный скрипт:**
bash
#!/bin/bash
TOKEN=»ВАШ_ТОКЕН»
CHAT_ID=»ВАШ_CHAT_ID»
THRESHOLD=5.0
LOAD=$(awk ‘{print $1}’ /proc/loadavg)
if (( $(echo «$LOAD > $THRESHOLD» | bc -l) )); then
MESSAGE=»⚠️ ALERT на $(hostname): Load Average = $LOAD (порог: $THRESHOLD)»
curl -s -X POST «https://api.telegram.org/bot${TOKEN}/sendMessage»
-d chat_id=»${CHAT_ID}»
-d text=»${MESSAGE}»
fi
**Автоматизация через cron**
Добавьте задачу в crontab для проверки каждую минуту:
* * * * * /path/to/check_load.sh
Запустите `crontab -e` и добавьте строку выше.
**Рекомендации:**
— Добавьте логирование в файл для истории алертов.
— Используйте флаг-файл (`/tmp/alert_sent`), чтобы не спамить одинаковыми сообщениями каждую минуту.
— Проверяйте Load Average за 5 или 15 минут для более стабильных показателей.
— Убедитесь, что на сервере установлен `bc` (`apt install bc` или `yum install bc`).
Такой скрипт позволяет оперативно реагировать на перегрузку сервера и получать уведомления прямо в мессенджер.
