complete observability stak alloy
This commit is contained in:
148
docker-compose-alloy/README-ALLOY.md
Normal file
148
docker-compose-alloy/README-ALLOY.md
Normal 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/)
|
||||
Reference in New Issue
Block a user