Installare e configurare Monit

Monit è uno strumento che permette di gestire e controllare processi, file e directory su un server Linux.
L’applicazione può essere configurata per eseguire determinate azioni quando rileva un problema, un esempio è l’esecuzione di un processo quando questo risulta non attivo.

Per installare Monit, è necessario scaricare i file di installazione dal sito ufficiale all’indirizzo http://mmonit.com/download

cd /usr/local/src
wget http://mmonit.com/monit/dist/monit-5.1.1.tar.gz
tar -zxvf monit-5.1.1.tar.gz
cd monit-5.1.1
./configure –sysconfdir=/etc/monit/
make && make install

Al termine dell’operazione è possibile eliminare i file sorgente.
rm -Rf /usr/local/src/monit* && cd

La fase successiva consiste nel creare il file di configurazione.
mkdir /etc/monit/
mkdir /etc/monit/cfg
cd /etc/monit/
nano -w /etc/monit/monitrc

Il contenuto del file sarà simile al seguente
set daemon  60
set logfile /var/log/monit.log
set mailserver localhost
set alert change@me.net

# Set mail notification options:
set mail-format {
from: monit@changeme.net
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST,

Yours sincerely,
AI
}

## Inbuilt httpd
## Disabled the httpd for extra security. Use it at your own risk.
#set httpd port 3500 and
## Change the username and password if you activate the inbuild httpd solution
#allow admin:monit

## httpd access control
#allow localhost
#allow 10.0.0.10

Vediamo ora più nel dettaglio il significato dei parametri presenti all’interno del file di configurazione.
set daemon  60 – Specifica ogni quanti secondi deve essere effettuato il controllo.
set logfile /var/log/monit.log – Specifica il file di log di Monit. In questo caso si utilizza un file ma potrebbe anche essere utilizzato syslog modificando il parametro in set logfile syslog facility log_daemon.
set mailserver localhost – Specifica il server di posta da utilizzare per inviare le mail di segnalazione. In questo caso viene utilizzato il server di posta installato localmente, nel caso si volesse utilizzare gmail, il parametro da usare sarebbe set mailserver smtp.gmail.com port 587 username “myemail@gmail.com” password “password” using tlsv1 with timeout 30 seconds.
set alert – Specifica l’indirizzo mail a cui devono essere inviate le segnalazioni.
set mail-format – Definisce il formato delle notifiche che vengono inviate tramite mail.

Nella sezione successiva del file viene definita l’interfaccia web dell’applicazione, in questo caso i parametri sono commentati perchè si è preferito disabilitarla.

Dopo che è stato creato il file, è necessario modificare i permessi in modo che sia accessibile solo da root.
chmod 700 /etc/monit/monitrc

Risulta inoltre importante creare il file di log specificato nel file di configurazione.
touch /var/log/monit.log

Se si vuole eseguire monit come servizio, è necessario creare uno script all’interno di /etc/init.d

cd /etc/init.d/
nano monit

#!/bin/bash
#
# Init file for Monit process monitor.
#
# Written by Dag Wieers <dag@wieers.com>.
#
# chkconfig: – 98 02
# description: Monit Process Monitor
#
# processname: monit
# config: /etc/monit.conf
# pidfile: /var/run/monit

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

MONIT=/usr/local/bin/monit

# Source monit configuration.
if [ -f /etc/sysconfig/monit ] ; then
. /etc/sysconfig/monit
fi

[ -f $MONIT ] || exit 0

RETVAL=0

# See how we were called.
case “$1″ in
start)
echo -n “Starting monit: ”
daemon $NICELEVEL $MONIT
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/monit
;;
stop)
echo -n “Stopping monit: ”
killproc monit
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/monit
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
condrestart)
[ -e /var/lock/subsys/monit ] && $0 restart
;;
status)
status monit
RETVAL=$?
;;
*)
echo “Usage: $0 {start|stop|restart|condrestart|status}”
exit 1
esac

exit $RETVAL

chmod +x /etc/init.d/monit
chkconfig –levels 235 monit on

A questo punto monit è configurato per essere eseguito all’avvio del sistema, non sono però ancora stati definiti i controlli che l’appplicazione deve effettuare.
Per fare questo è necessario modificare il file di configurazione di monit.

Controllo di sistema
check system CHANGEHOSTNAME
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert

Aggiungendo questo contenuto al file di configurazione di Monit, l’applicazione controllerà l’utilizzo della memoria e del processore.
Quando i limite vengono superati, Monit invia una mail di avviso.

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

Il processo sshd viede avviato se risulta non in esecuzione.

Controllo Apache
check process httpd with pidfile /var/run/httpd.pid
group apache
start program  “/etc/init.d/httpd start”
stop program  “/etc/init.d/httpd stop”
if failed host localhost port 80 protocol http
and request “/” then alert
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then alert
if 3 restarts within 5 cycles then timeout

Controllo MySQL
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = “/etc/init.d/mysql start”
stop program = “/etc/init.d/mysql stop”
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql then alert

Come è possibile vedere da questi esempi, Monit permette di personalizzare i controlli da effettuare in modo piuttosto semplice.

Sul sito ufficiale è disponibile documentazione molto dettagliata per approfondire la conoscenza relativa al funzionamento dell’applicazione.