complete observability stak alloy

This commit is contained in:
2025-11-08 17:57:52 +01:00
parent 4c2a5b6738
commit 869427c24d
11 changed files with 1142 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
# 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:
```bash
cd docker-compose-alloy
docker-compose up -d
```
### Verificare Alloy:
```bash
# 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:
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_*`:
```promql
# 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:
```bash
docker-compose logs alloy | grep loki
```
### Verificare che Alloy stia inviando metriche a Prometheus:
```bash
curl http://localhost:9090/api/v1/label/__name__/values | grep node_
```
### Vedere i componenti attivi in Alloy:
```bash
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
## Link utili
- [Grafana Alloy Documentation](https://grafana.com/docs/alloy/latest/)
- [Alloy Configuration Reference](https://grafana.com/docs/alloy/latest/reference/)
- [River Language](https://grafana.com/docs/alloy/latest/concepts/configuration-syntax/)