Published on

Self-hosted monitoring con Grafana + Prometheus in LXC: il mio stack leggero

Authors
  • avatar
    Name
    Alessandro Iannacone
    Twitter

Tenere d’occhio i servizi e i container è fondamentale, soprattutto se gestiti in self-hosting. In questo articolo ti mostro come ho configurato Grafana + Prometheus all’interno di container LXC su Proxmox, per ottenere uno stack di monitoring semplice, leggero e potente, completamente sotto il mio controllo.


🎯 Obiettivo

  • Monitorare servizi, container Docker e nodi Proxmox
  • Visualizzare tutto da un’unica dashboard Grafana
  • Usare container LXC per efficienza e isolamento
  • Nessuna esposizione pubblica: solo su rete VPN privata

🏗️ Stack utilizzato

  • Prometheus (raccolta metriche)
  • Grafana (visualizzazione dashboard)
  • Node Exporter (metriche di sistema per host e container)
  • Proxmox VE con container LXC dedicati
  • Tutto in esecuzione su rete isolata tramite WireGuard VPN

⚙️ Setup dei container LXC

Creo due container:

  • CT110 → Prometheus
  • CT111 → Grafana

Esempio per container Prometheus:

pct create 110 local:vztmpl/debian-12-standard_*.tar.zst \
  --hostname prometheus \
  --cores 1 \
  --memory 1024 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --features nesting=1 \
  --unprivileged 1 \
  --rootfs local-lvm:8

📦 Installazione di Prometheus

Nel container Prometheus:

useradd --no-create-home --shell /bin/false prometheus
mkdir -p /etc/prometheus /var/lib/prometheus

# Scarico binario
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-*-amd64.tar.gz
tar -xzf prometheus-*.tar.gz
cp prometheus-*/prometheus /usr/local/bin/
cp prometheus-*/promtool /usr/local/bin/

File di configurazione (/etc/prometheus/prometheus.yml):

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['10.10.0.2:9100', '10.10.0.3:9100']

Avvio con systemd oppure in background come processo semplice.


📦 Installazione di Node Exporter sui nodi

Su ogni nodo o container da monitorare:

wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*-amd64.tar.gz
tar -xzf node_exporter-*.tar.gz
./node_exporter &

Espone metriche su porta 9100.


📊 Installazione di Grafana

Nel container CT111:

apt install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" \
  > /etc/apt/sources.list.d/grafana.list

apt update && apt install grafana

systemctl enable --now grafana-server

Accedo via browser su:

http://<IP_CONTAINER>:3000

Credenziali predefinite: admin / admin


🔗 Collegare Prometheus a Grafana

In Grafana:

  1. Vai su Settings → Data Sources
  2. Aggiungi Prometheus
  3. URL: http://<IP_PROMETHEUS>:9090
  4. Salva e testa

📈 Dashboard consigliate

Importo dashboard già pronte da Grafana Cloud:

  • Node Exporter Full → ID: 1860
  • Docker Monitoring → ID: 193

Oppure creo le mie con CPU, RAM, disco, carico, e rete.


🔐 Sicurezza: rete isolata con VPN

  • Grafana e Prometheus sono raggiungibili solo tramite VPN (WireGuard)
  • Nessun servizio è esposto su internet
  • Backup dei container su base settimanale

📦 Bonus: alerting email/Telegram

Grafana supporta alert via:

  • Email (SMTP via msmtp)
  • Webhook
  • Telegram Bot

Imposto alert per:

  • Uptime basso
  • Uso RAM o disco oltre soglia
  • Servizi Docker non in esecuzione

✅ Conclusione

Con questo stack leggero riesco a tenere tutto sotto controllo in tempo reale, senza strumenti esterni o servizi cloud.

Perfetto per ambienti self-hosted, VPN private e infrastrutture DevOps semplici ma robuste.


💬 Vuoi una copia delle mie dashboard?

Scrivimi via email e te le invio volentieri in JSON pronte da importare!