Unmanaged servers are great because they cost us less. But there are certain risks. To decrease the risks, we need some automation and of course, regular SSH to physically check what is going on. Your web host can ban you if your cloud/VPS instance create an odd, sustained increase of load average.
There are various reasons which may increase the load average. For example, a some WordPress plugin can increase the load average because of some reason which is required to investigate. An XML RPC attack (on Nginx) may increase the load average which can be quite difficult to point out. Whenever an instance is hijacked, the chance is high that it will be abused resulting paranormal increase in server load.
How We Can Get Notification Email Before Web Host Send Warning?
First, we need a command line application which most Linux and Unix OS come preinstalled. The application is known as mailutils
and has a manual page. You can run the man mailutils
command to check whether the package is installed and read that manual.
---
If mailutils
is not installed then install it by running a command like apt install mailutils
. Its size is around 24MB. When you’ll install the package, you will be prompted to set up it guided by a nice TUI. We are not discussing the configuration part (you will get that by performing a web search, or by reading the manual. It is easy but time-consuming).
If your web host does not block you from sending email then you should be able to send email from the command line just with the mail
command. Of course, there are other utilities which can perform a similar task. In any case, you should check whether your command is working to send an email.
This is the format to send email using the above tool, using a file :
1 | mail -s "An example mail sent to test" your@example.com < /path/to/file |
Just for testing, you send any plain text file. If the above thing is working, then the next thing you have to do is to run a couple of commands to check whether it can print the current load of the server:
1 2 | cat /proc/loadavg cat /proc/loadavg | awk '{print $1}' |
Using the above two things, we can write a bash script to automate the thing (this was described by Muhammed Fasal, https://fasal.cf):
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash # trig=5.00 #Get current load on the server load=`cat /proc/loadavg | awk '{print $1}'` #Check both if [[ $load > $trig ]]; then echo -e "\n\nYour server load is High. Check Immediatly\n\nServer load : $load " | mail -s "High Server Load [$load]" user@example.com fi |
Save the file with a name such as loadcheck.sh
and make it executable :
1 | chmod +x loadcheck.sh |
Now, you can open crontab :
1 | sudo crontab -e |
and set a cronjob :
1 | */2 * * * * /bin/bash /path/to/loadcheck.sh |
The above cron job is for monitoring every 2 minutes. It may be too much for you. You can set it to 12 hourly.