▤ Homelab

Prometheus e Grafana: un cruscotto per monitorare l'homelab

Come monitorare l'homelab con Prometheus, node_exporter e Grafana: architettura pull, cosa raccogliere, dashboard utili, regole di allerta e conservazione.

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:

  1. uso di CPU e memoria per ogni host;
  2. spazio libero per ogni file system, con una linea che evidenzia la soglia critica;
  3. temperature di CPU e dischi;
  4. traffico di rete sulle interfacce principali;
  5. 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.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche