= Munin = Munin e` un sistema di monitoraggio "a lungo termine". Non e` realtime, legge i suoi valori ogni 5 minuti, e quindi non e` detto che sia adatto a ogni necessita`. La sua forza e` che permette, sul lungo termine (ore o giorni) di visualizzare l'andamento di moltissimi parametri delle macchine monitorate, permettendo cosi` di vedere se ci sono dei pattern riconoscibili. Munin e` composto di un "server", ovvero il computer che raccoglie e visualizza i dati (su una pagina web), e di uno o piu` "nodi", ovvero i computer che vengono monitorati. Per monitorare un singolo computer e` possibile (e necessario) installare il server e il nodo sullo stesso computer. Come purtroppo capita fin troppo spesso, la documentazione di Munin non e` proprio il massimo. Questa guida e` basata su Debian 11 Bullseye == Installazione di un server e di un nodo sullo stesso host == * Installiamo Munin (completo) con il comando {{{ aptinstall munin }}} * Oppure, per l'ultima versione, usiamo i backports: {{{ apt -t bullseye-backports install munin }}} * Installiamo apache2 con i moduli necessari a Munin: {{{ apt install apache2 libcgi-fast-perl libapache2-mod-fcgid }}} == Configurazione di Munin per generare pagine web dinamiche == La configurazione che vi mostro qui e` fatta per generare dinamicamente i grafici e le pagine web. Qui ci sta una piccola spiegazione: Munin puo` generare delle pagine web (e relativi grafici) ogni 5 minuti a mezzo di uno script in cron, oppure puo` limitarsi a raccogliere i dati ogni 5 minuti, e generare le pagine web e i grafici dinamicamente quando si accede alle pagine web stesse per visualizzarle. E` logico che nel primo caso la visualizzazione delle pagine web sara` istantanea, a scapito pero` di dover consumare tempo macchina per rigenerare i grafici ogni 5 minuti anche se nessuno li visualizzera` per giorni o mesi. Nel secondo caso invece la visualizzazione delle pagine richiedera` risorse, pero` ridurremo il carico nel processo di raccolta dei dati che gira ogni 5 minuti. Quale delle due soluzioni sia la migliore non lo so, sinceramente. La configurazione base di Munin (/etc/munin/munin.conf) è quasi tutta commentata. La lasciamo stare così com'è e creiamo delle config dentro a /etc/munin/munin.conf.d per fare le nostre modifiche. * Creare un file dentro {{{/etc/munin/munin.conf.d}}} con un nome che vogliamo noi, tipo, che so, "munin-local.conf" e ci mettiamo dentro le nostre configurazioni: {{{ # attivo la parte CGI per generare i grafici solo quando si visita la pagina web html_strategy cgi graph_strategy cgi # contatti email, ovvero "a chi mando le mail se ci sono problemi" contacts kurgan contact.kurgan.command mail -s "Munin notification ${var:host}" il_mio_indirizzo@dominio.it contact.kurgan.always_send critical }}} == Configurazione di Apache == Apache può servire le pagine di Munin in modo dinamico o statico. La configurazione cambia di poco, e le modifiche vanno fatte dentro al file {{{/etc/munin/apache24.conf}}}. In questo file occorre modificare un paio di cose: prima di tutto da quali host possiamo accedere (di default solo localhost) e poi se vogliamo usare la generazione in cron oppure dinamica delle pagine. Quest'ultima config andrà ovviamente di pari passo con quello che abbiamo scelto in munin.conf e in munin.conf.d prima. * Per abilitare l'accesso per esempio dalla rete 10.1.1.0/24 dovremo sostituire le due occorrenze di {{{Require local}}} con {{{ Require ip 10.1.1.0/24 }}} * Per abilitare l'accesso da ovunque, ma con una password, dopo aver creato il file munin-htpasswd usando "htpasswd -c" ed avere commentato la riga "Require", possiamo usare: {{{ AuthUserFile /etc/munin/munin-htpasswd AuthName "Munin" AuthType Basic Require valid-user }}} * Per passare dalla modalità cron a quella CGI dinamica andiamo in fondo e scambiamo i commenti sulle righe {{{#Alias /munin /var/cache/munin/www}}} e {{{ScriptAlias /munin /usr/lib/munin/cgi/munin-cgi-html}}} (commentiamo la prima e scommentiamo la seconda) * Diciamo ad Apache di leggere la config di Munin, facendo un link come segue: {{{ln -s /etc/munin/apache24.conf /etc/apache2/sites-enabled/munin.conf}}} * Facciamo poi un restart di Munin e di Apache Fatta questa configurazione, si puo` accedere alla pagine web di Munin all'indirizzo {{{http://hostname/munin/}}} Vale la pena di notare che non supportiamo https in questa configurazione molto di base, e che se avete Apache con altre config piu` o meno complesse può essere che dobbiate modificare le cose per incastrare tutto assieme. == Aggiungere un host al server Munin == Per default il server dove abbiamo appena installa Munin provvede a monitorare sè stesso, usando la config che si trova in {{{/etc/munin/munin.conf}}}, in particolare il pezzo che dice: {{{ [localhost.localdomain] address 127.0.0.1 use_node_name yes }}} Ovviamente noi possiamo (e dobbiamo?) creare nuovi host nella config, dopo aver installato il "munin-node" sui medesimi. La cosa sensata è creare le config dentro a {{{/etc/munin/munin.conf.d}}}, una per host. (o anche una per gruppo di host, dipende quanti ne abbiamo) Questo è un esempio di config per due host: {{{ # I miei host. # Il primo e` localhost, di fatto, pero` e` indicato con il nome e non come localhost, per mia comodita`. [test.kurgan.org] address 10.1.1.123 df._dev_md2.warning 97 df._dev_md2.critical 99 exim_mailstats.graph_period minute # apcupsd_ww.timeleft.warning 0:30 # apcupsd_ww.timeleft.critical 0:30 # Questo, che e` commentato, e` un altro host (remoto) che posso aggiungere al mio server in modo che venga # monitorato anche esso. #[calimero.kurgan.org] # address calimero.kurgan.org # exim_mailstats.graph_period minute }}} == Configurazione di un host remoto che vogliamo monitorare == * Installiamo sul nostro host da monitorare il pacchetto {{{munin-node}}} {{{ apt -t bullseye-backports install munin-node }}} * Configuriamo il nodo per accettare le connessioni dal nostro server, modificando {{{/etc/munin/munin-node.conf}}} e indicando l' indirizzo ip del server alla voce "allow" oppure "cidr_allow", come e` spiegato nei commenti del file stesso. Ovviamente occorre ricordarsi di aprire la porta 4949/tcp sul firewall del nodo. {{{ allow ^5\.2\.3\.1$ }}} * Riavviamo il servizio munin-node * Apriamo sul firewall la porta 4949 in ingresso dal server Munin (ricordiamo che il server chiama il nodo, non viceversa) * Ora '''sul server''' creiamo una configurazione per il nostro nuovo host da monitorare. Per esempio possiamo creare il file {{{/etc/munin/munin-conf.d/host-kurgan.org-mail.conf}}} e metterci dentro la nostra config: {{{ [mail.kurgan.org] address X.X.X.X use_node_name yes exim_mailstats.graph_period minute }}} * Riavviamo Munin sul server per fargli caricare il nuovo nodo, e aspettiamo 5 minuti perché lo interroghi e lo mostri nell'interfaccia web. == Gestire i Plugin (su ogni host da monitorare) == Ogni host da monitorare, ovvero quelli dove abbiamo installato munin-node, usa dei plugin per raccogliere i dati dal sistema su cui e` installato. Questi plugin vanno abilitati o disabilitati linkandoli dentro a {{{/etc/munin/plugins}}} e possono essere configurati in diversi modi. Per vedere quali plugin possiamo abilitare su ogni nodo, possiamo affidarci a un automatismo molto comodo. Purtroppo questo non funziona con tutti i plugin. Ce ne sono molti che vanno abilitati a mano, perche` non sono in grado di essere selezionati automaticamente. === Attivare e disattivare i plugin === Per verificare quali plugin possiamo abilitare (e quali sono abilitati o meno) in modo automatico possiamo usare il comando {{{ munin-node-configure --suggest }}} Se vogliamo automatizzare la creazione dei link per l'abilitazione dei plugins che ci sono appena stati suggeriti dal comando precedente, possiamo usa il comando {{{ munin-node-configure --suggest --shell }}} il quale mostra in output una serie di comandi di shell (che sono poi una serie di "ln -s") che possiamo eseguire in sequenza per attivare i plugin suggeriti. Se vogliamo disabilitare alcuni plugin, possiamo farlo semplicemente cancellando i link relativi da dentro a {{{/etc/munin/plugins}}} e riavviando munin-node. Ha senso farlo per i plugin che malfunzionano o per quelli non necessari, per evitare di sovraccaricare munin inutilmente. Per esempio il plugin "smart" che legge i dati SMART dai dischi non funziona per i dischi SCSI o SAS, per cui non ha senso tenerlo abilitato su questo tipo di dischi. Se vogliamo abilitare a mano alcuni plugin, possiamo farlo creando un link al plugin dentro a {{{/etc/munin/plugins}}} e riavviando munin-node. E` possibile (molto probabile) che i plugin che abilitiamo a mano debbano essere configurati. === Configurare i plugin === Uno dei sistemi piu` sensati per configurarli e` creando dei files con nomi arbitrari (ma se li creiamo con un nome simile o uguale a quello del plugin che vogliamo configurare e` meglio) dentro alla directory {{{/etc/munin/plugin-conf.d}}}. In questa directory c'e` gia` un file installato che contiene la configurazione di diversi plugin "standard". === Testare i plugin === Dopo aver abilitato un plugin posso testarlo per vedere se da` un output o se da` errori. Per testarlo eseguo: {{{ munin-run }}} Nel funzionamento normale i plugin devono dare un output testuale che mostra i dati raccolti, e ovviamente non devono dare errori. === Plugin per Apcupsd === Il plugin per apcupsd esiste ma non viene riconosciuto di default. Per attivarlo è sufficiente eseguire: {{{ ln -s /usr/share/munin/plugins/apc_nis /etc/munin/plugins/apc_nis }}} E poi riavviare munin-node