4.4 KiB
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:
- Logs: Alloy scopre i container con label
logging=alloye invia i log a Loki - Metrics: Alloy raccoglie metriche host e le invia a Prometheus via Remote Write
- 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:
- Grafana: http://localhost:3000 (admin/admin)
- Alloy UI: http://localhost:12345
- Prometheus: http://localhost:9090
- Pyroscope: http://localhost:4040
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:
- Modifica
alloy-config.alloy - Riavvia il container:
docker-compose restart alloy - 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:
- Ferma lo stack vecchio:
cd ../docker-compose && docker-compose down - Avvia il nuovo:
cd ../docker-compose-alloy && docker-compose up -d - I dati storici in Prometheus/Loki/Tempo sono preservati nei volumi Docker