La gestione remota di un sistema server è una delle grandi problematiche di chi si occupa di fornitura di servizi informatici. Soprattutto quando i sistemi in gestione sono molti, e magari dislocati in aree diverse del territorio, il tener monitorata la situazione di tutti i sistemi senza dover passare la propria giornata lavorativa con questo unico scopo, comporta l’uso di una serie di tecnologie.
Per anni, uno dei modi più utilizzati per questo scopo è stato il protocollo SNMP, che consente (oltre alla gestione remota di apparati) l’analisi prestazionale di server ed apparecchiature di rete. I problemi di sicurezza intrinsechi del protocollo però (anche semplicemente la possibilità di gestire remotamente un apparato che esponga un servizio SNMP), hanno reso sempre piuttosto diffidenti i sistemisti nella massiccia adozione di questa tecnologia, pur efficace. Inoltre la non banale configurazione degli strumenti OpenSource in grado di dialogare con SNMP per generare dei grafici che consentano di capire e monitorare l’andamento dei sistemi (MRTG), non ha certo semplificato il lavoro.
Per ovviare a questo problema, è nato un interessante pacchetto applicativo, munin, il cui preciso scopo è quello di rendere semplice ed intuitiva la gestione del monitoraggio remoto anche di numerosi sistemi. In grado di interfacciarsi all’occorrenza anche con periferiche SNMP (per includere nel monitoraggio anche apparecchiature di rete limitando comunque l’esposizione dei servizi SNMP alla rete locale), munin si avvale di una struttura modulare e di un protocollo testuale piuttosto semplice, oltre che di una strutturazione client-server piuttosto semplice da configurare.
Strutturazione
Come si accennava, munin ha una struttura “client-server”: sui nodi da monitorare verrà installata la parte server, che dialoga con l’hardware e raccoglie le informazioni su richiesta del client; questi invece si occupa di contattare i vari server, collezionare i dati e generare delle paginette web con i grafi statistici risultanti dai dati raccolti, tracciati grazie all’uso di RRD Tool.
Installazione e configurazione (debian)
L’installazione, in debian perlomeno, è resa banale dal fatto che sia la parte client che la parte server di munin sono già pacchettizzate. Sarà sufficiente installarli per avere già una prima parte di monitoraggio, che comprende alcuni dati standard quali uso dei filesystem e della memoria, carico del sistema, carico di rete, monitoraggio delle connessioni entranti, entropia disponibile sul sistema, numero di processi e “fork rate”. Il pacchetto “server” si chiama “munin-node”, e viene avviato automaticamente al momento della sua installazione, mentre il pacchetto client andrà configurato adeguatamente come vedremo. Per installare sia il client che il server, daremo il comando
# apt-get install munin munin-node
Potete dare un’occhiata al file di configurazione della parte server di munin, /etc/munin/munin-node.conf che è comunque piuttosto semplice e scarno. L’unico dato eventualmente da modificaere, potrebbe essere il nome dell’host da comunicare al/ai client, che trovate commentato nella versione originale del file di configurazione e che porta quindi munin ad utilizzare i nomi riportati in /etc/hosts per questo aspetto. Altro parametro che potrebbe risultare importante da modificare è l’elenco degli host dai quali accettare connessioni (di default il solo 127.0.0.1), aggiungendoli (sotto forma di espressioni regolari) all’ultima riga del file citato.
La configurazione del nodo è in parte automatizzata dall’applicativo munin-node-configure incluso nel pacchetto e che analizza tutti i plugins installati(che trovate in /usr/share/munin/plugins/) alla ricerca di quelli che hanno un senso sul sistema locale. Questo viene fatto grazie ad un sistema di autoconfigurazione che viene implementato dai vari plugins, i quali rispondono dovrebbero rispondere ad una loro esecuzione con il parametro “autoconf” con un “yes” o con un “no” (o addirittura con dei suggerimenti sulla configurazione) a seconda che il plugin possa funzionare o meno sul sistema. Per aggiungere un plugin a quelli da far utilizzare a munin, sarà sufficiente farne un link simbolico (eventualmente componendone adeguatamente il nome) all’interno della directory /etc/munin/plugins/. Ad esempio, per aggiungere il monitoraggio dell’uptime di sistema e del traffico dell’interfaccia di rete ‘eth1’, sarà sufficiente dare i seguenti comandi:
# ln -s /usr/share/munin/plugins/uptime /etc/munin/plugins/ # ln -s /usr/share/munin/plugins/if_eth1 /etc/munin/plugins/
Al termine della configurazione, basterà riavviare munin per applicare le modifiche richieste
# /etc/init.d/munin-node restart
Alcuni plugins richiedono una configurazione particolare per funzionare: ad esempio i plugin di analisi del traffico, dei processi e del volume di dati scambiato dal server web apache, richiedono che venga attivato, sul server web, una particolare pagina (server-status) che riporta questi dati. Le eventuali configurazioni necessarie al funzionamento dei plugins sono solitamente indicate all’interno dell’intestazione del plugin stesso. Per verificare il funzionamento di un plugin, può essere utile eseguirlo e verificare che stampi a video dati numerici (e non stringhe di errore, o il valore ‘U’)
root@giotto:/etc/munin# /etc/munin/plugins/cpu user.value 24249601 nice.value 26903 system.value 2823798 idle.value 582652748 iowait.value 287010 irq.value 96008 softirq.value 104576
Per quanto riguarda invece al configurazione della parte client, il discorso non è poi molto più complicato. Mettendo le mani nel file /etc/munin/munin.conf, potremo definire l’elenco degli host che il client dovrà contattare ad ogni esecuzione (che dovrebbe essere automaticamente inclusa in cron al momento dell’installazione del pacchetto client), il “nome host” che dovrà richiedere (uno stesso server può gestire, come vedremo, diversi host), l’indirizzo ip da contattare (o il nome fqdn), ed eventualmente il parametro “use_node_name”, che limita, se impostato ad un valore positivo (“yes”, “y” o “1”), il fetch dei dati ai soli configurati per il nodo (escludendo ad esempio macchine monitorate in snmp da quel nodo).
Non troverete username ne passwords: il protocollo di munin, estraendo solamente dati (non è pensato per fare gestione remota dell’apparato come invece è possibile fare con SNMP), non prevede una fase di autenticazione. Per questo motivo può essere interessante configurare munin per accettare connessioni solamente da localhost ed utilizzare ssh per mappare (sotto cifratura) la porta di munin-node (di dafault la 4949) sul sistema che fa il fetch dei dati (dedicherò alla questione un post ad-hoc, nei prossimi giorni).
Il risultato
Una volta che avrete terminato la configurazione del server e del client, quest’ultimo comincerà a generare (di default il /var/www/munin/) delle pagine html che riportano i dati raccolti. Un esempio del risultato, potete trovarlo direttamente sul sito di Munin. Un aspetto interessante di questa interfaccia web, oltre a consentire una comoda visualizzazione dei dati (eventualmente raccolti anche per gruppi, modificando adeguatamente munin.conf), è che nella pagina di riepilogo colora diversamente le sezioni dei vari nodi a seconda dei risultati raccolti: se ad esempio uno dei dischi di un sistema si sta riempiendo, oltre ad inviare una mail all’indirizzo riportato in munin-node.conf (sempre che lo abbiate decommentato) apparirà dapprima in giallo, poi in rosso, nella pagina web, richiamando la vostra attenzione.