Nagios e' un ottimo tool FREE per il monitoraggio di sistemi e di reti. Molto completo ed efficiente ha un numero molto elevato di Plug-in che consentono il controllo di un sistema informativo in tutti i suoi aspetti: dai router ai web server, dai file system alle basi dati, ...
Poiche' non ho trovato molto in italiano ho scritto questo breve documento che ne descrive alcune caratteristiche seguendo l'installazione, la configurazione e l'utilizzo di Nagios.
Questa pagina e' stata scritta quasi dieci anni fa... Nagios e' sempre piu' diffuso ed e' considerato uno standard di fatto per il monitoraggio di sistema. Ora e' disponibile la versione Nagios XI che fornisce una GUI di amministrazione molto completa e semplici wizard per la configurazione. Ma le funzionalita' di base della versione core, descritta in questo documento, sono rimaste praticamente identiche.

Installazione

La modalita' consigliata e' quella del tarball ma, se siete pigri o volete fare in fretta, sono disponibili pacchetti gia' compilati per gli ambienti piu' diffusi (eg. RPM x Linux Red Hat).
Poiche' sono prigro utilizzero' come esempio un'installazione su Linux Red Hat via RPM! Naturalmente quanto riportato vale, mutatis mutandis anche per altri ambienti e sistemi.

I passi principali sono:

Ora funziona tutto. Basta collegarsi su http://nomeserver/nagios e si entra nella Home Page!

Configurazione

Il file di configurazione di default di Nagios e' /etc/nagios/nagios.cfg. Se si vuole impostare una configurazione significativa e' molto importante strutturare bene i file di configurazione. La modalita' piu' semplice e' quella di inserire le diverse clausole direttamente nel file principale ma il mio consiglio e' quello di creare una directory ed all'interno di quella piu' file organizzati per tipologia di direttiva.

Configurare Nagios non e' difficile e l'approccio pragmatico e' il migliore. Quindi conviene provare immediatamente ed inserire nuovi oggetti a poco a poco. Vediamo quindi qualche semplice configurazione.

define command{
        command_name    check_serv
        command_line    $USER1$/check_http -H $ARG1$ -p $ARG2$ -u $ARG3$ -s $ARG4$ --onredirect=follow
        }

define service{
        use                             generic-service 
        host_name                       web1.acme.it,web2.acme.it
        service_description             PING
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              4
        normal_check_interval           5
        retry_check_interval            1
        contact_groups                  admins
	notification_options		w,c,r
        notification_interval           960
        notification_period             24x7
	check_command			check_ping!100.0,20%!500.0,60%
        }

define service{
        use                             generic-service         
        host_name                       web1.acme.it
        service_description             SERVICE-WebHome
        is_volatile                     0
        check_period                    12x5
        max_check_attempts              3
        normal_check_interval           2
        retry_check_interval            1
        contact_groups                  admins
        notification_interval           240
        notification_period             12x5
        notification_options            w,c,r
        check_command                   check_serv!www.acme.it!80!/pls/portal/PortalHome!"ACME Home Page"
        }

define host{
        use                     generic-host
        host_name               web1.acme.it
        alias                   web1.acme.it
        address                 10.10.10.4
        check_command           check-host-alive
        max_check_attempts      10
        notification_interval   120
        notification_period     24x7
        notification_options    d,r
        contact_groups  admins
        }

define host{
        use                     generic-host
        host_name               web2.acme.it
        alias                   web2.acme.it
        address                 10.10.10.5
        check_command           check-host-alive
        max_check_attempts      10
        notification_interval   120
        notification_period     24x7
        notification_options    d,r
        contact_groups  admins
        }

I principali oggetti in Nagios sono gli host che ospitano service e che vengono controllati con gli opportuni command. Nell'esempio sono configurati due host che vengono controllati con un "ping". E' inoltre definito il controllo di un servizio web su cui viene verificato il contenuto della pagina. La verifica segue eventuali redirect ed e' indipendente dagli indirizzi dei server (come deve essere per verificare le piu' complesse configurazioni con proxy, cluster, ...).
La definizione degli elementi di configurazione di Nagios utilizza una logica object oriented. Quindi le opzioni vengono "ereditate" consentendo cosi' una definizione piuttosto snella e modulare di ambienti anche complessi.

E' possibile definire anche altri aspetti quali raggruppamenti di host e servizi, gruppi di operatori ed i loro diritti, orari di servizio, coordinate dei server per una visione in 3D, ...

define hostgroup{
        hostgroup_name  production
        alias           Production Servers
        members         web1.acme.it,web2.acme.it,db1.acme.it
        }

define contact{
        contact_name                    sist-II
        alias                           Sistemisti IIo livello
        service_notification_period     12x5
        host_notification_period        24x7
        service_notification_options    w,u,c,f
        host_notification_options       d,f
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           sist2@acme.it
        }

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagios-admin,sist-II
        }

