Setting up Monit

Install

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

wget https://mmonit.com/monit/dist/binary/5.26.0/monit-5.26.0-linux-x64.tar.gz
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

wget https://mmonit.com/monit/dist/binary/5.26.0/monit-5.26.0-netbsd-x64.tar.gz
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 https://bitbucket.org/tildeslash/monit.git
cd monit/
./bootstrap
./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...

vi PLIST

...remove PALTFORMS...

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

System packages

Slackware,

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/

NetBSD,

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 ~/

Setup

#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

e.g.

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
/usr/local/bin/monit

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
/usr/bin/monit

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

NetBSD

/etc/rc.d/monit start

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

Reload

Reload with the traditional method – yepee

kill -HUP PID

Troubleshooting

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
EOF
done; unset netif

unset netifs

Check how many CPUs you have,

grep ^proc /proc/cpuinfo | wc -l

Check your short hostname and FQDN,

#hostname
#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
#EOF

Eventually check that your smtp relay responds and that your email setup is in place.

hostmaster=hostmaster@example.com
smarthost=smarthost.example.local
nmap -p 25 $smarthost
telnet $smarthost 25
quit

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 https://bitbucket.org/tildeslash/monit.git
cd monit/
./bootstrap

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

vi /etc/rc.local

#self verbose
/usr/local/bin/monit

Workstation

Prepare some dummy key,

#apt install ssl-cert
#/var/lib/dpkg/info/ssl-cert.postinst
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/mongod.pid
    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

Resources

https://mmonit.com/wiki/Monit/Installation

https://www.cyberciti.biz/faq/how-to-install-and-use-monit-on-ubuntudebian-linux-server/

Monit https://www.mmonit.com/monit/

Monit Source Code https://bitbucket.org/tildeslash/monit/

M/Monit https://www.mmonit.com/


HOME | GUIDES | BENCHMARKS | html