Controllare Windows con Nagios ed NSClient


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register

Oggi mi e' arrivata una bella richiesta da uno dei nostri clienti: questi hanno un server Windows con una qualche web-applicazione sopra che dovrebbe mandare della mail automatiche in risposta a determinati eventi. Io dico "dovrebbe" perche' pare che qualche cosa non va' per il verso giusto e nessuna mail e' inviata.

Ovviamente il concetto di "verifica la tua web-applicazione" non e' penetrato nel cervello del cliente in questione, il che significa che loro hanno chiesto a noi (cioe' a me) di aggiungere un "controllo" al server per assicurarci che le cose funzionino e che le mail siano inviate.

Io ho cercato di spiegare che se il programma che dovrebbe inviare le mail non lo fa' e' probabilmente perche' e' rotto e se il loro sviluppatore non riesce a metterlo a posto non e' che noi si possa controllare molto, ma anche questo non e' penetrato nel loro cervello.

Quindi l'odierno problema e' stato: come accidenti verifico che quella scusa di server di posta integrato in IIS stia funzionando? Considerando che il server e' dall'altra parte di un firewall e quindi un semplice controllo sulla porta 25 non e' sufficiente?

Abbiamo deciso che la cosa migliore e' verificare dal server stesso se il server di posta risponde (una connessione sulla porta 25 ritorna un '220' come risposta) e che i files nella directory della coda (se esistono) non siano piu' vecchi di X minuti, con X ragionevolmente piccolo.

Inoltre, noi volevamo aggiungere il tutto al nostro server Nagios per ricevere allarmi nel caso in cui il sistema cessi di funzionare. Be' in effetti non e' che noi "volevamo" ma il nostro cliente e' stato molto insistente sulla cosa.

In ogni caso... come accidenti fai questi controlli su Windows?

Questo e' lo scopo di NRPE. NRPE sta' per Nagios Remote Process Execution ed e' un metodo che utilizza un client da installare sulla macchina che si vuole controllare per permettere al proprio server Nagios di inviare dei 'comandi' e ricevere delle 'risposte' in funzione delle cose che si vogliono verificare. E' utile in quei casi in cui si vogliano aggiungere dei controlli personalizzati su un sistema che non possiede un demone snmp che sia configurabile o non configurabile abbastanza. In una parola, per Windows. Il problema con NRPE e' che bisogna installare del software sulla macchina da controllare. Per Windows ci sono un paio di clients disponibili, uno di questi e' NSClient.

NSClient (o meglio: NSClient++) e' un demone per Windows che funziona come client per Nagios, rispondendo alle 'richieste' inviate da un server nagios e fornendo informazioni relative al sistema su cui funziona, come spiegato sopra.

Una delle opzioni di NSClient e' di eseguire un programma o uno script sulla macchina locale e restituire i risultati al server Nagios. Sfortunatamente, la documentazione e' piuttosto scarsa al riguardo, la maggioranza della roba che ho trovato era relativa ai controlli di default che sono attivati automaticamente. Quindi dopo aver speso diverse ore cercando di capire come funziona questo aggeggio ho deciso che avrei scritto un po' di documentazione io.

Vabbe', non c'e' molto da dire al riguardo, e' un semplice installer. Durante l'installazione verra' richiesto se si vogliono attivare certi plugin e se si vogliono applicare delle restrizioni su da quali server (IPs) accettare connessioni. In ogni caso tutto quello che non viene attivato al momento puo' essere attivato dopo manipolando il file .ini, che e' una cosa che occorre fare in ogni caso per aggiungere le parti 'personalizzate'.

Io ho evitato di installare la 'tray' che sarebbe stata inutile dato che nessuno fa' login nel server. Una volta installato il client risponde al server nagios fornendo le informazioni di default (carico di CPU, memoria occupata e cosi' via).

Adesso viene il bello.

Prima di tutto bisogna decidere cosa e come controllare. Come detto prima, io ho deciso che per prima cosa volevo vedere se il server rispondeva sulla porta 25 con un '220', poi che non ci fossero files piu' vecchi di 10 minuti nella directory della coda.

Una volta deciso cosa fare, occorre scrivere un programma o uno script che lo faccia.

