Скрипт уведомления о высокой нагрузке
Для мониторинга серверов мы используем munin, но тут появилась задача получать уведомления о подскочившей нагрузке без всяких дополнительных сервисов.
В итоге набросал простенький скрипт, который по крону запускается каждые 15 минут.
Логика работы следующая:
Узнаем текущее значение LA. Берем второй значение, которое показывает нагрузку за последние 5 минут. Это позволит избежать срабатываний при резких, но коротких всплесках нагрузки. Если значение больше порогового, то ждем 30 секунд и получаем новое значение LA. Если оно не стало меньше, то получаем список процессов и отправляем уведомление по почте. Можно еще не нужные демоны остановить, чтобы ресурсы поберечь. На телефоне у меня родное приложение Gmail, которое выводит пуш-уведомление при получении такого письма.
#!/bin/bash
LOAD=`uptime | grep -o 'load average.*' | cut -c 21-24`
if [ $LOAD \> 0.9 ]; then
echo "LA more than 0.9! "
sleep 30 #
LOAD_new=`uptime | grep -o 'load average.*' | cut -c 21-24`
if [ "$LOAD" \< "$LOAD_new" ]; then
toplist=`top -b -n 1 | head -n 50`
echo "LA URGENT \r\n $toplist" | mail -s "URGENT!" "warnign@site.ru"
else
echo "no panic"
fi
fi