# 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/)