Реализация мониторинга системных ресурсов средствами bash/sh
Каждому администратору сервера нужно иметь какою либо реализацию мониторинга системных ресурсов сервера, таких как:
- Загрузка Центрального Процессора (CPU)
- Количество свободной виртуальной памяти (RAM)
- Свободное место на дисках
Как правило, такие системы либо стоят денег, либо они требуют определенных навыков и потраченного времени.
В данной статье, я рассмотрю «маленькую» собственную реализацию мониторинга системных ресурсов сервера.
Мониторинг памяти сервера (RAM)
Для того, чтобы узнать сколько в нашей системе используется памяти, достаточно ввести команду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
user@server:~# cat /proc/meminfo MemTotal: 4047932 kB MemFree: 2702228 kB Buffers: 193836 kB Cached: 776020 kB SwapCached: 0 kB Active: 865708 kB Inactive: 329136 kB Active(anon): 224948 kB Inactive(anon): 564 kB Active(file): 640760 kB Inactive(file): 328572 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 7999484 kB SwapFree: 7999484 kB Dirty: 28 kB Writeback: 0 kB AnonPages: 224980 kB Mapped: 28068 kB Shmem: 532 kB Slab: 88452 kB SReclaimable: 73736 kB SUnreclaim: 14716 kB KernelStack: 1096 kB PageTables: 10600 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 10023448 kB Committed_AS: 1881960 kB VmallocTotal: 34359738367 kB VmallocUsed: 284024 kB VmallocChunk: 34359444904 kB HardwareCorrupted: 0 kB AnonHugePages: 126976 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 51136 kB DirectMap2M: 4143104 kB |
В этом длинном выводе, нас интересует только 3 (три) строки:
1 2 3 |
MemFree: 2702228 kB Buffers: 193836 kB Cached: 776020 kB |
С ними мы и будем работать.
Создадим скрипт, который будет получать информацию о памяти и переводить для понятного нам вида.
1 2 3 |
user@server:~# sudo touch meminfo_data.sh Выставим права на скрипт и сделаем его исполняемым: user@server:~# sudo chmod +x meminfo_data.sh |
Теперь можно отредактировать созданный нами скрипт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
user@server:~# sudo nano meminfo_data.sh #!/bin/bash # Script for get free memory in Megabyte # Autor: Sobol Denis 2014.10.09 # Copyright Sobol Denis 2014 snakesclub@yandex.ru # *********************************************** MINMB="512" FREEKB=$[$(sed -n 2p /proc/meminfo | awk '{ print $2 }')+$(sed -n 3p /proc/meminfo | awk '{ print $2 }')+$(sed -n 4p /proc/meminfo | awk '{ print $2 }') ] USEDKB=$[$(head -n 1 /proc/meminfo | awk '{ print $2 }')-$FREEKB ] FREEMB=$[$FREEKB/1024] if (( "$FREEMB" < "$MINMB" )); then echo "Внимание! Свободной виртуальной памяти осталось $FREEMB Мб. Минимальный размер $MINMB" | mail -s "Недостаточно памяти (www.domain.com)" username@domain.com -aFrom:monitor@domain.com else echo " Свободной виртуальной памяти осталось $FREEMB Мб" fi |
В данном скрипте находится условие, при котором сравнивается заданное минимальное количество свободной виртуальной памяти с реальным её количеством, и в случае её нахватки — направляет сообщение электронной почты с данными.