Tenere i servizi sotto controllo con Monit

In questi giorni mi è capitato di dover risolvere un problema per un mio cliente il quale, utilizzando un sistema di monitoraggio remoto, doveva assicurarsi che un servizio fosse sempre attivo.
Poiché su questo sistema avevo messo una Debian mi son detto: chissà se c’è già qualcosa di pronto… detto-fatto ho usato il solito:
$ apt-cache search monitoring daemons
ed è spuntato:
monit – A utility for monitoring and managing daemons or similar programs
In questo articolo vi farò vedere, brevemente, come lo si può utilizzare su di un server di rete.
Innanzi tutto installiamo monit. Sulla mia Ubuntu ho dato:
$ sudo aptitude install monit
The following NEW packages will be installed:
monit
0 packages upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
Need to get 524 kB of archives. After unpacking 950 kB will be used.
Get:1 http://ftp.us.debian.org/debian/ squeeze/main monit amd64 1:5.1.1-1 [524 kB]
Fetched 524 kB in 1s (418 kB/s)
Selecting previously deselected package monit.
(Reading database … 83577 files and directories currently installed.)
Unpacking monit (from …/monit_1%3a5.1.1-1_amd64.deb) …
Processing triggers for man-db …
Setting up monit (1:5.1.1-1) …
Starting daemon monitor: monit won’t be started/stopped
unless it it’s configured
please configure monit and then edit /etc/default/monit
and set the “startup” variable to 1 in order to allow
monit to start
Come si vede dal messaggio, per default, monit non parte fintantoché non lo si abilita specificatamente, questo perché prima va configurato correttamente!
Il file di configurazione principale si trova in /etc/monit/monitrc, mentre nella directory /etc/monit/conf.d è possibile aggiungere altri file di configurazione specifici che verranno letti allo start up del demone. Io ho deciso di ulizzare un file diverso per ogni servizio che voglio controllare con monit.
Prima però impostiamo i settaggi di default. Ho settato prima l’intervallo di esecuzione del demone a 2 minuti con ritardo iniziale di 4:
set daemon 120 # check services at 2-minute intervals
with start delay 240 # optional: delay the first check by 4-minutes (by
# default Monit check immediately after Monit start)
Poi ho abilitato il logging:
set logfile syslog facility log_daemon
Ho impostato il mailserver (che nel mio caso è l’host su cui gira monit):
set mailserver localhost
Quindi ho abilitato la coda di salvataggio dei messaggi e-mail (a 100 slot) nel caso il servizio di posta non fosse disponibile:
set eventqueue
basedir /var/monit # set the base directory where events will be stored
slots 100 # optionally limit the queue size
Ed, in fine, ho impostato l’indirizzo e-mail a cui inviare i messaggi di allerta:
set alert monit@consulenti-ict.it
Benissimo, ora posso aggiungere i file di configurazione per i vari servizi che voglio tenere sotto controllo!
Prima di tutto definisco delle impostazioni di sistema:
# cat > /etc/monit/conf.d/system.conf
check system localhost
if loadavg (5min) > 3 then alert
if memory usage > 85% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 40% then alert
if cpu usage (wait) > 30% then alert
In questo modo dico a monit di controllare i parametri di sistema più classici: carico medio, utilizzo della memoria, ecc.. Credo che il file si commenti da solo… :)
Poi ho aggiunto un file di configurazione per controllare che MySQL sia sempre attivo:
ict:~# cat /etc/monit/conf.d/mysql.conf
# Monitoring Mysql Service
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = “/etc/init.d/mysql start”
stop program = “/etc/init.d/mysql stop”
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
Anche in questo caso direi che non c’è molto da spiegare… praticamente il file si legge da solo: controlla il processo mysql con PID file in /var/run/mysqld/mysqld.pid, gruppo database, per avviare e fermare il demone usa i comandi /etc/init.d/mysql start e /etc/init.d/mysql stop; quindi tieni sotto controllo la porta TCP 3306 all’indirizzo 127.0.0.1 e se fallisce riavvia il demone e se fai 5 riavvii all’inetrno di 5 cicli (di esecuzione di monit) vai in timeout e segnala l’evento all’amministratore. Facile no?
Quindi, aggiungendo altri file di configurazione posso tenere sotto controllo più servizi di sistema (invito il lettore curioso a leggere la documentazione di monit).
A questo punto per verificare che il file di configurazione non contenga errori uso:
# monit -t
Control file syntax OK
e quindi per attivare il demone edito il file /etc/default/monit mettendo la variabile startup=1 ed abilitando la variabile STATEFILE quindi do il comando:
# /etc/init.d/monit start
Starting daemon monitor: monit.
e nel file di log vedo:
# grep monit /var/log/syslog
Jan 13 12:13:03 ict monit[6046]: Starting monit daemon
Jan 13 12:13:03 ict monit[6046]: Monit start delay set — pause for 240s
Perfetto! Il sistema è partito e, da ora in poi, posso stare tranquillo che tutti i servizi controllati da monit saranno sempre attivi! O, almeno, verrò avvisato…
Su Rodolfo Giometti
Ingegnere informatico libero professionista ed esperto GNU/Linux offre supporto per: - device drivers; - sistemi embedded; - sviluppo applicazioni industriali per controllo automatico e monitoraggio remoto; - corsi di formazione dedicati. Manutentore del progetto LinuxPPS (il sottosistema Pulse Per Second di Linux) contribuisce attivamente allo sviluppo del kernel Linux con diverse patch riguardanti varie applicazioni del kernel e dispositivi (switch, fisici di rete, RTC, USB, I2C, network, ecc.). Nei 15+ anni di esperienza su Linux ha lavorato con le piattaforme x86, ARM, MIPS & PowerPC.
Lascia un commento
Devi essere connesso per inviare un commento.