в bash, debian, monitoring, scripts

Monit — получаем список запущенных процессов

monit
Давайте разберемся как использовать Monit для получения списка запущенных процессов в системе при аномальном росте нагрузки сервера!

Переходим в каталог /etc/monit/conf.d/:

cd /etc/monit/conf.d/

Создаем файл system:

touch system

Приводим созданный файл к следующему виду:

check system localhost
if loadavg (5min) > 20 for 2 cycles then exec "/usr/local/sbin/highload"

Далее создаем исполняемый файл /usr/local/sbin/highload со следующим содержанием:

#!/bin/bash
#
# 11.07.16 by e.lebed
#
# Скрипт генерирует письмо, содержащее:
# - список процессов (сортировка по памяти)
# - список процессов (сортировка по CPU)
#

STAMP=`date +%H%M%S`
address='admin@example.com'

echo "Load Average" >> /tmp/$STAMP.tmp
top -b | head -5 >> /tmp/$STAMP.tmp 2>&1
echo >> /tmp/$STAMP.tmp

echo "Memory process list (top50)" >> /tmp/$STAMP.tmp
ps -ewwwo pid,size,command --sort -size | head -50 | awk '{ pid=$1 ; printf("%7s ", pid) }{ hr=$2/1024 ; printf("%8.2f Mb ", hr) } { for ( x=3 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' >> /tmp/$STAMP.tmp 2>&1
echo >> /tmp/$STAMP.tmp

echo "CPU process list (top50)" >> /tmp/$STAMP.tmp
ps -ewwwo pcpu,pid,user,command --sort -pcpu  | head -50 >> /tmp/$STAMP.tmp 2>&1
echo >> /tmp/$STAMP.tmp

cat /tmp/$STAMP.tmp | mail -s "Highload Report from "`hostname -f` $address

rm /tmp/$STAMP.tmp

exit 1

Не забываем выполнить:

/etc/init.d/monit reload

Теперь, если LA сервера в течении двух проверок будет превышать 20, monit запустит скрипт, в результате выполнения которого будет сгенерировано и отправлено письмо на указанный адрес. В письме будет информация о текущей нагрузке на сервер, топ-50 процессов, отсортированных по потреблению памяти и топ-50 процессов, отсортированных по потреблению CPU.

Скрипт очень просто откорректировать под свои нужды с учетом текущей нагрузки серверов.

Добавить комментарий