3

I want to monitor the CPU and RAM usage on my remote server and set up a notification system which notifies me when the RAM usage is high and automatically kill that process.

I tried the Nagios plugin but there were some errors.

Any alternatives to that?

Edit: please don't suggest htop, free, top and the like as I am not going to keep ssh'ing into the remote server and check its health repeatedly!

1
  • What errors did you get with the Nagios plugin? And it looks like you don't want to just monitor, but take action as well.
    – muru
    Apr 18, 2015 at 11:36

2 Answers 2

1

Are you familiar with top? Shows you CPU and RAM usage (and more) for each process and also the total sum.

you can also run top -u USER to only see a specific user's processes. just start with running top with no arguments. press q in order to quit.

EDIT

and for using within a script: try top -b -n1 for running in non interactive mode. you can then parse the data with head, sed and grep however you like.

2
  • I added some more details to the question a little bit Apr 18, 2015 at 13:05
  • obviously you don't want the interactive mode, you want to run a cron that parses the output of top -b -n1 and kills the over consuming process. sorry if that doesn't help you, mate.
    – talz
    Apr 18, 2015 at 15:00
1

I create some custom script. Is not complete solution for you but maybe help.

#!/bin/bash

#we use output from "uptime" and "w" on every 5 min

UPTIME=`uptime`;
W=`w`;
RAM=`free -m`;
PS=`ps auxf | sort -nr -k 4 | head -15`
DATUM=`date`;
sleep 3
MYSQL=`mysqladmin -u root -pmz567sQld processlist;`
sleep 3
SYN=`netstat -natp | grep SYN`
sleep 3
HTTPD=`pgrep httpd | wc -l`
sleep 3

echo "######################################" >> /var/log/load-result/load_log
echo "$DATE" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "UPTIME:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$UPTIME" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "W COMMAND:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$W" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "FREE RAM:" >> /var/log/load-result/load_log
echo "$RAM" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "TOP 10 processes:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$PS" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "MYSQL PROCESSLIST:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$MYSQL" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "POTENTIAL ATTACKERS:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$SYN" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "NUMBER OF HTTPD PROCESS (currently maxclients are 64):" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "$HTTPD" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "CURRENTLY OPENED HTTPD CONNECTIONS:" >> /var/log/load-result/load_log
echo "" >> /var/log/load-result/load_log
echo "#####################################" >> /var/log/load-result/load_log

after that also add crontab rule to send log to some mail on every 5 min with log file. Also run script on every 5 min

sudo nano /etc/crontab

*/5 * * * * sh /path_to_script/name_of_script     
*/5 * * * * mail -s "insert_subject" some_adress@domain < /var/log/load-result/load_log

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.