====== 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