Buongiorno a tutti e bentornati in nuovo articolo di tooldech oggi parleremo di due strumenti combinati insieme Prometheus + Grafana !
Vuoi monitorare host e container in pochi minuti usando strumenti open‑source standard? In questa guida configuriamo Prometheus (raccolta metriche) e Grafana (visualizzazione) con Docker Compose, includendo cAdvisor (metriche dei container) e Node Exporter (metriche dell’host). È pensata per chi parte da zero e vuole una soluzione ripetibile, documentata e pronta per prod (con volumi persistenti e provisioning automatico).
Perché Prometheus + Grafana (e come funzionano)
Prometheus è un sistema di monitoring “pull”: interroga periodicamente degli exporter (endpoint HTTP) e memorizza serie temporali.
Grafana visualizza queste metriche tramite dashboard, allarmi e pannelli interattivi.
Architettura che andremo a creare:
- Un docker-compose con 4 servizi: prometheus, grafana, node-exporter, cadvisor.
- Prometheus → raccoglie metriche da:
- Node Exporter (stato dell’host: CPU, RAM, dischi, rete)
- cAdvisor (stato dei container Docker: CPU, memoria, I/O)
- Prometheus stesso (autoscrape, utile per health)
- Grafana → collegato a Prometheus come data source per creare dashboard.
Risultato: hai visibilità su salute e performance, individui colli di bottiglia e previeni incidenti.
Prerequisiti
- Docker e Docker Compose v2 installati.
- Porte libere:
3000
(Grafana),9090
(Prometheus),9100
(Node Exporter),8080
(cAdvisor). - Sistema operativo: Linux consigliato. Su macOS/Windows con Docker Desktop, Node Exporter ha visibilità limitata sull’host (puoi comunque provarlo).
Verifica rapida:
docker --version
docker compose version

Struttura del progetto
Creiamo una cartella con il codice e i file di configurazione.
mkdir monitoring-docker-stack
Creata ci spostiamo sopra.
cd monitoring-docker-stack

File di configurazione
1) Prometheus
Nel primo punto serve a configurare il Prometheus dicendogli da dove raccogliere le metriche, una sorta di mappa che dice quali servizi monitorare e con quale frequenza.
Crea e spostati nella cartella.
mkdir prometheus
cd prometheus
Con al suo interno il file prometheus.yml In pratica definisci:
- ogni quanto deve fare lo scrape (default 15 secondi).
- ogni job (Prometheus, Node Exporter, cAdvisor) → cioè un insieme di target;
- gli endpoint (host:porta) che Prometheus deve interrogare;

Spiegazione rapida:
scrape_interval
: frequenza di raccolta (15s è un buon compromesso).- Tre job: Prometheus, Node Exporter e cAdvisor; i nomi risolvono grazie alla rete Docker
monitoring
.
2) Grafana
Immagina cosa potrebbe fare questo… configurare Grafana in modo che abbia pronta la connessione a Prometheus.
Stesso procedimento
mkdir grafana/provisioning/datasources
cd grafana/provisioning/datasources
E andiamo a creare il nostro file all’interno della cartella datasource.yaml
In pratica, nel file datasource.yml
dici a Grafana:
- che deve essere la default per tutte le dashboard.
- quale sorgente dati usare (Prometheus),
- dove trovarla (
http://prometheus:9090
dentro la rete Docker),

Cosa significa
isDefault: true
: sarà la datasource predefinita per nuove dashboard.type: prometheus
: tipo di sorgente dati.access: proxy
: le query passano dal backend di Grafana (comodo in rete privata).url
: nome del servizio Docker + porta.
3) docker-compose.yml
Iniziamo con il punto conclusivo delle parti operative, ovvero la creazione del docker-compose che conterrà al suo interno tutte le componenti necessarie per far partire lo stack.
Crea il file docker-compose.yaml nella root del progetto:

Spiegazione rapida
ports
: espone le UI fuori da Docker (localhost).volumes
: persistenza dati (prom_data
,grafana_data
) + montaggi di configurazione.command
in Prometheus: imposta percorso config, retention dei dati e API di reload.node-exporter
: legge/proc
,/sys
e root fs dell’host in sola lettura;pid: host
migliora visibilità dei processi.cadvisor
: monta directory host per leggere metriche sui container.privileged: true
e mount di/sys/fs/cgroup
aiutano su sistemi con cgroup v2.
Nota macOS/Windows: Node Exporter e cAdvisor vedranno la VM di Docker Desktop, non l’host reale.
Nota sicurezza: in produzione, cambia le password Grafana, limita l’accesso alle porte (firewall/VPN/reverse proxy) e inserisci le versioni specifiche delle immagini (evita
:latest
).
Avvio dello stack
Vorrei fare una precisazione, lo stack è stato fatto partire su una macchina linux, per comodità!
A questo punto siamo pronti a far partire lo stack da dentro monitoring-stack
, con i comandi:
docker compose up -d
docker compose ps

Dovresti vedere 4 container in esecuzione.
Verifica funzionamento della demo
1) Controllo Prometheus
Siamo arrivati alla parte di controllo applicativo, iniziamo a vedere cosa vediamo da Prometheus.
- Apri http://localhost:9090→ Status → Targets
Dovresti vedere i jobprometheus
,node-exporter
,cadvisor
con stato UP.

- Test veloce query (menu Graph) questi sono alcuni delle query che puoi eseguire:
up
→ mostra se i target rispondono (1 = ok).node_load1
→ carico medio a 1 minuto dell’host (Node Exporter).container_memory_working_set_bytes
→ memoria per container (cAdvisor).

2) Accesso a Grafana
Controlliamo il secondo applicativo in funzione che è Grafana.
- Apri http://localhost:3000

- Login: user –
> admin / password -> admin
→ cambia password quando richiesto.
Vai su Dashboards → New → Add visualization → Prometheus e prova una query:

- Come creare una Dashboard minima (in 2 minuti)
In Grafana: Dashboards → New → Dashboard → Add a new panel.
Scegli il data source Prometheus.
Inserisci la query (esempio CPU host media):
avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m]))
Imposta Legend su {{instance}}
, salvalo come “Host Overview”.

Aggiungi un secondo pannello per la memoria per aggiungere una query in più.
N.B. bisogna andare in basso

node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
- e seleziona Unit → Percent (0-1) per ottenere una percentuale, per ottenere questo valore vai sulla barra a scorrimento alla destra e troverai una serie di parametri dai più variegati scendi finchè non vedi Unit appunto e seleziona la percentuale.

Conclusione
Siamo arrivati alla fine di questo articolo spero vi sia servito per capire il funzionamento di questi due applicativi che se usati in modo corretti possono esserci molto utile per il monitoring delle risorse dei nostri stack.
Un saluto e alla prossimo tutorial di tooldech!
Seguimi sui social!