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 Wheezy

Installazione di un server e di un nodo sullo stesso PC

Installiamo Munin (completo) con il comando

aptitude install munin

che si porta dietro tutte le dipendenze.

Configurazione del server 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.

Modificare /etc/munin/munin.conf. Visto che e` quasi tutto commentato (e a default) e` meglio per chiarezza rinominare il file originale tenendolo per riferimento e partire da zero con una configurazione "pulita" e minimale.

# (Exactly one) directory to include all files from.
includedir /etc/munin/munin-conf.d

# attivo la parte CGI per generare i grafici solo quando si visita la pagina web
html_strategy cgi
graph_strategy cgi
cgiurl_graph /munin-cgi/munin-cgi-graph

# 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


# I miei host.
# Il primo e` localhost, di fatto, pero` e` indicato con il nome e non come localhost, per mia comodita`.
[mater.kurgan.org]
    address 127.0.0.1
    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

Modificare /etc/munin/apache.conf per configurare apache2 in modo da poter eseguire gli script di Munin. Questa configurazione, che e` decisamente diversa da quella di default di Debian, e` adatta alla generazione dinamica dei grafici e delle pagine web. L'accesso e` limitato per IP del client in questa configurazione. In teoria non dovrebbero esserci pericoli ad esporre Munin al pubblico, pero` non si e` mai abbastanza paranoici.

Alias /munin-cgi/munin-cgi-html/static /var/cache/munin/www/static
RedirectMatch ^/munin-cgi/$ /munin-cgi/munin-cgi-html/

 # Ensure we can run (fast)cgi scripts
    ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
    <Location /munin-cgi/munin-cgi-graph>
        Order allow,deny
        Allow from localhost 127.0.0.0/8 ::1 10.1.0.0/16
        Options +ExecCGI
        <IfModule mod_fcgid.c>
            SetHandler fcgid-script
        </IfModule>
        <IfModule mod_fastcgi.c>
            SetHandler fastcgi-script
        </IfModule>
        <IfModule !mod_fastcgi.c>
            <IfModule !mod_fcgid.c>
                SetHandler cgi-script
            </IfModule>
        </IfModule>
        Allow from all
    </Location>

    ScriptAlias /munin-cgi/munin-cgi-html /usr/lib/munin/cgi/munin-cgi-html
    <Location /munin-cgi/munin-cgi-html>
        Order allow,deny
        Allow from localhost 127.0.0.0/8 ::1 10.1.0.0/16
        Options +ExecCGI
        <IfModule mod_fcgid.c>
            SetHandler fcgid-script
        </IfModule>
        <IfModule mod_fastcgi.c>
            SetHandler fastcgi-script
        </IfModule>
        <IfModule !mod_fastcgi.c>
            <IfModule !mod_fcgid.c>
                SetHandler cgi-script
            </IfModule>
        </IfModule>
        Allow from all
    </Location>

    <Location /munin-cgi/munin-cgi-html/static>
          # this needs to be at the end to override the above sethandler directives
          Order allow,deny
          Allow from localhost 127.0.0.0/8 ::1 10.1.0.0/16
          Options -ExecCGI
          SetHandler None
     </Location>

Fatta questa configurazione, si puo` accedere alla pagine web di Munin all'indirizzo http://hostname/munin-cgi/

Configurazione del server per la generazione di pagine statiche

Fate riferimento alla sezione precedente per capire la differenza fra generazione statica e dinamica. Questa e` la configurazione statica.

Modificare /etc/munin/munin.conf. Visto che e` quasi tutto commentato (e a default) e` meglio per chiarezza rinominare il file orignale tenendolo per riferimento e partire da zero con una configurazione "pulita" e minimale.

# (Exactly one) directory to include all files from.
includedir /etc/munin/munin-conf.d


# 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


# I miei host.
# Il primo e` localhost, di fatto, pero` e` indicato con il nome e non come localhost, per mia comodita`.
[mater.kurgan.org]
    address 127.0.0.1
    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

Modificare /etc/munin/apache.conf per configurare apache2 per mostrare le pagine statiche generate da Munin ogni 5 minuti. L'accesso e` limitato per IP del client in questa configurazione. In teoria non dovrebbero esserci pericoli ad esporre Munin al pubblico, soprattutto visto che queste sono pagine statiche e non CGI, pero` non si e` mai abbastanza paranoici.

# Enable this for template generation
# Alias /munin /var/cache/munin/www

<Directory /var/cache/munin/www>
    Order allow,deny
    Allow from localhost 127.0.0.0/8 ::1 10.1.0.0/16
    Options None
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>
</Directory>

Fatta questa configurazione, si puo` accedere alla pagine web di Munin all'indirizzo http://hostname/munin/

Configurazione di un nodo

Il file di configurazione di default /etc/munin/munin-node.conf va bene senza modifiche per il nodo che sia installato sulla stessa macchina dove e` installato il server.

Configurazione di un nodo remoto

Se il server non e` locale al nodo, occorre configurare il nodo in modo da accettare le connessioni dal server, modificando il file /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. Ricordiamo che le connessioni avvengono nel verso DAL server AL nodo.

Sul server chiaramente occorrera` indicare una sezione di configurazione per il nodo che abbiamo appena creato, come indicato prima nella sezione dedicata alla configurazione del server.

Plugin per il nodo

Ogni nodo 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 <nome del plugin>

Nel funzionamento normale i plugin devono dare un output testuale che mostra i dati raccolti, e ovviamente non devono dare errori.