define timeperiod{
        timeperiod_name 12x5
        alias           Extended working hours
        sunday          00:00-00:00
        monday          08:00-19:00
        tuesday         08:00-19:00
        wednesday       08:00-19:00
        thursday        08:00-19:00
        friday          08:00-19:00
        saturday        00:00-00:00
        }

define hostextinfo{
	host_name	web1.acme.it
	notes		Application Server 1
	icon_image	linux.png 
	icon_image_alt	Web Server1
	statusmap_image	linux.gd2
	2d_coords	200,75
	3d_coords	200.0,75.0,50.0
	}

Le diverse definizioni possono essere poste su un unico file oppure, meglio, separate per tipologia di oggetto e di servizio e raccolte nella directory indicata in nagios.cfg.

Plug-in

Il controllo dell'effettivo fuzionamento di un servizio avviene mediante un comando interno di Nagios oppure mediante un Plug-in. Il numero di Plug-in e' molto elevato e ciascuno consente un controllo molto completo delle risorse per le quali e' stato sviluppato.
Ad esempio e' possibile controllare se un sito web e' attivo, se ad una richiesta risponde con una pagina che contiene uno specifico testo, se il certificato server utilizzato dal protocollo HTTPS e' in scadenza, se la pagina viene reindirizzata, ...

Quanto riportato e' relativo al solo Plug-in check_http che supporta una ventina di differenti opzioni. I Plug-in ufficiali sono una cinquantina e si trovano in /usr/lib/nagios/plugins. I controlli possibili sono i piu' svariati: connettivita' di rete, presenza di servizi, utilizzo del sistema operativo, corretto funzionamento di database, ...
I plug-in possono essere provati in modalita' interattiva, quindi la configurazione di nuovi controlli e test risulta semplice e veloce:

./check_oracle --help
Restituisce un help sulle diverse opzioni fornite dal plugin (e' anche possibile utilizzare l'opzione in formato short: -h).

E' possibile sviluppare nuovi plug-in seguendo le semplici linee guida pubblicate. Tale eventualita' e' diventata tuttavia piuttosto remota poiche' i plug-in disponibili sono gia' molto completi e quindi tipicamente si utilizzano quelli presenti con eventuali piccole modifiche.
Le caratteristiche di base di un plug-in sono molto semplici. Deve essere un programma eseguibile scritto in un qualsiasi linguaggio, che possa ricevere eventuali parametri, che restituisca su stdout una stringa con il risultato del controllo ed un codice d'errore secondo la seguente logica: 0=OK 1=WARNING 2=CRITICAL 3=UNKNOWN.

Oltre ai plug-in e' possibile attivare controlli esterni. Nagios legge periodicamente da un file le direttive di comandi esterni che possono contenere richieste di configurazione o i risultati di un controllo (PROCESS_SERVICE_CHECK_RESULT).
In questo modo integrare Nagios con altri strumenti e programmi di monitoraggio risulta molto semplice.

Utilizzo

L'utilizzo di Nagios e' molto semplice. E' lui a lavorare in modo continuo ed a controllare i sistemi ed i servizi che sono stati configurati. Generalmente si utilizza la pagina di dettaglio dei servizi ordinata per stato (ma anche altre come la "Tactical Overview" o la "ServiceGroup Summary") per avere su console lo stato complessivo di tutti gli ambienti evidenziando eventuali problemi.


Quando Nagios rileva un problema lo evidenzia sulla console e scatena tutte le azioni configurate (eg. invio di email). Quando un operatore prende in carico il problema Nagios interrompe le escalation e riporta sulla console l'indicazione di lavori in corso.
Nagios effettua i controlli in modo intelligente. Se un server risulta e' in down ovviamente non saranno utilizzabili tutti i servizi su esso definiti; Nagios non effettua controlli inutili ed invia una sola notifica d'errore.
Se e' stata configurata in modo corretto la topologia della rete (con l'opzione <parent> dell'oggetto host), Nagios puo' distinguere tra un sistema in down ed un sistema non raggiungibile perche' un componente intermedio della rete e' in fault. Anche in questo caso non vengono effettuati controlli inutili e vengono inviate solo le notifiche richieste.

E' possibile effettuare da web diverse attivita' di controllo e gestione (eg. controlli a richiesta, interruzioni di servizio programmate, ...). Dal punto di vista funzionale sono coperte tutte le esigenze di una linea di servizio operativa sulle rete e sui sistemi.
Come si conviene ai piu' completi strumenti di monitoraggio, sono disponibili sofisticate funzioni di statistica e reportistica.

Conclusioni

Nagios e' un ottimo software per il controllo operativo di sistemi e reti. E' completo e flessibile al pari di altri prodotti commerciali. La sua configurazione e' semplice e veloce. Inoltre e' completamente personalizzabile e gratuito... che dire di piu'?


Documento: Nagios
Data: 1 Aprile 2006
Versione: 1.0.2 - 1 Aprile 2014
Autore: Meo Bogliolo