Dato che io avevo gia' ActivePerl installato sulla macchina per fare altre cose, ho deciso di usarlo e scrivere un semplice script in perl per fare i miei controlli. Lo script e' uno script Nagios standard, il che significa che deve rispondere con un "error code" diverso a seconda dello stato, 0 per indicare "ok, nessun problema", 1 per "attenzione" e 2 per "errore" (o "critico" che e' la stessa cosa). Un messaggio di testo puo' essere restituito per aggiungere informazioni al riguardo.

Il mio semplicissimo script lo trovate qui. Notare che la directory delle code e' 'hard-coded', questo non e' molto bello ma hei! e' una sola macchina e non volevo sovraelaborare le cose. Anche il controllo degli errori e' praticamente inesistente.

Piazzate lo script sul server e provatelo un paio di volte, tanto per essere sicuri che fa' quello che dovrebbe fare. Non e' una brutta idea il provarlo con diverse directory e/o servizi in modo da verificare che ritorni il valore giusto. Io ho trovato comodo il richiamare lo scritto tramite un semplice programmino batch di "ponte", per non dover richiamare perl direttamente.

Ora viene la parte complicata: attaccarlo to NSClient e quindi a Nagios.

Per aggiungere il controllo in NSClient occorre modificarne la configurazione (doh!), in particolare occorre assicurarsi che le parti seguente siano "attive" nel vostro nsc.ini:

[modules]
CheckExternalScripts.dll
NRPEListener.dll

[NRPE]
port=5666
command_timeout=60
allow_arguments=1
allow_nasty_meta_chars=0
use_ssl=0
allowed_hosts=...

[External Script]
command_timeout=60
allow_arguments=1
allow_nasty_meta_chars=0

[External Scripts]
check_iis_smtp=perl scripts\yourscript.pl

La porta ovviamente dovrete sceglierla in modo che sia permessa attraverso il firewall (se ne avete uno) io ho disabilitato l'uso di SSL perche' nel mio caso i due servers sono in una specie di DMZ quindi non c'e' bisogno di troppe cose. La lista 'allowed_hosts' consente di specificare a quali servers bisogna dare retta, come indirizzo IP. Check_iis_smtp e' il nome che io ho dato al controllo da richiamare, in questo caso richiamo direttamente perl con il mio script. Come detto prima e' anche possibile richiamare un file batch che richiama lo script.

Notare i blocchi "script" e "scriptS". Il blocco 'External Script' consente di specificare certi parametri che sono solo validi per gli script esterni, se questi non sono specificati vengono usati i 'default'.

Una volta fatto questo, e' necessario controllare se tutto funziona correttamente. NSClient e' dotato di una interfaccia a linea di comando per fare questo tipo di test. Aprite un prompt dei comandi, andate nella directory di NSClient e digitate: 'nsclient++.exe /test' a questo punto potete richiamare il vostro test (semplicemente digitando il nome che avete dato al vostro 'check') e vedere se funziona. Se funziona dovreste vedere qualche cosa tipo questo:

checking the script

Se funziona possiamo procedere al passo successivo, se no... eeeehhh... meglio trovare cosa c'e' che non va' e metterlo a posto prima eh? Ricordatevi di riavviare NSClient se funziona.

Per far funzionare il nostro sistema con Nagios occorre il plugin NRPE, questo puo' essere scaricato dal sito di Nagios ed aggiunto alla configurazione. Una volta fatto e' possibile provare a richiamare lo script dal server nagios e vedere se risponde:

/where/is/your/nagios/plugins/check_nrpe -n -H your.windows.client.ip -p 5666 -c check_iis_smtp

Notare che occorre specificare l'indirizzo ip e la porta giuste. Se tutto funziona dovreste vedere la risposta del vostro script.

Ora e' questione di aggiungere un servizio ed un comando per richimare check_nrpe per fare il lavoro. Io ho aggiunto un 'comando' al file command.cfg:

# 'check_iis_smtp' command definition
define command {
        command_name    check_iis_smtp
	command_line    $USER1$/check_nrpe -n -H $HOSTADDRESS$ -p 5666 -c check_iis_smtp $ARG1$
}

E quindi ho aggiunto un 'servizio' per il mio server:

define service {
	host_name               your-host-name-or-ip
	service_description     IIS SMTP
	check_command           check_iis_smtp
	use                     ...
}

Il pezzo 'use' in fondo al servizio mi consente di aggiungere i vari 'template' che contengono le configurazioni standard per i miei servers, questo non e' specifico di NSclient ma di Nagios, il che significa: andatevi a leggere la documentazione di Nagios.

Se Nagios supera il controllo pre-volo (nagios -t), potete riavviarlo e vedere il vostro controllo all'opera.

Aggiungere test personalizzati su Windows usando Nagios non e' difficile, e' solo la documentazione che lascia molto a desiderare.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

1 messaggio this document does not accept new posts
Inc0Grazie Di Inc0 - postato il 06/05/2010 10:53
Grazie infinite per la guida: breve, chiara ma sopratutto FUNZIONANTE. Cosa non darei per trovare sempre delle guide cosė.

--
KNOWLEDGE IS POWER


Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di "sicurezza informatica" (aka: $networkgestapo) di Haarlem. Contatti: mail: davide AT onlyforfun.net , Jabber: davideyeahsure AT gmail.com,

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort