Project

General

Profile

MonitorIcingaEtAl » History » Version 12

« Previous - Version 12/26 (diff) - Next » - Current version
Simone Piccardi, 04/22/2013 12:44 PM


Monitoraggio sistemi con Icinga & C.

Installazione base

Icinga (http://www.icinga.org) è un fork di Nagios sviluppato in maniera aperta, che presenta numerosi miglioramenti e soprattutto una interfaccia utente nettamente più elaborata. Le presenti istruzioni fanno riferimento all'installazione su una Debian Squeeze utilizzando le versione più recenti disponibili nel repository di backports pertanto il primo passo da fare sarà quello di abilitare questi ultimi, aggiungendo a /etc/apt/sources.list la riga:

deb http://backports.debian.org/debian-backports squeeze-backports main

il pacchetto è suddiviso in due parti, il "core" che reimplementa le funzionalità di Nagios, e la nuova interfaccia web, pertanto installeremo entrambe con:

apt-get install -t squeeze-backports icinga icinga-web

Il sistema di debconf chiederà se abilitare o meno l'uso di comandi esterni con Icinga, questo consente, attraverso l'accesso in scrittura della pipe di controllo posta in /var/lib/icinga/rw/ di dare al web server la possibilità di utilizzare l'interfaccia dei comandi CGI, e servirà anche per l'accesso alla stessa da parte di altri programmi di ausilio, pertanto è opportuno attivarla rispetto alla scelta di default.

Oltre a questo è però necessario che ci siano i permessi di accesso corretti per /var/lib/icinga/rw/, il cui default non consente l'accesso, per questo si raccomanda di modificarne i permessi di accesso in maniera permanente con:

dpkg-statoverride --update --add nagios www-data 2710 /var/lib/icinga/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/icinga

da eseguire a processo fermo.

L'interfaccia di debconf chiede anche (qualora si usino diverse alternative) per quale web server generare la configurazione (si lasci il default di apache2), di configurare l'accesso e la creazione di vari database per i quali occorre, usando dbconfig-common, la password di root del database (si assume l'uso di MySQL su localhost) e le password per gli utenti di amministrazione, icingaadmin per Icinga e root per l'interfaccia Web. Viene altresì richiesta la configurazione del database di appoggio per lo storico dei dati (icinga-idoutils), per il quale di nuovo occorre la password di root del database.

Qualora la configurazione di icinga-web fallisca in fase di configurazione come capitato a me, occorrerà impostare a mano la password dell'utente root nel relativo database, per questo si dovranno eseguire i seguenti comandi (estratti dallo script di post-installazione):

salt=$(php5 -r 'echo hash("sha256", uniqid("root_", mt_rand()));')
export SALT="$salt" 
export PW="passwordlungaecomplicata" 
pwhash=$(php5 -r 'echo hash_hmac("sha256", getenv("PW"), getenv("SALT"));')
salt_e=${salt/\'/\\\'}
pwhash_e=${pwhash/\'/\\\'}
query="UPDATE nsm_user SET user_password='""$pwhash_e""', user_salt = '""$salt_e""', user_modified = NOW() WHERE user_name = 'root';" 
echo $query | mysql -u icinga_web -p icinga_web

fornendo dopo l'ultimo comando la password impostata per il database di icinga-web.

Una delle caratteristiche di icinga è la possibilità di utilizzare un database per lo stoccaggio dei dati, le estensioni per l'utilizzo di questa modalità di gestione dei dati sono fornite dal pacchetto icinga-idoutils (necessario nel caso si voglia utilizzare la nuova interfaccia di icinga-web, che lo richiede come dipendenza e fa configurare il relativo accesso al database). Per poterlo utilizzare deve essere esplicitamente abilitato l'avvio del demone ido2db modificando la seguente riga in /etc/default/icinga:

# start ido2db daemon (no/yes)
IDO2DB=yes

inoltre deve essere attivato il modulo di gestione da parte di Icinga, questo deve essere fatto attraverso l'uso del file di configurazione distribuito con icinga-idoutils, pertanto occorrerà copiare:

cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg

una volta fatto questo si riavviino i relativi servizi con:

service ido2db restart
service icinga restart

e si potrà verificare il funzionamento anche della nuova interfaccia web (dando per scontato di aver creato un opportuno virtual host sotto SSL), andando sull'indirizzo https://icinga.miosito.it/icinga-web/.

Qualora i dati di monitoraggio siano presenti, ma risulti marcata come "_DOWN_" l'instanza di icinga nel quadro riassuntivo, si verifichi che la timezone di sistema in /etc/timezone, quella di PHP nella variabile date.timezone in /etc/php5/apache2/php.ini siano coerenti, nel caso si provveda anche al riavvio di MySQL per fargli vedere i valori corretti.

Grafici delle risorse con PNP4Nagios

Uno degli aspetti più rilevanti di un sistema di monitoraggio è quello che consente di mantenere uno storico del consumo delle risorse che consente di tenerne sotto controllo l'evoluzione. A questo scopo è disponibile PHP4Nagios, che supporta anche una opportuna integrazione con icinga; per installarlo è sufficiente eseguire il comando:

apt-get install -t squeeze-backports icinga-web-pnp

che installa tutto il necessario nelle dipendenze, una volta fatto questo però vanno fatte alcune correzioni alle configurazioni del pacchetto che sono fatte per Nagios, in particolare occorre modificare /etc/apache2/conf.d/pnp4nagios.conf correggendo le modalità di autenticazione con:

AuthName "Iconga Access" 
AuthUserFile /etc/icinga/htpasswd.users

in modo che corrispondano a quanto presente anche in /etc/apache2/conf.d/icinga.conf, e ci si ricordi di eseguire un reload di apache.

Occorre poi correggere /etc/pnp4nagios/config.php di nuovo per fagli usare i valori opportuni relativi ad Icinga, in particolare si dovranno modificare le seguenti linee:

...
$conf['nagios_base'] = "/icinga/cgi-bin";
...
$conf['livestatus_socket'] = "unix:/var/lib/icinga/rw/live";
...
$conf['template_dirs'][] = '/usr/share/check_mk/pnp-templates';
...

Dove le ultime righe attengono all'uso di funzionalità fornite con Check_MK, su cui torneremo più avanti.

Per la generazione dei grafici occorre che Icinga generi i relativi dati, PHP4Nagios prevede diverse modalità per l'accesso agli stessi, la più efficiente è quella dell'uso di un apposito demone, npcd che si appoggia ad un modulo di Icinga. In realtà il demone può essere anche usato da solo, facendo generare i dati ad Icinga nelle opportune directory.

Anzitutto occorre attivare il demone npcd in /etc/default/npcd inserendo la riga:

# Should NPCD be started? ("yes" to enable)
RUN="yes" 

Il secondo passo è configurare Icinga, cosa che varia a seconda delle modalità scelte per generare i dati. Se si sceglie di usare quella consigliata attraverso il modulo npcdmod.o occorrono due passaggi; il primo è quello di indicare ad Icinga di generare i dati, inserendo in /etc/icinga/icinga.cfg la riga:

process_performance_data=1

occorrerà poi abilitare il modulo inserendo in un file di configurazione (nel nostro caso npcdmod.cfg) nella directory /etc/icinga/modules/ con contenuto:

define module{
        module_name    npcdmod
        path           /usr/lib/pnp4nagios/npcdmod.o 
        module_type    neb
        args           config_file=/etc/pnp4nagios/npcd.cfg
        }

Controllo con Check_MK

Check_MK è programma che consente di gestire il monitoraggio centralizzato di diversi parametri da parte di Icinga con una singola connessione ad un opportuno agent da installare sulle singole macchine da porre sotto controllo. Il programma inoltre fornisce anche una serie di funzionalità di controllo ed autodiscovery dei servizi ed una interfaccia di controllo alternativa. Per l'integrazione con Icinga il primo passo è installare tutto il necessario sul server:

apt-get install -t squeeze-backports check-mk-server check-mk-config-icinga 

dove in particolare il secondo pacchetto installa tutti i file necessari ad integrare Check_MK con Icinga.

La configurazione di base prevede che si inserisca la lista delle macchine da sottoporre a controllo nel file /etc/check_mk/main.mk, inizialmente ad esempio con qualcosa del tipo (la configurazione è l'assegnazione di una lista in python):

# Put your host names here
# all_hosts = [ 'localhost' ]
all_hosts = [  'localhost', 'www.fountainpen.it', ... ]

Si tenga presente che la semplice installazione Check_MK di default non comporta nessun controllo, il programma infatti si collega agli agent sulle macchine indicate nel precedente file di configurazione, e raccoglie gli eventuali dati disponibili, ma questi sono normalmente utilizzati soltanto all'interno del programma stesso, se si vogliono poter inserire i controlli dentro Icinga occorre richiedere al programma la generazione degli opportuni file di configurazione.

Le operazioni di controllo di Check_MK vengono eseguite tramite il comando check_mk, questo consente di gestire le configurazioni di tutte le macchine controllate con Check_MK creando un opportuno file di configurazione per Icinga sotto /etc/icinga/objects/check_mk/check_mk_objects.cfg. Si può visualizzare l'elenco dei possibili controlli con check_mk -L, mentre con check_mk -I, eventualmente seguito dall'indicazione di una macchina si può attivare la scoperta dei servizi disponibili per il controllo (il comando mostra solo quelli nuovi, se invece si usa check_mk -II vengono cancellati quelli vecchi e ricreati solo quelli presenti). Infine con check_mk ---scan-parents si fa eseguire un al programma un traceroute delle macchine messe sotto controllo, dal quale viene generata automaticamente la mappa delle dipendenze dell'una dall'altra.

Una volta che si sia effettuato il riconoscimento dei servizi per poter utilizzare i dati forniti dall'_agent_ dentro Icinga è necessario lanciare check_mk -R che esegue la generazione dei file di configurazione (nel caso /etc/icinga/objects/check_mk/check_mk_objects.cfg) e poi riavviare il servizio, si devono cioè eseguire i comandi:

check_mk -R
service icinga restart

Si tenga presente però che in dato che Check_MK utilizza il plugin check_icmp di Nagios per controllare lo stato di tutti gli host configurati, se non si fa altro questi risulteranno disattivi (anche se controlli disponibili grazie all'_agent_ risulteranno a posto) in quanto detto plugin deve essere eseguito da root. Esso allora deve essere reso suid in modo da poter funzionare correttamente anche quando invocato da Icinga, di nuovo questo si può fare con il comando:

dpkg-statoverride --update --add root root 4755 /usr/lib/nagios/plugins/check_icmp

che rende la modifica permanente anche nell'aggiornamento dei pacchetti.

L'uso dell'interfaccia web di Check_MK si basa sull'utilizzo di ''livestatus'', una modalità di presentazione dei dati che consente una lettura più veloce ed efficente, cui abbiamo già accennato in precedenta. Questa comporta l'installazione del pacchetto relativo con:

apt-get install -t squeeze-backports check-mk-livestatus

ed una ulteriore configurazione di Icinga; questa può essere fatta usando la nuova funzionalità dei moduli (evitando quindi la direttiva broker_module) inserendo in un file (nel nostro caso livestatus.cfg) nella directory /etc/icinga/modules/ con contenuto:

define module{
        module_name    mklivestatus
        path           /usr/lib/check_mk/livestatus.o
        module_type    neb
        args           /var/lib/icinga/rw/live
        }

dove /var/lib/icinga/rw/live che è il default usato da Check_MK.

Installazione dell'agent di Check_MK

Per poter utilizzare le fuzionalità di Check_MK è però necessario installare sulle macchine da mettere sotto controllo (compresa in genere quella su cui si è installato il server), lo script che esegue il compito di agent. Si tratta di un semplice script di shell che deve essere eseguito con xinetd, quest'ultimo però non viene installato automaticamente e deve essere esplicitamente installato:

apt-get install -t squeeze-backports check-mk-agent xinetd

inoltre dato che l'agent installa un file di configurazione per xinetd in cui il servizio è disabilitato, è necessario modificare /etc/xinetd.d/check_mk impostando:

disable        = no

ed eventualmente aggiungere ulteriori direttive di controllo per bloccare gli accessi solo ai server autorizzati; nel caso di installazione locale sul server stesso si potrà mettere il programma in ascolto solo su localhost con:

bind           = 127.0.0.1

mentre in caso di connessioni da parte di un server remoto, oltre a proteggerle adeguatamente con un firewall, sarà opportuno indicare una restrizione di accesso con:

only_from      = IP.DEL.SERVER.REMOTO

e ci si ricordi di riavviare il servizio con:

service xinetd restart

Si tenga presente che se si installa l'agent sulla macchina stessa su cui gira Icinga, la configurazione di default di quest'ultimo già prevede un controllo eseguito su localhost definito nel file /etc/icinga/objects/localhost_icinga.cfg, che andrà a confliggere con la configurazione creata da check_mk -R, pertanto si abbia cura di rimuovere detto file o di usare con Check_MK un nome diverso per indicare il localhost (ad esempio "127.0.0.1").

Uso di Check_MK come console di controllo

Oltre alle funzionalità di controllo centralizzato tramite il server, Check_MK fornisce anche una console di gestione che si può installare con il pacchetto check-mk-multisite, il programma usa mod_python per cui oltre alla installazione sarà necessario anche riavviare apache:

apt-get install check-mk-multisite
service apache2 restart

Inoltre siccome il programma deve creare la directory /var/lib/check_mk/web/icingaadmin/ ed assegnarne il gruppo a nagios, occorre che l'utente www-data faccia parte di detto gruppo, per questo sarà necessario eseguire il comando:

adduser www-data nagios

ed a questo punto si potrà accedere all'interfaccia Web di Check_MK all'indirizzo http://icinga.mioindirizzo.it/check_mk/.