Files
symon/docker-compose-alloy/README-ALLOY.md

4.4 KiB

Stack Observability con Grafana Alloy

Questa directory contiene uno stack di observability semplificato che usa Grafana Alloy al posto di tre componenti separati.

Differenze con docker-compose originale

Setup Originale (7 servizi)

- Promtail       → Raccolta log dai container
- Node Exporter  → Metriche sistema host
- OTEL Collector → Ricezione telemetria OTLP
- Prometheus     → Storage metriche
- Loki           → Storage log
- Tempo          → Storage traces
- Grafana        → Visualizzazione

Setup con Alloy (5 servizi)

- Alloy          → Raccolta log + metriche host + OTLP (tutto in uno!)
- Prometheus     → Storage metriche
- Loki           → Storage log
- Tempo          → Storage traces
- Grafana        → Visualizzazione
+ Pyroscope      → Continuous profiling

Cosa fa Alloy

Grafana Alloy sostituisce 3 servizi in uno:

Funzione Prima Dopo
Raccolta log Docker Promtail Alloy
Metriche sistema host Node Exporter Alloy (unix exporter integrato)
Ricezione OTLP OTEL Collector Alloy (otelcol receiver)

Vantaggi di Alloy:

  • Meno container da gestire (5 invece di 7)
  • Configurazione unificata in un solo file (alloy-config.alloy)
  • Meno risorse consumate (CPU/RAM)
  • UI integrata per debugging (http://localhost:12345)
  • Più moderno (linguaggio River invece di YAML)
  • Hot reload della configurazione

Come funziona:

  1. Logs: Alloy scopre i container con label logging=alloy e invia i log a Loki
  2. Metrics: Alloy raccoglie metriche host e le invia a Prometheus via Remote Write
  3. Traces: Alloy riceve traces OTLP e le inoltra a Tempo

Porte esposte

Servizio Porta Descrizione
Alloy 12345 UI e metriche self-monitoring
Alloy 4317 OTLP gRPC (traces/metrics)
Alloy 4318 OTLP HTTP (traces/metrics)
Prometheus 9090 Query e UI
Loki 3100 Push/Query API
Tempo 3200 Query API
Pyroscope 4040 Profiling UI e API
Grafana 3000 Dashboard

Come usare

Avviare lo stack:

cd docker-compose-alloy
docker-compose up -d

Verificare Alloy:

# UI di Alloy (molto utile per debugging!)
open http://localhost:12345

# Vedere i target scoperti
curl http://localhost:12345/api/v0/component/discovery.docker.containers/targets

# Vedere la configurazione caricata
curl http://localhost:12345/api/v0/web/components

Accedere ai servizi:

Configurazione

File principale:

  • alloy-config.alloy: Configurazione unificata di Alloy (sostituisce promtail-config.yml e otel-collector-config.yml)
  • prometheus.yml: Configurazione Prometheus (semplificata, Alloy fa remote write)
  • loki-config.yml: Configurazione Loki (invariata)
  • tempo-config.yml: Configurazione Tempo (invariata)

Modificare la configurazione di Alloy:

  1. Modifica alloy-config.alloy
  2. Riavvia il container: docker-compose restart alloy
  3. Verifica la configurazione: http://localhost:12345

Metriche disponibili

Alloy espone le stesse metriche di Node Exporter con prefisso node_*:

# CPU usage
rate(node_cpu_seconds_total[5m])

# Memory
node_memory_MemAvailable_bytes

# Disk
node_filesystem_avail_bytes

Troubleshooting

Verificare che Alloy stia raccogliendo log:

docker-compose logs alloy | grep loki

Verificare che Alloy stia inviando metriche a Prometheus:

curl http://localhost:9090/api/v1/label/__name__/values | grep node_

Vedere i componenti attivi in Alloy:

curl http://localhost:12345/api/v0/web/components | jq

Migrazione dalla versione originale

Se hai già la versione con Promtail/Node-Exporter/OTEL:

  1. Ferma lo stack vecchio: cd ../docker-compose && docker-compose down
  2. Avvia il nuovo: cd ../docker-compose-alloy && docker-compose up -d
  3. I dati storici in Prometheus/Loki/Tempo sono preservati nei volumi Docker