Server Monitoring With munin And monit - Page 2

4 Install And Configure monit

To install monit, we do this:

apt-get install monit

Now we must edit /etc/monit/monitrc. The default /etc/monit/monitrc has lots of examples, and you can find more configuration examples on However, in my case I want to monitor proftpd, sshd, mysql, apache, and postfix, I want to enable the monit web interface on port 2812, I want a https web interface, I want to log in to the web interface with the username admin and the password test, and I want monit to send email alerts to root@localhost, so my file looks like this:

vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: }
set alert root@localhost
set httpd port 2812 and
PEMFILE /var/certs/monit.pem
allow admin:test

check process proftpd with pidfile /var/run/
start program = "/etc/init.d/proftpd start"
stop program = "/etc/init.d/proftpd stop"
if failed port 21 protocol ftp then restart
if 5 restarts within 5 cycles then timeout

check process sshd with pidfile /var/run/
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

check process mysql with pidfile /var/run/mysqld/
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host port 3306 then restart
if 5 restarts within 5 cycles then timeout

check process apache with pidfile /var/run/
group www
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host port 80 protocol http
and request "/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout

check process postfix with pidfile /var/spool/postfix/pid/
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout

The configuration file is pretty self-explaining; if you are unsure about an option, take a look at the monit documentation:

In the apache part of the monit configuration you find this:

   if failed host port 80 protocol http
and request "/monit/token" then restart

which means that monit tries to connect to on port 80 and tries to access the file /monit/token which is /var/www/ because our web site's document root is /var/www/ If monit doesn't succeed it means Apache isn't running, and monit is going to restart it. Now we must create the file /var/www/ and write some random string into it:

mkdir /var/www/
echo "hello" > /var/www/

Next we create the pem cert (/var/certs/monit.pem) we need for the SSL-encrypted monit web interface:

mkdir /var/certs
cd /var/certs

We need an OpenSSL configuration file to create our certificate. It can look like this:

vi /var/certs/monit.cnf

# create RSA certs - Server

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO

stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Monitoria

localityName = Locality Name (eg, city)
localityName_default = Monittown

organizationName = Organization Name (eg, company)
organizationName_default = Monit Inc.

organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Dept. of Monitoring Technologies

commonName = Common Name (FQDN of your server)
commonName_default =

emailAddress = Email Address
emailAddress_default =

[ cert_type ]
nsCertType = server

Now we create the certificate like this:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl gendh 512 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 700 /var/certs/monit.pem

Afterwards we edit /etc/default/monit to enable the monit daemon. Change startup to 1 and set CHECK_INTERVALS to the interval in seconds that you would like monit to check your system. I choose 60 (seconds) so my file looks like this:

vi /etc/default/monit

# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen <>

# You must set this variable to for monit to start

# To change the intervals which monit should run uncomment
# and change this variable.

Finally, we can start monit:

/etc/init.d/monit start

Now point your browser to (make sure port 2812 isn't blocked by your firewall), log in with admin and test, and you should see the monit web interface. It should look like this:

(Main Screen)

(Apache Status Page)

Depending on your configuration in /etc/monit/monitrc monit will restart your services if they fail and send notification emails if process IDs of services change, etc.

Have fun!

5 Links

Share this page:

18 Comment(s)

Add comment


From: Anonymous at: 2006-04-23 19:39:31

Excellent, and straightforward tutorial.

Remember that the munin logs are located in /var/log/munin/

It can be a while before new graphs are generated. The default configuration will fail.

From: Anonymous at: 2006-04-23 11:42:19

Munin works just fine out of the box.

But yo must consider when graphing the cpu temp, it rises by 4C at the time munin is running, on a P3 1GHz.

My workaround is to check cpu temp 1min before munin runs an put into a clear text file :)

From: Anonymous at: 2006-05-08 16:21:44

Another application that does all this easily is Plus it also runs on windows if you need to monitor that.

From: Anonymous at: 2006-05-08 02:52:27

Dont you need to get apache to work with this? I had to edit conf.d/xxxx.conf in order to get /monitoring/ to link.


Alias /monitoring/ /var/www/
#ScriptAlias /monitoring/ /var/www/
<Directory /var/www/>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all


Then it worked fine, unless I have missed something???


From: Anonymous at: 2010-05-24 18:00:04

 Also uncomment the following lines:
       AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
require valid-user
Save and close
sudo htpasswd -c /etc/munin/munin-htpasswd admin
sudo service apache2 restart

From: Anonymous at: 2006-05-09 12:41:27

It would be nice if you also provided the links to the official sites of the applications...

From: admin at: 2006-05-10 09:37:14
From: Anonymous at: 2006-06-22 21:08:29

hi, i agree that by default that the .htaccess file didn't work on Debian Sarge. Instead i just copied what was in the file to the main configuration (apache2.conf) and enclosed it in a < Directory > container e.g. < Directory /var/www/ > AuthType Basic AuthName "Password Required" AuthUserFile /var/www/ limit GET PUT POST require valid-user < /limit > < /Directory > and then I follwed the remaining steps to make the .htpasswd file and it worked perfectly! Thanks for the great Howto!

From: Bjoern at: 2009-02-09 02:05:20

Hi there,

 another good monitoring tool in my opinion is Zabbix. Though there are plenty around, this is very interesting:


From: at: 2011-12-02 21:36:09

I run mysql as a local service with the port closed. How do I configure monit for that?

From: Anonymous at: 2006-05-08 15:10:44

I got into work at 8:30 am this morning. I read this article at 9am.

By 9:30 I was running both monit and munin on a test server.


From: Anonymous at: 2006-07-31 16:29:31

I set up both of them in less than 30 min. However, I am wandering what "10" in this statement means: "if loadavg(5min) greater than 10 for 5 cycles then stop" I do receive very often notifications about apache restart...?

From: Anonymous at: 2014-07-16 07:15:59

Above it, it defines stop with: stop program = "/etc/init.d/apache2 stop"
So I think it (the "10") means

"If the average load for the last 5 mins is > 10 for 5 runs, then stop apache

Above that, it says: set daemon 60
This sets Monit to run every minute (60 seconds)
So if the average load for the last 5 mins is more than 10, for 5 minutes straight, it stops apache

From: Anonymous at: 2006-05-08 18:42:02

I recommend you It is a very easy to install web-based, lightweight, open-source, rrdtool-based monitoring tool for UNIX and Linux servers that you must try.


From: Anonymous at: 2006-05-08 18:59:53

Thanks for the detailed instructions. I had both of them running in about an hour. Thanks!

From: Anonymous at: 2006-06-13 16:07:10

Thanks for the great howto. It works great and was up and running in less than 1 hour.

From: Mattia Belletti at: 2009-09-08 12:55:28

Thank you! Very useful and straight-to-the-point!

From: Ventzy at: 2010-06-22 16:26:57

How much additional server load can be expected of running munin and monit?

Is it possible monit to monitor another server, so if whole server is down to get notified?