Configurare i check passivi in Nagios per l'integrazione con Munin
Continuo la serie di guide sulla configurazione di Nagios spiegando come attivare i check passivi con NSCA e come usare Munin per avvertire Nagios di ciò che non va’.
Intanto ricordo i link alla prima e alla seconda parte della guida:
Tornando a Nagios e Munin: l’uso dei check passivi può tornare utile se si va ad installare Nagios in una rete in cui è già presente Munin che, per chi non lo conoscesse, è un software che crea grafici di andamento di una lunga serie di servizi o aspetti dei server (anch’esso configurabile con agenti su vari server e un’applicazione centralizzata per la raccolta dei dati). Se Munin non fosse già installato si può valutare una configurazione Nagios-centrica con i check effettuati da NRPE e i grafici fatti con NagiosGraph.Nel mio caso era già presente Munin e ho quindi optato per la configurazione dei check passivi.
Configurazione del server (Nagios e nsca)
Si comincia come sempre installando i pacchetti necessari:apt-get install libmcrypt-dev xinetdQuindi si scarica NSCA dalla pagina degli addon di Nagios, si scompatta, si compila e si installa:
tar xzf nsca-2.7.2.tar.gz cd nsca-2.7.2/ ./configure prefix=/usr/local/nagios –with-nsca-user=nagios –with-nsca-grp=nagcmd make all cp -a src/nsca /usr/local/nagios/bin/ cp sample-config/nsca.cfg /usr/local/nagios/etc/ chown nagios:nagcmd /usr/local/nagios/etc/nsca.cfg chmod g+r /usr/local/nagios/etc/nsca.cfg cp sample-config/nsca.xinetd /etc/xinetd.d/nscaBisogna anche aggiungere al file /etc/services il servizio NSCA con la riga:
nsca   5667/tcp   # NSCANel file /etc/xinetd.d/nsca bisogna modificare il parametro only_from per consentire l’accesso al server in cui gira Munin, poi possiamo riavviare xinetd.
Configurazione del client (send_nsca e Munin)
Nel client da cui arriveranno i check (ovvero dove gira Munin) bisogna ugualmente scaricare il pacchetto NSCA e compilarlo. Differisce l’installazione del binario che in questo caso è send_nsca e può essere posizionato dove si vuole (stessa cosa vale per il suo file di configurazione). Dato che nel mio caso Munin e Nagios sono sullo stesso server ho usato la directory di Nagios per ospitare questi file:cp -a src/send_nsca /usr/local/nagios/bin/ cp sample-config/send_nsca.cfg /usr/local/nagios/etc/Se i due software sono su server diversi potete impostare un metodo di cifratura nel file send_nsca.cfg e impostare una password (che deve essere la stessa sul server e sul client).
Proviamo adesso se send_nsca funziona. I check passivi consistono in una riga contenente:
HOSTNAME[tab]SERVIZIO[tab]CODICE[tab]DESCRIZIONEquindi per fare un test possiamo creare un file con il contenuto:
hostAcaso  pippo  0  OKe fare un test di connessione con:
/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg < test 1 data packet(s) sent to host successfully.Nei log di Nagios troveremo:
nagios: Warning:Â Passive check result was received for service ‘pippo’ on host ‘hostAcaso’, but the host could not be found!Funziona! Non fatevi spaventare dal warning: Nagios ha ricevuto il check ma non ha nessun host corrispondente nella sua configurazione. Niente di male, glielo spiegheremo più tardi.
Possiamo quindi configurare Nagios per accettare i check passivi. Per farlo andiamo nel server e inseriamo nel file etc/objects/templates.cfg il template per un servizio che accetta sono check passivi:
define service{ name                           passive-service use                            generic-service active_checks_enabled          0 passive_checks_enabled         1 flap_detection_enabled         0 register                       0 is_volatile                    0 check_period                   24x7 max_check_attempts             1 normal_check_interval          5 retry_check_interval           1 check_freshness                0 contact_groups                 admins notification_options           w,u,c,r stalking_options               w,c,u notification_interval          120 check_command                  check_dummy!0 }Inseriamo poi nel file etc/objects/commands.cfg la definizione del comando check_dummy:
define command{ command_name   check_dummy command_line   $USER1$/check_dummy $ARG1$ }Fatto questo possiamo inserire un check di prova in un host:
define service{ use                            passive-service host_name                      hostCheEsiste service_description            TestMessage }Una volta riavviato Nagios vedremo questo servizio in stato pending. Modificando il file di prima con:
hostCheEsiste   TestMessage   0    Messaggio di OKed eseguendo nuovamente:
/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg < testpossiamo mettere il servizio in stato di OK.
Per finire dobbiamo dire a Munin di chiamare Nagios quando qualcosa non va. Per farlo dobbiamo modificare il file munin.conf inserendo:
contacts nagios contact.nagios.command /usr/local/nagios/bin/send_nsca -H localhost -c /usr/local/nagios/etc/send_nsca.cfgModificate le path secondo la vostra configurazione e inserite nel file send_nsca.cfg l’eventuale password per comunicare con NSCA.
Ma come funzionano in dettaglio gli avvertimenti di Munin?
Munin si basa su plugin e ognuno di essi ha dei limiti. Per vederli basta lanciare (in questo caso interrogo il plugin cpu):munin-run cpu configNella risposta si possono individuare i limiti:
system.warning 60 system.critical 100Tali limiti possono essere monitorati da munin-limits, un eseguibile che, per essere lanciato automaticamente, va inserito in crontab. Di base ne trovate una configurazione in /etc/cron.d/munin (se non c’è createlo). Io l’ho modificato così:
*/5 * * * *Â Â Â Â munin if [ -x /usr/share/munin/munin-limits ]; then /usr/share/munin/munin-limits –force –contact nagios –contact old-nagios; fiQuindi ogni 5 minuti fa il check e contatta Nagios per passargli il risultato.
L’ultima cosa da fare è adattare i limiti di ogni plugin secondo le proprie esigienze. Si possono definire in munin.conf per ogni host:
df._mapper_sda1_vm_root.warning     0:90 df._mapper_sda1_vm_root.critical    0:95 df.notify_alias    Disk usageLa logica con cui vengono definiti i limiti è un po’ cervellotica e dipende molto dal tipo di plugin. In questo caso ho usato df che controlla l’uso del disco. Il limite di warning 0:90 viene superato se il limite è al di fuori di questo range (il range è 0:100). Ma a sua volta il limite critico è al di fuori del range 0:95. Il risultato è che il plugin entra in warning se la partizione è occupata tra il 90% e il 94% e in critical da 95% in sù. Vi lascio divertire con gli altri plugin :)
Inseriamo in Nagios questi check
Ho già mostrato prima come inserire un check passivo in un host, ovvero:define service{ use                            passive-service host_name                      hostCheEsiste service_description            TestMessage }Per accettare un check passivo valido da Munin bisogna modificare service_description affinchè sia uguale al nome del servizio che definisce il plugin di Munin. Dato che hanno nomi non facilmente individuabili e che a volte contengono caratteri incompatibili con Nagios (ad esempio %) una cosa furba è rinominarli in munin.conf con .notify_alias (guardate qualche riga più in sù nel caso del df) e usare quell’alias in Nagios.
A questo punto la teoria è finita e non rimane altro da fare che iniziare a scrivere le definizioni dei check in Nagios e le configurazioni dei plugin in Munin, buon lavoro!