Я отслеживаю сотни серверов, как выделенных, так и виртуальных, используя следующий скрипт:
#!/бин/баш
PATH=/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
порог=90
serverip=$($(какой ifconfig) | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9 ]*\.){3}[0-9]*' | grep -v '127.0.0.1' | голова -1)
memused=$(free | awk '/Mem/{printf("Использование ОЗУ: %.2f%\n"), $3/$2*100}' | awk '{print $3}' | cut -d"." - f1)
если [ "$ memused" -gt "$ порог" ]
тогда
CTIME=$(дата +%Y-%m-%d-%H%M%S)
ps aux > /root/.example/logs/lowmem-"${CTIME}"-ps.log
top -n 1 -o %MEM -c > /root/.example/logs/lowmem-"${CTIME}"-top.log
бесплатно -m > /root/.example/logs/lowmem-"${CTIME}"-free.log
mysqladmin proc -v статус > /root/.example/logs/lowmem-"${CTIME}"-mysqlproc.log
bash /example/general/slack.sh "#server-alerts" ":warning: $(hostname) - ${serverip} - Использование памяти достигло 90% - Проверьте журналы /root/.example/logs/lowmem-${ CTIME} \n \`\`\`$(head -1 /root/.example/logs/lowmem-"${CTIME}"-free.log) \n $(head -2 /root/.example/logs /lowmem-"${CTIME}"-free.log | tail -1) \n $(tail -1 /root/.example/logs/lowmem-"${CTIME}"-free.log)\`\` \`"
кронтаб -л | grep -v '/пример/mon_mem.sh' | кронтаб -
спать 900
кронтаб -л | { кот; echo "* * * * * bash /example/mon_mem.sh"; } | кронтаб -
фи
Хотя в большинстве случаев это работает, мы случайным образом получаем ложные срабатывания, это совершенно случайные серверы и они не согласуются с каждым сервером, поэтому один сервер может срабатывать, но затем не срабатывать снова (ложно)
Пример ложного срабатывания:
общее количество использованных бесплатных общих баффов/доступных кешей
Мем: 2048 345 1580 27 122 1674
Обмен: 2048 0 2048
С этого сервера пришло предупреждение, но вы видите, что используется только 345 МБ.