Monit: tool per monitoraggio di server

Pubblicato il 30/07/2013 in BSD, Linux, System Administration • 4 min read

I sistemi di monitoraggio sono i migliori amici dei sistemisti, perché ci permettono di capire cosa sta succedendo, cosa è successo e cosa probabilmente succederà sui nostri server.

In questo primo articolo vediamo come configurare monit, uno dei software di monitoraggio più semplici ed efficaci.

Il monitoraggio dei server

Ogni sistemista coscienzioso utilizza uno o più sistemi di monitoraggio, così da tenere sotto controllo tutti i server che gestisce.

Esistono molti di sistemi di monitoraggio, sia gratuiti che a pagamento, installabili come servizi oppure gestiti da aziende esterne. I più famosi sono sicuramente:

Vediamo come installare e configurare Monit per i controlli e le azioni minime indispensabili.

Caratteristiche principali

Monit è in grado, se opportunamente configurato, di effettuare operazioni di controllo e gestione dei servizi. Ecco le sue caratteristiche principali:

  • configurazione semplice
  • occupa pochissime risorse
  • può controllare lo stato delle risorse del server (CPU, RAM, spazio disco, load average, etc)
  • può controllare la raggiungibilità dei servizi attivi
  • può riavviare servizi non raggiungibili
  • invia mail di segnalazione dei problemi riscontrati
  • ha un pannello web con il riepilogo dello stato del server

Monit fa parte di quella categoria di software che una volta installati e configurati non ci si mette più mano perché svolgono egregiamente il proprio lavoro.

Installazione e prima configurazione

Per installare Monit eseguiamo

su FreeBSD:

root@server:~# cd /usr/ports/sysutils/monit

root@server:/usr/ports/sysutils/monit# make install clean

su sistemi Ubuntu / Debian:

root@server:~# apt-get install monit

Il file di configurazione principale è monitrc il cui contenuto è abbastanza semplice:

set daemon  60                          # controlla i servizi ogni minuto
set logfile /var/log/monit              # imposta /var/log/monit come logfile

set mailserver localhost                # utilizza il mail server locale per inviare i messaggi

set mail-format {
   from: monitor@$HOST
   subject: monit alert --  $EVENT $SERVICE
   message: $EVENT Service $SERVICE
                 Date:        $DATE
                 Action:      $ACTION
                 Host:        $HOST
                 Description: $DESCRIPTION

            Your faithful employee,
            Monit
 }
set alert monitor@dominio.tld          # destinatario delle e-mail di avviso
set httpd port 2812 and
    use address localhost              # il demone si mette in ascolto su localhost
    allow localhost                    # permette connssioni solo provenienti da localhost
    allow admin:monit                  # l'autenticazione avviene con l'utente 'admin' con password 'monit'

include /usr/local/etc/monit.d/*       # utilizza i file di controllo per i servizi presenti in /usr/local/etc/monit.d

I file di configurazione di sistema e dei servizi

Iniziamo con quello per tenere sotto controllo le risorse, che chiameremo system e che andremo a salvare in /usr/local/etc/monit.d:

  • memoria (RAM e SWAP)
  • CPU
  • File system
check system server
    if loadavg (1min) > 16 then alert    # x4
    if loadavg (5min) > 12 then alert    # x3
    if loadavg (15min) > 8 then alert    # x2
    if memory usage > 95% then alert
    if swap usage > 40% then alert
    if cpu usage (user) > 95% then alert
    if cpu usage (system) > 95% then alert

### Filesystem

check device ROOT with path /dev/ad0p3
    if space usage > 80% then alert

check device HOME with path /dev/ad0p4
    if space usage > 85% then alert

Vediamo i file di configurazione per alcuni servizi, da salvare sempre in /usr/local/etc/monit.d:

SSH

# ssh
check process sshd with pidfile /var/run/sshd.pid
    start program = "/etc/rc.d/sshd start"
    stop  program = "/etc/rc.d/sshd stop"
    if failed host 1.2.3.4 port 22 2 times within 2 cycles then restart
    if changed pid then alert
    if 3 restarts within 8 cycle then alert

NGINX

# nginx
check process nginx with pidfile /var/run/nginx.pid
    start program = "/usr/local/etc/rc.d/nginx start"
    stop  program = "/usr/local/etc/rc.d/nginx stop"
    if failed port 80 then restart
    if changed pid then alert
    if 2 restart within 10 cycle then alert

PHP

# PHP processes
check process php with pidfile /var/run/spawn-fcgi.pid
    start program = "/usr/local/etc/rc.d/spawn-fcgi start"
    stop  program = "/usr/local/etc/rc.d/spawn-fcgi stop"
    if failed port 9000 then restart
    if changed pid then alert
    if 1 restart within 1 cycle then alert

Exim

# Exim
check process exim with pidfile /var/run/exim.pid
    start program = "/usr/local/etc/rc.d/exim start"
    stop  program = "/usr/local/etc/rc.d/exim stop"
    if failed port 25 protocol smtp 5 times within 5 cycles then restart
    if changed pid then alert

MySQL

# mysql
check process mysql with pidfile /var/db/mysql/server.pid
    start program = "/usr/local/etc/rc.d/mysql-server start"
    stop  program = "/usr/local/etc/rc.d/mysql-server stop"
    if failed port 3306 protocol mysql 5 times within 5 cycles then restart
    if changed pid then alert
    if 5 restart within 5 cycle then alert

Ulteriori esempi di file di configurazione sono presenti nella relativa pagina del wiki di Monit.

L'interfaccia web

Come accennato in precedenza, Monit è dotato anche di un'interfaccia web da cui è possibile avere una visione complessiva dello stato del monitoraggio.

Vediamo come si presenta (clicca sull'immagine per ingrandirla):

Sistema

monit-web-0{.alignnone .size-large .wp-image-236 width="642" height="31"}

Filesystem

monit-web-2{.alignnone .size-large .wp-image-238 width="642" height="38"}

Servizi

monit-web-1{.alignnone .size-large .wp-image-237 width="642" height="60"}

Dettagli di un servizio

monit-web-3{.alignnone .size-large .wp-image-239 width="642" height="324"}

Conclusioni

Monit, come abbiamo visto, permette di tenere sotto controllo risorse e servizi, avvisandoci prontamente dei problemi che riscontra.

E' indubbiamente uno di quei tool che un buon sistemista deve sempre installare e configurare sui server che gestisce, perché permette di affrontare e risolvere i problemi prima che ci sia un impatto sui servizi ospitati.