Monit Monitoring Simplified. You’re going through this tutorial in less than 20 minutes which will explain how to get your server instance monitored using Monit. Start your countdown watch.
This tutorial below assumes you’re running these:
- PHP 7.0
- nginx/1.10.0
- mysql Ver 14.14 Distrib 5.7.13
- Ubuntu Server LTS 16.04
Under these assumptions:
- Your hostname is
khophi.co
- Your domain name is
maindomain.ext
- Subdomain for monitoring monit via web interface is
yoursubdomain.maindomain.ext
In the beginning:
sudo apt install postfix mailutils
You will come across this:
Select Internet Site
then
Done with the UI settings for now. 2 minutes 30 seconds left
monitrc
configurations
Step One
When you open the file below to edit, add this:
# enter this $ sudo nano /etc/aliases
# /etc/aliases postmaster: root root: youremailaddress@gmail.com monit: root
Update the newly added aliases
as:
$ sudo newaliases
At this point, a simple message to the root@localhost
will is forwarded to youremailaddress@gmail.com
too.
Try this:
$ echo "Test Message" | mail -s "I am subject" root
Monit Monitoring Configuring
Go:
$ sudo apt-get install monit
Then when you open the
$ sudo nano /etc/monit/monitrc
Uncomment these on lines 76, 108 to 119 and 162 respectively ( line positions will likely be these, they were for me )
set mailserver localhost set mail-format { from: monit@$HOST subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, Monit } set alert root@localhost not on { instance, action } check system example.com if loadavg (1min) > 4 then alert if loadavg (5min) > 2 then alert if memory usage > 75% then alert if swap usage > 25% then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 30% then alert if cpu usage (wait) > 20% then alert
Then add this part at the bottom of your file, just to check when storage is running full and notify you.
check filesystem rootfs with path / if space usage > 90% then alert
Save the file with Ctrl + X.
[wp_ad_camp_1]
Welcome back from the short commercial break. Now, open again
$ sudo nano /etc/monit/monitrc
then comment out the line on 293
# include /etc/monit/conf-enabled/*
Save the file and exit
Monitoring Our Server installation
Create a new file called lemp-instance
using
$ sudo nano /etc/monit/conf.d/lemp-instance
Then add:
check process nginx with pidfile /var/run/nginx.pid group www-data start program = "/usr/sbin/nginx -g 'daemon on; master_process on;'" stop program = "/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid" # if failed host khophi.co port 80 protocol http then restart # if 5 restarts within 5 cycles then timeout check process mysql with pidfile /var/run/mysqld/mysqld.pid start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed unixsocket /var/run/mysqld/mysqld.sock then restart if 5 restarts within 5 cycles then timeout check process php7.0-fpm with pidfile /var/run/php/php7.0-fpm.pid start program = "/etc/init.d/php7.0-fpm start" stop program = "/etc/init.d/php7.0-fpm stop" if failed host khophi.co port 80 protocol http then restart if 5 restarts within 5 cycles then timeout check file nginx-error with path /var/log/nginx/error.log if match "^timed out" then alert
NOTE: Be sure where your
.pid
files are located on your instances, especially with php7. I recommend you verify the .pid
referenced in there are actually there.
Save the file, then do
$ sudo monit -t
If all is okay, then proceed. You should get a message saying: Control file syntax OK
if not, track the error and fix. For me, commenting out the `/etc/monit/conf-enabled/` solved an inclusion error I had.
Then
$ sudo service monit reload
Check the health of the monit instance:
$ sudo systemctl status monit.service
If you see greens, and no error messages, you’re on track – your monit is monitoring nicely
Allow the viewing of monitoring via terminal and web. Uncomment these in the file
$ sudo nano /etc/monit/monitrc
uncomment these on lines 149 to 152
set httpd port 2812 and use address localhost allow localhos allow crazyUsername:'aV3riS7hronge.paasweirdD'
Save file. Then…
See monitoring status after restarting monit service
$ sudo service monit restart $ sudo monit status
See status in Web
You want to see the status from monit when you visit a URL, put this…
server { listen 80; server_name yoursubdomain.yourmaindomain.ext; location / { proxy_pass http://127.0.0.1:2812/; proxy_set_header Host $host; proxy_ignore_client_abort on; } }
… in your file
$ sudo nano /etc/nginx/sites-available/monit
Save, then attached to enabled sites in Nginx as:
$ sudo ln -s /etc/nginx/sites-available/monit /etc/nginx/sites-enabled/
Check Nginx conf for errors:
$ sudo nginx -t
If all is fine, then proceed.
Domain Name Configuration
Visit your DNS configuration area. I use Digital Ocean and follow the pattern on screen
Then a CNAME
Wait for a couple of minutes for everything to settle with DNS routing.
Try visiting yoursubdomain.maindomain.ext and you should be faced with a login form. After login, you’ll be blessed with this:
[wp_ad_camp_1]