Cos’è Monit?
“Monit is a free open source utility for managing and monitoring, processes, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations. “
Monit è un tool per il controllo d’integrità del filesystem e per il monitoraggio dei processi attivi su un server. La caratteristica più interessante è però la possibilità di utilizzare Monit per controllare i demoni in esecuzione e di prevenire interruzioni, sforamenti di memoria e quant’altro.
Un caso concreto
I sistemi di monitoraggio si focalizzano soprattutto sui valori globali di un sistema. E’ possibile estrapolare il valore di carico medio di un server ma spesso è difficile segmentare questi dati processo per processo. Con Monit diventa possibile riavviare un processo che si trova in uno stato di blocco o spegnere un processo che si trova in uno stato di superamento di alcuni valori prefissati. Ad esempio con Monit è possibile riavviare Apache nel momento in cui si trovi ad occupare l’80 per cento della cpu in un determinato arco di tempo.
Installiamo Monit
L’installazione di Monit su un server Debian segue la classica procedura con l’ausilio di apt-get :
# apt-get install monit
Dopo l’installazione è necessario modificare il file /etc/default/monit per permettere l’avvio di Monit :
# vim /etc/default/monit startup=1
Il file di configurazione di Monit è /etc/monit/monitrc.All’interno di questo file vengono controllati tutti i parametri vitali per l’esecuzione di Monit ed è all’interno di questo stesso file che possiamo definire quali servizi dovranno essere verificati periodicamente. Nell’esempio che segue vogliamo far si che Apache venga monitorato ad intervalli di tempo di 2 minuti per capire se alcuni valori come carico medio e memoria impegnata possano costituire un motivo di allerta.
# vim /etc/monit/monitrc set daemon 120 set logfile syslog facility log_daemon set mailserver 127.0.0.1 set alert email@example.com check file apache_bin with path /usr/sbin/apache2 if failed permission 755 then unmonitor if failed uid root then unmonitor if failed gid root then unmonitor check process apache with pidfile /var/run/apache2.pid start program = "/etc/init.d/apache2 start" stop program = "/etc/init.d/apache2 stop" if cpu > 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 500.0 MB for 5 cycles then restart if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles then stop depends on apache_bin group www-data
Nella prima parte della configurazione definiamo l’intervallo di tempo per i check eseguiti da Monit oltre ad impostare l’indirizzo email a cui verrano inviate le allerte. Nella seconda parte definiamo invece un semplice controllo di integrità per l’eseguibile di Apache, necessario al funzionamento della successiva porzione di configurazione.
Nella terza ed ultima parte di configurazione definiamo le regole per il monitoraggio di Apache, che vediamo nel dettaglio :
if cpu > 60% for 2 cycles then alert : se la cpu impegnata da Apache è maggiore del 60% per un tempo di due cicli invia un’allerta
if cpu > 80% for 5 cycles then restart : se la cpu impegnata da Apache è maggiore dell’ 80% per un tempo di cinque cicli riavvia Apache
if totalmem > 500.0 MB for 5 cycles then restart : se la memoria impegnata da Apache è maggiore di 500MB per cinque cicli riavvia Apache
if children > 250 then restart : se i processi figli superano la soglia di 250 riavvia Apache
if loadavg(5min) greater than 10 for 8 cycles then stop : se il carico medio è maggiore di 10 per otto cicli di tempo spegni Apache
Con l’utilizzo di queste regole è possibile evitare che Apache porti il sistema al collasso in caso di improvvisi picchi di traffico HTTP o che la memoria del server venga esaurita completamente dal demone in situazioni di grosso carico.
Dopo aver terminato la configurazione è possibile avviare Monit con il seguente comando :
# /etc/init.d/monit start
I vantaggi
Monit offre un controllo granulare dei processi attivi su un server e permette inoltre di definire delle regole molto flessibili per il controllo degli stessi. Un vero cane da guardia per il tuo server.
