Setting up Monit


Either use your system’s packages, third-parity binaries or the source. For Windows, there is monit-windows-agent to try out.

Upstream binaries

Upstream latest

linux binaries

tar xzf monit-5.26.0-linux-x64.tar.gz
cp monit-5.26.0/bin/monit /usr/local/bin/
cp monit-5.26.0/conf/monitrc /etc

as for netbsd

tar xzf monit-5.26.0-netbsd-x64.tar.gz
cp monit-5.26.0/bin/monit /usr/local/bin/
cp monit-5.26.0/conf/monitrc /etc

From source

git clone
cd monit/
./configure --without-pam

From pkgsrc

See the setting up pkgsrc guide and trick around the existing one, to get the latest version,

echo ACCEPTABLE_LICENSES+= gnu-agpl-v3 >> /etc/mk.conf
cd /usr/pkgsrc/sysutils/monit/
vi Makefile

...change version to e.g. monit-5.25.2...
...remove PLATFORMS...


...remove PALTFORMS...

make NO_CHECKSUM=yes
make install
cp /usr/pkg/share/examples/rc.d/monit /etc/rc.d/

System packages


sbopkg -i monit
cd /etc/

Debian system,

apt install monit netcat nmap ksh
#  exim4 | postfix | mail-transport-agent sysvinit-core
cd /etc/monit/

Redhat/EPEL system,

yum install monit
cd /etc/


uname -r
echo $PKG_PATH
pkg_add -v monit
rmdir /usr/pkg/etc/monit/monit.d/
cp /usr/pkg/share/examples/rc.d/monit /etc/rc.d/
echo monit=yes >> /etc/rc.conf
ln -s /usr/pkg/etc/monit/monitrc ~/


#nmap -p 80,443,8080,8443 statushb
nc -vz -w5 statushb 443

mv /etc/monitrc /etc/monitrc.dist
sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' /etc/monitrc.dist > /etc/monitrc
chmod 600 /etc/monitrc
vi /etc/monitrc

Ubuntu package

mv /etc/monit/monitrc /etc/monit/monitrc.dist
sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' /etc/monit/monitrc.dist > /etc/monit/monitrc
chmod 600 /etc/monit/monitrc
vi /etc/monit/monitrc

NetBSD package

mv /usr/pkg/etc/monit/monitrc /usr/pkg/etc/monit/monitrc.dist
sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' /usr/pkg/etc/monit/monitrc.dist > /usr/pkg/etc/monit/monitrc
chmod 600 /usr/pkg/etc/monit/monitrc
vi /usr/pkg/etc/monit/monitrc


set daemon 30
set log syslog
set httpd port 2812 and
     use address localhost  # only accept connection from localhost
     allow localhost        # allow localhost to connect to the server and
     allow admin:monit      # require user 'admin' with password 'monit'

set mmonit https://monit:PASSWORD@statushb/collector
check network eth0 with interface eth0
check network eth1 with interface eth1
check network lo with interface lo
check filesystem _ with path /

Ready go to

Start & enable

Start and enable the daemon at boot time

Upstream binary

vi /etc/rc.local

#self verbose

otherwise (binaries on Debian)

#echo -n starting monit...
#/usr/local/monit/bin/monit start all && echo done

Slackware system packages

vi /etc/rc.local

#self verbose

Debian systems

systemctl reload monit
systemctl status monit

Old Redhat systems

service monit restart
chkconfig monit on

New Redhat systems

systemctl start monit
systemctl enable monit
systemctl status monit


/etc/rc.d/monit start

You should now see the added host within the M/Monit interface.


Reload with the traditional method – yepee

kill -HUP PID


Eventually check that the monit host resolves, responds, and that the mmonit service is reachable, preferably on port 443,

ping -c1 mmonit
nmap -p 80,8080,443 mmonit

For network monitoring, identify what network interface you are using,

    netifs=`ifconfig | grep ^[[:alpha:]] | egrep -v ^lo | awk '{print $1}'`
    echo $conf
echo $netifs

for netif in $netifs; do cat >> $conf <<-EOF

check network $netif with interface $netif
        if failed link then alert
        if changed link then alert
        if saturation > 90% then alert
        if total upload > 1 GB in last hour then alert
done; unset netif

unset netifs

Check how many CPUs you have,

grep ^proc /proc/cpuinfo | wc -l

Check your short hostname and FQDN,

#hostname --long

The default CPU info that shows up is wait. I like that so I do not tweak that.

#cat >> $conf <<-EOF
#check system HOSTNAME
#       if loadavg (15min) > 4 then alert
#       if memory usage > 90% then alert
#       if swap usage > 5% then alert
#       if cpu usage (wait) > 10% then alert
#       group system_resources

Eventually check that your smtp relay responds and that your email setup is in place.
nmap -p 25 $smarthost
telnet $smarthost 25

Mail alerts setup,

set mailserver $smarthost, localhost
set alert $hostmaster

set mail-format {
    from: $hostmaster
    subject: Monit alert -- $EVENT $SERVICE
    message: $EVENT Service $SERVICE

    Date:        $DATE
    Action:      $ACTION
    Host:        $HOST
    Description: $DESCRIPTION

    Monit http://$HOST:2812/
    M/Monit https://$mmonit/

old ubuntu 14

apt install git build-essential libtool automake
git clone
cd monit/

apt install byacc flex zlib1g-dev libssl-dev
./configure --without-pam
#apt purge monit
#apt autoremove
make install
cp ~/monit/monitrc /etc/
ln -s /etc/monitrc ~/

vi /etc/rc.local

#self verbose


Prepare some dummy key,

#apt install ssl-cert
ls -lhF /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key
chmod 400 /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key

and add this to monitrc (eventuall enable ssl),

set httpd port 2812
        signature disable
        #ssl enable
        #pemfile /etc/ssl/certs/ssl-cert-snakeoil.pem
        allow localhost        # allow localhost to connect to the server and
        allow admin:monit      # require user 'admin' with password 'monit'

Monitoring assets

Get some sample config quick & dirty

ifconfig | grep ^[[:alpha:]] | cut -f1 -d:
df -P | egrep '^/dev/sda|^/dev/xbd|^/dev/root' | awk '{print $NF}'

for netif in `ifconfig | grep ^[[:alpha:]] | cut -f1 -d:`; do
    echo check network $netif with interface $netif
done; unset netif; for fs in `df -P | egrep '^/dev/sda|^/dev/xbd|^/dev/root' | awk '{print $NF}'`; do
    echo check filesystem `echo $fs | sed 's#/#_#g'` with path /
done; unset fs

Setup additional services'monitoring e.g.,

check process mongod with pidfile /var/run/mongodb/
    if cpu > 60% for 2 cycles then alert
    #if totalmem > 1 GB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then alert
    group server



Monit Source Code