Скрипт уведомления о высокой нагрузке

Для мониторинга серверов мы используем 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

Leave a Reply