Quando l'homelab cresce oltre una macchina, controllare a mano CPU, dischi e temperature smette di funzionare. Serve un sistema che raccolga i numeri in continuazione, li conservi e li mostri in grafici. La combinazione più diffusa nel mondo open source è Prometheus per raccogliere e archiviare le metriche e Grafana per visualizzarle.
Come funziona Prometheus
Prometheus adotta un modello pull: è il server a interrogare periodicamente i servizi, che espongono le metriche in formato testuale su un indirizzo HTTP, di solito il percorso /metrics. Ogni interrogazione si chiama scrape, e l'intervallo tipico è tra 15 e 60 secondi.
I dati vengono salvati in un database a serie temporali. Ogni serie ha un nome e delle etichette, per esempio:
node_filesystem_avail_bytes{instance="nas:9100", mountpoint="/mnt/dati"}
Le etichette sono ciò che rende potente il sistema: permettono di filtrare e aggregare per macchina, disco o servizio con il linguaggio di interrogazione PromQL.
Gli exporter
I programmi che traducono lo stato di un sistema in metriche Prometheus si chiamano exporter. I più utili in un homelab:
- node_exporter: CPU, memoria, dischi, rete, temperature di una macchina Linux; ascolta per convenzione sulla porta 9100;
- exporter per Proxmox: espongono lo stato di nodi, macchine virtuali e storage tramite l'API dell'hypervisor;
- smartctl_exporter: i dati SMART dei dischi;
- blackbox_exporter: verifica dall'esterno che un servizio risponda via HTTP, TCP, DNS o ping;
- cAdvisor: consumo di risorse dei singoli container.
Molti software moderni espongono già metriche in formato Prometheus senza bisogno di exporter separati.
Una configurazione minima
Il file prometheus.yml elenca i bersagli da interrogare:
scrape_configs:
- job_name: nodi
static_configs:
- targets: ["pve1:9100", "nas:9100", "router-vm:9100"]
Prometheus, Grafana e gli exporter possono girare in container. È ragionevole installarli in una macchina virtuale o un container dedicato al monitoraggio, separato dai servizi che sorveglia. Se il monitoraggio vive sulla stessa macchina che si guasta, non può avvisare del guasto.
Grafana: dai numeri ai grafici
Grafana si collega a Prometheus come sorgente dati e costruisce cruscotti con grafici, indicatori e tabelle. Esistono dashboard già pronte per node_exporter e per molti altri exporter, importabili con un identificativo: sono un buon punto di partenza da adattare.
Nel mio lavoro trovo utile una dashboard principale con pochi pannelli essenziali:
- uso di CPU e memoria per ogni host;
- spazio libero per ogni file system, con una linea che evidenzia la soglia critica;
- temperature di CPU e dischi;
- traffico di rete sulle interfacce principali;
- stato dei servizi verificato dal blackbox_exporter, verde o rosso.
Il resto va in dashboard di dettaglio, consultate solo quando serve indagare.
Allerte: la parte che conta davvero
Un grafico che nessuno guarda non serve. Prometheus valuta regole di allerta scritte in PromQL e le inoltra ad Alertmanager, che raggruppa le notifiche, elimina i duplicati e le invia via email, chat o servizi di notifica push.
Esempi di regole sensate:
- spazio libero sotto il 10% su un file system per più di 15 minuti;
- un bersaglio non raggiungibile per più di 5 minuti;
- un disco con settori riallocati in aumento;
- temperatura di un disco sopra la soglia indicata dal produttore.
La clausola for in una regola indica per quanto tempo la condizione deve persistere prima di generare l'allerta: evita notifiche per picchi momentanei. Poche allerte affidabili valgono più di decine di avvisi che si imparano a ignorare.
Conservazione e spazio
Per impostazione predefinita Prometheus conserva i dati per un periodo limitato, configurabile con l'opzione --storage.tsdb.retention.time o in base allo spazio occupato. In un homelab con una decina di macchine e intervalli di 30 secondi, alcuni mesi di storico occupano uno spazio modesto. Per conservazioni di anni esistono sistemi come VictoriaMetrics o Thanos, ma raramente servono in casa.
Due accorgimenti:
- non creare etichette con valori sempre diversi, come identificativi di richiesta o indirizzi IP dei client: moltiplicano il numero di serie e il consumo di memoria;
- tenere l'intervallo di scrape uniforme, così i grafici e le regole restano coerenti.
Alternative più semplici
Se l'obiettivo è solo sapere se i servizi sono raggiungibili, strumenti come Uptime Kuma bastano e si configurano in pochi minuti. Per un monitoraggio completo con autoscoperta, Netdata offre grafici dettagliati quasi senza configurazione. Prometheus e Grafana richiedono più lavoro iniziale, ma danno il massimo controllo e insegnano competenze usate anche negli ambienti professionali.
In sintesi
- Prometheus interroga gli exporter e salva serie temporali con etichette; Grafana le visualizza.
- node_exporter, blackbox_exporter e un exporter per l'hypervisor coprono quasi tutto.
- Il monitoraggio va ospitato separato dai servizi che sorveglia.
- Le allerte via Alertmanager, poche e con una durata minima, sono il vero valore.
- Etichette con pochi valori distinti mantengono il sistema leggero.