last update: 29/ may / 2006
Inizia con questo articolo una serie dedicata al monitoraggio dei sistemi in rete. Si inizia con Nagios!
Chiunque abbia avuto l'opportunità di amministrare una rete con un certo
numero di PC, o comunque una rete in cui sono attivi dei servizi critici, ha
certamente, prima o poi, avuto la necessità di monitorare gli elementi di
criticità della stessa. Esistono infatti situazioni ove l'interruzione di un
servizio può portare un grosso danno economico, commerciale o d'immagine. In
altri casi, ancora più notevoli, un server bloccato o un servizio mancante può
mettere a rischio delle persone.
Quasi tutti i grossi nomi del' informatica hanno a catalogo almeno una soluzione
per tale necessità. Sono, solitamente, soluzioni che, a causa dei loro costi,
trovano giustificazione di impiego solo dove la rete da amministrare sia
veramente complessa o dove la criticità dei servizi sia molto elevata.
Tali soluzioni sono quasi sempre notevolmente complesse da avviare e, in seguito,
da utilizzare e per mitigare (apparentemente) tale situazione portano, a volte,
con se una serie di servizi aggiuntivi per aiutare gli amministratori di rete
anche nella gestione della stessa.
Non potevano mancare ovviamente anche delle soluzioni "Open Source" al problema
e dopo averne provate alcune la mia scelta è caduta su Nagios.
Questo programma è stato scritto da Ethan Galstad sulla base di un suo programma precedente, Netsaint, il quale aveva, a suo parere, dei difetti di architettura tali da richiedere la riscrittura del codice. Non contiene funzioni per la gestione della rete ma solo per il monitoraggio di apparecchiature e servizi. Ho volutamente scritto apparecchiature, e non computer, in quanto il programma è in grado di monitorare anche switch, router, stampanti e altro, oltre che servizi più o meno standard come HTTP, FTP, POP3 e similari.
Nagios è fortemente personalizzabile, in quanto i controlli avvengono tramite programmi esterni (plugins) e la disponibilità del codice sorgente facilità la scrittura di nuovi test, qualora non esistessero già. La scelta di non includere i test all'interno del cuore del programma è, a mio parere, molto valida in quanto rende il programma facilmente espandibile a nuove funzionalità e nello stesso tempo permette a Galstad ed ai suoi collaboratori di concentrarsi solo sul motore del programma stesso.
Una volta rilevato un problema in un dispositivo sotto monitoraggio il programma è in grado di segnalare i malfunzionamenti attraverso la sua interfaccia (Web), spedendo un e-mail ad un gruppo di persone definito in precedenza o addirittura di avvisarle attraverso un SMS. Tale fase, detta notifica, è anch'essa fortemente personalizzabile e può essere gestita con un qualsiasi programma esterno al motore di Nagios.
Di seguito vedremo come installare il programma ed alcuni esempi di funzionamento.Nella sezione download del sito di Nagios sono disponibili sia i pacchetti precompilati per Red Hat e Fedora GNU/Linux, sia i sorgenti da compilare. Sarebbe opportuno sempre ovviamente l'utilizzo dei sorgenti anche per avere a disposizione il codice per eventuali modifiche.
I plugins per Nagios sono, come detto, sviluppati separatamente dal corpo principale del programma. E` consigliabile, quindi , di scaricare subito anche i plugins dal sito http://sourceforge.net/projects/nagiosplug/.
Dal sito NagiosExchange potete scaricare il demone NSCA utile per l'inoltro dei test passivi ed il modulo NRPE per l'esecuzione di test remoti. Lo stesso sito è una fonte inesauribile di plugins e suggerimenti. Non sono indispensabili, ma si possono ottenere anche delle icone per abbellire l'interfaccia web. Sono facilmente rintracciabili nel sito NagiosEchange.
Fra i prerequisiti del programma vi sono:
setlocale (LC_ALL, "") in setlocale (LC_ALL, "C")La modifica è banale ma impossibile senza i sorgenti.
L'installazione è semplice, anche se non banale, e ben documentata nel manuale
in linea. Chi ne abbia la possibilità tenga a disposizione il manuale in linea
per tutta la durata dell'installazione per copiare direttamente i comandi dal
manuale ad un terminale. Chi non volesse rimanere connesso sappia che dopo la
aver scompattato i sorgenti il manuale è disponibile localmente in
nagios-2.0b4/html/docs/
E' bene precisare che le operazioni di installazione vanno eseguite come utente
root. Tale pratica è solitamente sconsigliata ma, in questo caso, non può essere
evitata. Si suppone comunque che se dovete monitorare dei sistemi e installare un
programma di monitoraggio sappiate muovervi con la dovuta cautela fra i file
di sistema.
Scompattiamo i sorgenti i una cartella a nostra scelta:
#tar -zxvf nagios-2.0b4.tar.gz
Creiamo l'utente ed il gruppo per nagios e aggiungiamo al gruppo l'utente apache che deve avere accesso all'interfaccia web del programma. Il programma utilizzerà i permessi di questo utente/gruppo durante l'esecuzione aumentando il grado di sicurezza del sistema. Non sarebbe sicuro infatti se Nagios venisse fatto girare con i permessi di root in quanto in caso di exploit di Nagios a causa di una suo (sempre possibile) bug si riuscirebbe a guadagnare il controllo del sistema. Creando un utente ad-hoc il problema viene notevolmente ridotto.
# adduser nagios # /usr/sbin/groupadd nagcmd # /usr/sbin/usermod -G nagcmd apache # /usr/sbin/usermod -G nagcmd nagios
Creiamo la directory che ospiterà il programma e settiamo i corretti permessi per l'utente appena creato.
# mkdir /usr/local/nagios # chown nagios.nagios /usr/local/nagios
Benché sia possibile compilare il programma con varie opzioni relative ai percorsi di utilizzo, a meno che non vi siano rischi di sicurezza, si consiglia di non modificare le impostazioni standard in modo che le istruzioni seguenti siano coerenti. Quindi usiamo l'istruzione configure senza parametri
# cd nagios-2.0b4 # ./configure ------ [---si omette l'output, per brevità, riportando solo l'ultima parte---] ------ *** Configuration summary for nagios 2.0b4 08-02-2005 ***: General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagios Embedded Perl: no Event Broker: yes Install ${prefix}: /usr/local/nagios Lock file: ${prefix}/var/nagios.lock Init directory: /etc/rc.d/init.d Host OS: linux-gnu Web Interface Options: ------------------------ HTML URL: http://localhost/nagios/ CGI URL: http://localhost/nagios/cgi-bin/ Traceroute (used by WAP): /bin/traceroute Review the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs.
Il risultato dell'operazione di configurazione dovrebbe riportare tutti i percorsi configurati. Può essere utile prendere nota di tali dati e poi passare a compilare ed installare:
# make all # make install # make install-init # make install-commandmode # make install-config
L’ultima istruzione installa i file di esempio di configurazione che ci serviranno poi per avere una base da cui partire senza riscriverli da zero. A questo punto è possibile passare all’installazione dei plugins che vanno scaricati e compilati separatamente e alla configurazione dell’interfaccia web. Le operazioni sono le seguenti:
# tar -zxvf nagios-plugins-1.4.2.tar.gz # cd nagios-plugins-1.4.2 # ./configure # make # make install
La configurazione dell'interfaccia web si basa sull'ipotesi che utilizziate il
server Apache e sia installato nella stessa macchina in cui è installato Nagios.
La corretta configurazione di Apache è, chiaramente, un prerequisito e le note
che seguono servono per la sola configurazione di Nagios.
Nel nostro esempio le modifiche vanno applicate al file di configurazione di
Apache ovvero:
# vi /etc/httpd/conf/httpd.conf
alla fine del file, come da manuale di Nagios, aggiungiamo quanto segue:
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbinAllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all Alias /nagios /usr/local/nagios/shareOptions None AllowOverride AuthConfig Order allow,deny Allow from all AllowOverride AuthConfig order allow,deny allow from all Options ExecCGI AllowOverride AuthConfig order allow,deny allow from all
Fra le varie istruzioni qui sopra vi è quella di utilizzare dei file locali per la verifica degli accessi. Quindi è necessario configurare un file di accesso come segue:
# cd /usr/local/nagios/sbin # vi .htaccessed inserire nel file quanto segue:
AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-userCreiamo quindi i permessi per un paio di utenti:
# cd /usr/local/nagios/etc # htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin New password: *** Re-type new password: *** Adding password for user nagiosadminAggiungete anche il vostro account abituale (negli esempi sarà rudig)
# htpasswd /usr/local/nagios/etc/htpasswd.users rudig New password: Re-type new password: Adding password for user rudig
Ovviamente va aggiunto il dovuto permesso per ogni amministratore o utente che deve accedere all'interfaccia web di Nagios.
A questo punto si può considerare completata l'installazione e digitando nel browser al percorso http://localhost/nagios/ (se utilizzate il browser in una macchina diversa da quella che contiene Nagios bisognerà ovviamente sostituire a localhost l'indirizzo del server) apparirà una finestra simile a quella che segue:
chiaramente selezionando le varie voci dei menù si otterranno solo degli errori, ma se si riuscirà a visualizzare questa pagina si potrà passare alla fase di configurazione.
Inizialmente si preparano i file di configurazione partendo dai file di esempio. In seguito ottimizzeremo questa struttura per avere una migliore gestione.
# cd /usr/local/nagios/etc/ # cp nagios.cfg-sample nagios.cfg # cp checkcommands.cfg-sample checkcommands.cfg # cp resource.cfg-sample resource.cfg # cp misccommands.cfg-sample misccommands.cfg # cp cgi.cfg-sample cgi.cfg # cp minimal.cfg-sample minimal.cfg
Il file di base della configurazione (nagios.cfg) contiene dei riferimenti a dei file esterni che vengono inclusi. Nella configurazione di esempio il file incluso che andremo a modificare è uno solo (minimal.cfg).
Iniziamo quindi a modificare il file minimal.cfg:
All'inizio del file vengono definiti i Time Periods ovvero le finestre temporali
nelle quali verranno gestiti gli eventi o spedite le notifiche. Il file definisce
solo il periodo "24x7" ovvero tutte le ventiquattro ore di tutti i giorni della
settimana. Per iniziare con il piede giusto consiglio di definire altri due
periodi, uno relativo alle ore lavorative, l'altro relativo alle ore non lavorative.
Se nel vostro caso si tratta di turni di lavoro nelle 24 ore, o simili, può essere
utile definire tali turni.
Quindi al termine della definizione del periodo 24x7 aggiungiamo altri due periodi più un periodo per definire un periodo vuoto utile per indicare la non esecuzione di un evento o altre finezze del genere:
# '24x7' timeperiod definition define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 } # 'workhours' timeperiod definition define timeperiod{ timeperiod_name workhours alias "Normal" Working Hours monday 08:00-18:00 tuesday 08:00-18:00 wednesday 08:00-18:00 thursday 08:00-18:00 friday 08:00-18:00 } # 'nonworkhours' timeperiod definition define timeperiod{ timeperiod_name nonworkhours alias Non-Working Hours sunday 00:00-24:00 monday 00:00-08:00,18:00-24:00 tuesday 00:00-08:00,18:00-24:00 wednesday 00:00-08:00,18:00-24:00 thursday 00:00-08:00,18:00-24:00 friday 00:00-08:00,18:00-24:00 saturday 00:00-24:00 } # 'none' timeperiod definition define timeperiod{ timeperiod_name none alias No Time Is A Good Time }
Passiamo ora direttamente alla modifica dei contatti ovvero l'elenco delle persone che verranno contattate ogni volta che viene rilevato un problema. Da notare che Nagios permette di definire dei contatti diversi per ogni macchina, gruppo di macchine, servizio, gruppi di servizi. Nell'esempio che segue inserirò un solo nominativo come contatto, quindi, eliminate i contatti standard inseriti e inserite i vostri riferimenti come da esempio:
# 'rudig' contact definition define contact{ contact_name rudig #nome dell'account alias Rudi Giacomini #nome esteso service_notification_period workhours #si vuole ricevere notifiche host_notification_period workhours #solo durante l'orario di lavoro service_notification_options c,r host_notification_options d,r service_notification_commands notify-by-email #riceveremo la host_notification_commands host-notify-by-email #notifica via email email rudig@localhost }
Come si vede la definizione del precedente periodo temporale "workhours" è
già utile in quanto impiegata per indicare gli orari nei quali si desidera
ricevere la notifica. Per quanto riguarda le voci service_notification_options e
host_notification_options vengono utilizzate per indicare quali stati del sistema
sotto controllo si desidera vengano notificati. I valori possibili sono:
u=unreachable (irragiungibile), d= down (spento-assente), r=recoveries (ripristino
del servizio), f=flapping (intermittente-instabile), w=warning (avvisi),
c=critical (condizione critica-guasto), n=none (nessuna segnalazione).
Modificate anche i gruppi dei contatti inserendo i nominativi aggiunti come da esempio:
define contactgroup{ contactgroup_name admins alias Nagios Administrators members rudig }
Nel nostro esempio è sufficiente un gruppo, ma se gestite un'azienda molto ampia con personale molto specializzato potreste definire un gruppo da contattare per i problemi relativi a Linux, un' altro gruppo per i database, uno per il gestionale e così via. Potrebbe essere importane anche la definizione di contatti o gruppi di contatti "geograficamente" vicini ai dispositivi da controllare; cosa ancora più vera nel caso di reti distribuite sul territorio.
Un passo ulteriore: Cancellate la definizione dei comandi dal file minimal.cfg. Cancellate tutta la sezione. I comandi riportati in tale file sono un duplicato di quelli del file checkcommands.cfg che viene, giustamente, usato dal file nagios.cfg.
Ora la parte più importante ovvero la definizione di cosa controllare. Seguiamo
per un attimo il file di esempio e decidiamo di mettere sotto controllo l' host
che esegue Nagios stesso.
Modifichiamo leggermente l' host ed il gruppo di default ottenendo quanto segue:
define host{ use generic-host ;ci basiamo su un template generico predefinito host_name localhost alias Nagios Server address 127.0.0.1 ;indirizzo per il momento usiamo localhost check_command check-host-alive ; tipo di test da eseguire max_check_attempts 10 ;tentativi massimi notification_interval 120 notification_period 24x7 notification_options d,r contact_groups admins } # We only have one host in our simple config file, so there is no need to # create more than one hostgroup. define hostgroup{ hostgroup_name test alias Primo test members localhost }
Per quanto riguarda i servizi sotto test manteniamo inalterato quanto proposto nei files di esempio.
Ultimo sforzo: sistemiamo i permessi per l'interfaccia grafica editando il file
cgi.cfg individuate tutte le righe che iniziano con authorized_for_ rimuovete il
commento e inserite alla fine il nome che avete definito quando avete configurato
gli accessi alla sezione web.
La riga di esempio dovrebbe chiarire più di mille parole:
authorized_for_system_information=admin,nagios,rudig
Dopo aver preparato la configurazione Nagios mette a disposizione un comando per verificare la stessa:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
E` possibile preparare uno script per semplificare il test, sia per evitare di digitare ogni volta tutta la sintassi sia perché sia il comando sia il file da testare saranno sempre gli stessi, in quanto, partendo dal file nagios.cfg, il comando di test è in grado di testare tutti i file dipendenti inclusi a partire da questo. Quindi con
# vi /usr/bin/chechnagios
inserendo le righe seguenti:
#!/bin/sh /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
e poi settando il file come eseguibile:
# chmod +x /usr/local/bin/chechnagios
si può eseguire il comando. Quindi ora è possibile testare il file di configurazione:
# checknagios Nagios 2.0b4 Copyright (c) 1999-2005 Ethan Galstad (http://www.nagios.org) Last Modified: 08-02-2005 License: GPL Reading configuration data... Running pre-flight check on configuration data... Checking services... Checked 5 services. Checking hosts... Checked 1 hosts. Checking host groups... Checked 1 host groups. Checking service groups... Checked 0 service groups. Checking contacts... Checked 1 contacts. Checking contact groups... Checked 1 contact groups. Checking service escalations... Checked 0 service escalations. Checking service dependencies... Checked 0 service dependencies. Checking host escalations... Checked 0 host escalations. Checking host dependencies... Checked 0 host dependencies. Checking commands... Checked 22 commands. Checking time periods... Checked 4 time periods. Checking extended host info definitions... Checked 1 extended host info definitions. Checking extended service info definitions... Checked 0 extended service info definitions. Checking for circular paths between hosts... Checking for circular host and service dependencies... Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
come si vede va tutto bene e possiamo verificare il sistema facendo partire il demone di controllo:
# service nagios start
e riaprendo il browser possiamo finalmente ammirare il risultato controllando i servizi:
Come si vede dal' immagine oltretutto nella configurazione di default c'è un errore nella definizione di un servizio che, quindi, risulta come un problema.
Poiché si voleva solo eseguire un test del sistema è possibile ignorare l'errore relativo al comando check_procs e passare a qualcosa di più reale.
Passiamo ad un esempio un po più serio e supponiamo di dover controllare un server che ospita un servizio web con un database MySQL e un mail server. Supponiamo che il server Nagios abbia indirizzo 192.168.1.22 e il Web server 192.168.1.8 e che i due host si trovino sulla stessa rete locale.
Per iniziare a migliorare la gestione manteniamo il file minimal.cfg che conterrà, invariate, le definizione dei periodi temporali, dei contatti e dei gruppi di contatti. Separiamo le definizione degli hosts e dei servizi in due file aggiuntivi. Modifichiamo quindi per primo nagios.cfg rimuovendo il commento dalle righe relative a hosts e services:
#cfg_file=/usr/local/nagios/etc/hostgroups.cfg cfg_file=/usr/local/nagios/etc/hosts.cfg cfg_file=/usr/local/nagios/etc/services.cfg #cfg_file=/usr/local/nagios/etc/timeperiods.cfg
rimuoviamo da minimal.cfg qualsiasi riferimento a host e servizi e andiamo a preparare hosts.cfg
Prima di inserire le configurazioni degli host e dei servizi chiariamo un
concetto sul modello di definizione usato da Nagios: Nagios permette l'uso dei
template (modelli) per le definizione di host e servizi. Si possono cioè inserire
delle descrizioni generiche con già preconfigurati tutti i parametri standard.
Nella definizione del singolo host o servizio si può indicare di utilizzare il
modello e poi aggiungere solo i parametri mancanti o quelli che variano rispetto
al modello.
Fra l'altro è permesso l'uso di modelli in cascata cosa che sarà immediatamente
sfruttata e descritta:
Creiamo il file hosts.cfg e inseriamo il template generico di host già presente nel file minimal.cfg.
################################################################################ # HOST DEFINITIONS ################################################################################ # Generic host definition template define host{ name generic-host ; il nome di questo template notifications_enabled 1 ; Notifiche abilitate event_handler_enabled 1 ; Eventi abilitati flap_detection_enabled 1 ; Rilevamento stati indefiniti abilitato process_perf_data 1 ; Analisi performance abilitata retain_status_information 1 ; Mantenimento stato d'errore retain_nonstatus_information 1 ; Mantenimento informazioni aggiuntive register 0 ; NON VA` REGISTRATO NON E` UN HOST REALE. }
Da questo ereditiamo subito un modello più dettagliato:
# Template più dettagliato define host{ use generic-host ; Eredita il template precedente name my_host check_command check-host-alive ;Test di default max_check_attempts 10 ;Massimo num. tentativi notification_interval 120 ;Intervallo di notifica notification_period 24x7 ;Riferimento al periodo notification_options d,r ; Eventi da notificare contact_groups admins ;Gruppo da contattare register 0 ; NON VA` REGISTRATO NON E` UN HOST REALE. }
Definiamo ora il server da controllare:
# 'web_server' definizione define host{ use my_host ; Eredita i modelli host_name web_server ;nome del server alias Linux Web & Mail address 192.168.1.8 ;indirizzo } #informazioni aggiuntive define hostextinfo { host_name web_server icon_image linux.png icon_image_alt Linux Host vrml_image linux.png statusmap_image linux.gd2 }
Nelle informazioni aggiuntive sono stati inseriti solo i riferimenti alle icone da usare.
E ora il gruppo (anche se per ora abbiamo un solo host)
################################################################################ # HOST GROUP DEFINITIONS ################################################################################ # 'linux-boxes' host group define hostgroup{ hostgroup_name linux-boxes alias Linux Servers members web_server }
Passiamo quindi alla definizione dei servizi nel file services.cfg:
################################################################################ # SERVICE DEFINITIONS ################################################################################ # template per un servizio generico define service{ name generic-service ; Nome del template active_checks_enabled 1 ; Controllo di tipo attivo abil. passive_checks_enabled 1 ; Controllo passivo abilitato parallelize_check 1 ; Attiva controlli in parallelo obsess_over_service 1 ;Se necessario mantiene il monitoraggio check_freshness 0 ; Non controlla se il dato è fresco notifications_enabled 1 ; Notifiche abilitate event_handler_enabled 1 ; Abilita la gestione del servizio flap_detection_enabled 1 ; Abilita su stato instabile process_perf_data 1 ; Abilita controllo performances retain_status_information 1 ; Mantiene le informazioni su riavvio retain_nonstatus_information 1 register 0 ; NON REGISTRA IL SERVIZIO (TEMPLATE) } # Test del mail server define service{ use generic-service ; Usa il template precedente host_name web_server ;nome server service_description SMTP ;nome servizio is_volatile 0 ;non è volatile check_period 24x7 ;periodo usato per i test max_check_attempts 3 ;massimo numero di tentativi normal_check_interval 3 ;intervallo fra i test retry_check_interval 1 ;intervallo in caso di errore contact_groups admins ;contatti notification_interval 120 ;intervallo fra le notifiche notification_period 24x7 ;periodo di notifica notification_options w,u,c,r ;errori notificati check_command check_smtp ;comando usato per i test } # Test del web server define service{ use generic-service ; Usa il template precedente host_name web_server ;nome server service_description HTTP ;nome servizio is_volatile 0 ;non è volatile check_period 24x7 ;periodo usato per i test max_check_attempts 3 ;massimo numero di tentativi normal_check_interval 3 ;intervallo fra i test retry_check_interval 1 ;intervallo in caso di errore contact_groups admins ;contatti notification_interval 120 ;intervallo fra le notifiche notification_period 24x7 ;periodo di notifica notification_options w,u,c,r ;errori notificati * check_command check_http }
*Per quel che riguarda gli errori notificati le opzioni sono: w=warning (avvisi), c=critical (errori critici), u=unknown (sconosciuto) e r=recoveries (riavvio) f=flapping(instabile) n=none (nessuna segnalazione).
Abbiamo definito due dei tre servizi che ci eravamo prefissi di controllare. In
caso di errore di un servizio verrà inviata una notifica al gruppo indicato.
Testiamo la nuova configurazione con il comando
# checknagios Nagios 2.0b4 Copyright (c) 1999-2005 Ethan Galstad (http://www.nagios.org) Last Modified: 08-02-2005 License: GPL Reading configuration data... Running pre-flight check on configuration data... Checking services... Checked 2 services. Checking hosts... Checked 1 hosts. Checking host groups... Checked 1 host groups. Checking service groups... Checked 0 service groups. Checking contacts... Checked 1 contacts. Checking contact groups... Checked 1 contact groups. Checking service escalations... Checked 0 service escalations. Checking service dependencies... Checked 0 service dependencies. Checking host escalations... Checked 0 host escalations. Checking host dependencies... Checked 0 host dependencies. Checking commands... Checked 22 commands. Checking time periods... Checked 4 time periods. Checking extended host info definitions... Checked 1 extended host info definitions. Checking extended service info definitions... Checked 0 extended service info definitions. Checking for circular paths between hosts... Checking for circular host and service dependencies... Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
La verifica ci conferma che abbiamo definito un host e due servizi per cui facciamo ripartire Nagios
# service nagios restart
e apriamo l'interfaccia web per verificare:
Non male come primo risultato ma dobbiamo ancora testare il database.
Per il test del database MySQL dobbiamo modificare i comandi standard aggiungendo
un comando ad-hoc. Nella directory /usr/local/nagios/libexec troviamo il comando
check_mysql ed eseguendolo col l'opzione - help otteniamo
# ./check_mysql --help check_mysql (nagios-plugins 1.4.2) 1.26 Copyright (c) 1999-2004 Nagios Plugin Development TeamThis program tests connections to a mysql server Usage: check_mysql [-d database] [-H host] [-P port] [-u user] [-p password] [-S] Options: -h, --help Print detailed help screen -V, --version Print version information -H, --hostname=ADDRESS Host name or IP Address -P, --port=INTEGER Port number (default: 3306) -d, --database=STRING Check database with indicated name -u, --username=STRING Connect using the indicated username -p, --password=STRING Use the indicated password to authenticate the connection ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <== Your clear-text password will be visible as a process table entry -S, --check-slave Check if the slave thread is running properly. There are no required arguments. By default, the local database with a server listening on MySQL standard port 3306 will be checked Send email to nagios-users@lists.sourceforge.net if you have questions regarding use of this software. To submit patches or suggest improvements, send email to nagiosplug-devel@lists.sourceforge.net
Notate che viene chiaramente indicato che la password utilizzata sarà visibile in chiaro per cui non utilizzate questo test in un ambiente a rischio. Modifichiamo, quindi, il file checkcommands.cfg aggiungendo banalmente:
# 'check_mysql' command definition define command{ command_name check_mysql command_line $USER1$/check_mysql -d my_db -H 192.168.1.4 -u rudig -p testpass }
e poi il file services.cfg aggiungendo:
# Test del database define service{ use generic-service ; Usa il template precedente host_name web_server ;nome server service_description MYSQL ;nome servizio is_volatile 0 ;non è volatile check_period 24x7 ;periodo usato per i test max_check_attempts 3 ;massimo numero di tentativi normal_check_interval 3 ;intervallo fra i test retry_check_interval 1 ;intervallo in caso di errore contact_groups admins ;contatti notification_interval 120 ;intervallo fra le notifiche notification_period 24x7 ;periodo di notifica notification_options w,u,c,r ;errori notificati check_command check_mysql }
Dopo il solito riavvio otterremo il risultato voluto.
Chiudo qui questo primo articolo dopo avere fornito gli elementi base per iniziare ad operare con Nagios.
Mi rendo conto che molti di voi avrebbero potuto ritrovare quasi tutte queste informazioni nel manuale, ma erano necessarie per capire quanto verrà esposto nel prossimo articolo nel quale vedremo ulteriori esempi di utilizzo del programma, ricavati da casi reali, e , mi auguro, molto più interessanti di quanto visto finora.