From 65673636c47e5b0dfb9e453e90da0080cfd3220e Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Mon, 23 Mar 2026 20:00:57 +0100 Subject: [PATCH 1/2] refactor: simplificar docker-compose a stack esencial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Simplificación del stack de observabilidad manteniendo solo los servicios esenciales: Servicios activos: - Alloy (puertos mínimos: 12345, 9999, 3101) - Prometheus (métricas) - Loki (logs) - Grafana (visualización) Servicios comentados: - Tempo (trazas distribuidas) - Promtail (reemplazado por Alloy) - Node Exporter (métricas del host) - cAdvisor (métricas de contenedores) Cambios: - Reducción de puertos de Alloy (eliminados puertos de trazas: OTLP, Jaeger, Zipkin) - Actualización de dependencias de Alloy y Grafana - Limpieza de volúmenes no utilizados (tempo_data, promtail_positions) - Grafana ahora solo depende de Prometheus y Loki El stack simplificado mantiene capacidad completa de métricas y logs con menor complejidad operacional. --- docker-compose.yml | 140 ++++++++++++++++++++------------------------- 1 file changed, 63 insertions(+), 77 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ba72676..08dbf34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,41 +33,29 @@ services: - monitoring restart: always - # Tempo para trazas - Solo almacenamiento (Alloy maneja la recolección) - tempo: - image: grafana/tempo:latest - container_name: tempo - ports: - - "${TEMPO_PORT:-3200}:3200" # Solo puerto de consulta, sin endpoints de recepción - volumes: - - ./config/tempo/tempo.yaml:/etc/tempo/tempo.yaml - - tempo_data:/var/tempo - command: - - -config.file=/etc/tempo/tempo.yaml - networks: - - monitoring - restart: always + # # Tempo para trazas - Solo almacenamiento (Alloy maneja la recolección) + # tempo: + # image: grafana/tempo:latest + # container_name: tempo + # ports: + # - "${TEMPO_PORT:-3200}:3200" # Solo puerto de consulta, sin endpoints de recepción + # volumes: + # - ./config/tempo/tempo.yaml:/etc/tempo/tempo.yaml + # - tempo_data:/var/tempo + # command: + # - -config.file=/etc/tempo/tempo.yaml + # networks: + # - monitoring + # restart: always - # Grafana Alloy para colección de datos - ÚNICA PUERTA DE ENTRADA + # Grafana Alloy para colección de métricas y logs alloy: image: grafana/alloy:latest container_name: alloy ports: - "${ALLOY_UI_PORT:-12345}:12345" # Puerto para la UI de Alloy - # Puertos para métricas - "${ALLOY_METRICS_PORT:-9999}:9999" # HTTP receiver para métricas externas - # Puertos para logs - "${ALLOY_LOGS_HTTP_PORT:-3101}:3101" # HTTP receiver para logs externos - - "${ALLOY_SYSLOG_PORT:-1514}:1514" # Syslog TCP receiver - # Puertos para trazas - OpenTelemetry - - "${ALLOY_OTLP_GRPC_PORT:-4317}:4317" # OTLP gRPC - - "${ALLOY_OTLP_HTTP_PORT:-4318}:4318" # OTLP HTTP - # Puertos para trazas - Jaeger compatibility - - "${ALLOY_JAEGER_GRPC_PORT:-14250}:14250" # Jaeger gRPC - - "${ALLOY_JAEGER_HTTP_PORT:-14268}:14268" # Jaeger HTTP - - "${ALLOY_JAEGER_COMPACT_PORT:-6831}:6831/udp" # Jaeger compact thrift - # Puertos para trazas - Zipkin compatibility - - "${ALLOY_ZIPKIN_PORT:-9411}:9411" # Zipkin HTTP volumes: - ./config/alloy/alloy.river:/etc/alloy/config.river - /var/run/docker.sock:/var/run/docker.sock:ro @@ -89,7 +77,6 @@ services: depends_on: - prometheus - loki - - tempo # Grafana para visualización grafana: @@ -115,56 +102,55 @@ services: depends_on: - prometheus - loki - - tempo - # Node Exporter para métricas del host - node-exporter: - image: prom/node-exporter:latest - container_name: node-exporter - ports: - - "${NODE_EXPORTER_PORT:-9100}:9100" - command: - - '--path.rootfs=/host' - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /:/host:ro - networks: - - monitoring - restart: always + # # Node Exporter para métricas del host + # node-exporter: + # image: prom/node-exporter:latest + # container_name: node-exporter + # ports: + # - "${NODE_EXPORTER_PORT:-9100}:9100" + # command: + # - '--path.rootfs=/host' + # volumes: + # - /proc:/host/proc:ro + # - /sys:/host/sys:ro + # - /:/host:ro + # networks: + # - monitoring + # restart: always - # cAdvisor para métricas detalladas de Docker - cadvisor: - image: gcr.io/cadvisor/cadvisor:latest - container_name: cadvisor - privileged: true - ports: - - "${CADVISOR_PORT:-8081}:8080" - volumes: - - /:/rootfs:ro - - /var/run/docker.sock:/var/run/docker.sock:ro - - /sys:/sys:ro - - /var/lib/docker/:/var/lib/docker:ro - - /dev/disk/:/dev/disk:ro - networks: - - monitoring - restart: always + # # cAdvisor para métricas detalladas de Docker + # cadvisor: + # image: gcr.io/cadvisor/cadvisor:latest + # container_name: cadvisor + # privileged: true + # ports: + # - "${CADVISOR_PORT:-8081}:8080" + # volumes: + # - /:/rootfs:ro + # - /var/run/docker.sock:/var/run/docker.sock:ro + # - /sys:/sys:ro + # - /var/lib/docker/:/var/lib/docker:ro + # - /dev/disk/:/dev/disk:ro + # networks: + # - monitoring + # restart: always - # Promtail para exportar logs de todos los contenedores hacia Alloy - promtail: - image: grafana/promtail:latest - container_name: promtail - command: -config.file=/etc/promtail/promtail-config.yml - volumes: - - ./config/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro - - promtail_positions:/var/lib/promtail - - /var/run/docker.sock:/var/run/docker.sock:ro - - /var/lib/docker/containers:/var/lib/docker/containers:ro - networks: - - monitoring - restart: always - depends_on: - - alloy + # # Promtail para exportar logs de todos los contenedores hacia Alloy + # promtail: + # image: grafana/promtail:latest + # container_name: promtail + # command: -config.file=/etc/promtail/promtail-config.yml + # volumes: + # - ./config/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro + # - promtail_positions:/var/lib/promtail + # - /var/run/docker.sock:/var/run/docker.sock:ro + # - /var/lib/docker/containers:/var/lib/docker/containers:ro + # networks: + # - monitoring + # restart: always + # depends_on: + # - alloy networks: monitoring: @@ -174,7 +160,7 @@ networks: volumes: prometheus_data: loki_data: - tempo_data: alloy_data: grafana_data: - promtail_positions: + # tempo_data: + # promtail_positions: From 8509a1a4e8e8e7d330babc1b8c4619c0e8e6ec87 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Mon, 23 Mar 2026 20:01:06 +0100 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20simplificar=20configuraci=C3=B3?= =?UTF-8?q?n=20de=20Alloy=20para=20m=C3=A9tricas=20y=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Limpieza de la configuración de Alloy eliminando componentes no utilizados: Métricas (Prometheus): - Mantiene scraping de: Alloy, Prometheus, Grafana, Loki, app_metrics - Comentados: Tempo, Node Exporter, cAdvisor - Receptor HTTP para métricas externas (puerto 9999) - Remote write a Prometheus Logs (Loki): - Descubrimiento y recolección de logs de contenedores Docker - Receptor HTTP para logs externos (puerto 3101) - Receptor Syslog (puerto 1514) - Envío a Loki Trazas: - Sección completa de Tempo comentada (OTLP, Jaeger, Zipkin) La configuración resultante está enfocada exclusivamente en métricas y logs, reduciendo la superficie de ataque y simplificando el troubleshooting. --- config/alloy/alloy.river | 156 +++++++++++++++++++-------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/config/alloy/alloy.river b/config/alloy/alloy.river index aba8f07..32e2662 100644 --- a/config/alloy/alloy.river +++ b/config/alloy/alloy.river @@ -42,32 +42,32 @@ prometheus.scrape "loki" { job_name = "loki" } -// Scraping de Tempo -prometheus.scrape "tempo" { - targets = [{"__address__" = "tempo:3200"}] - forward_to = [prometheus.remote_write.prometheus.receiver] - scrape_interval = "15s" - metrics_path = "/metrics" - job_name = "tempo" -} +// // Scraping de Tempo +// prometheus.scrape "tempo" { +// targets = [{"__address__" = "tempo:3200"}] +// forward_to = [prometheus.remote_write.prometheus.receiver] +// scrape_interval = "15s" +// metrics_path = "/metrics" +// job_name = "tempo" +// } -// Scraping de Node Exporter (métricas del host Docker) -prometheus.scrape "node_exporter" { - targets = [{"__address__" = "node-exporter:9100"}] - forward_to = [prometheus.remote_write.prometheus.receiver] - scrape_interval = "15s" - metrics_path = "/metrics" - job_name = "node_exporter" -} +// // Scraping de Node Exporter (métricas del host Docker) +// prometheus.scrape "node_exporter" { +// targets = [{"__address__" = "node-exporter:9100"}] +// forward_to = [prometheus.remote_write.prometheus.receiver] +// scrape_interval = "15s" +// metrics_path = "/metrics" +// job_name = "node_exporter" +// } -// Scraping de cAdvisor (métricas detalladas de Docker/containers) -prometheus.scrape "cadvisor" { - targets = [{"__address__" = "cadvisor:8080"}] - forward_to = [prometheus.remote_write.prometheus.receiver] - scrape_interval = "15s" - metrics_path = "/metrics" - job_name = "cadvisor" -} +// // Scraping de cAdvisor (métricas detalladas de Docker/containers) +// prometheus.scrape "cadvisor" { +// targets = [{"__address__" = "cadvisor:8080"}] +// forward_to = [prometheus.remote_write.prometheus.receiver] +// scrape_interval = "15s" +// metrics_path = "/metrics" +// job_name = "cadvisor" +// } // Scraping fijo para métricas expuestas desde el host (scripts Python) // Corre por defecto en host.docker.internal:9102 para PrometheusMetric @@ -168,66 +168,66 @@ loki.write "loki" { } //============================================================================= -// TEMPO - TRAZAS +// TEMPO - TRAZAS (COMENTADO - NO SE USA) //============================================================================= -// Receptor OTLP -otelcol.receiver.otlp "tempo" { - grpc { - endpoint = "0.0.0.0:4317" - } - http { - endpoint = "0.0.0.0:4318" - } - output { - traces = [otelcol.processor.batch.tempo.input] - } -} +// // Receptor OTLP +// otelcol.receiver.otlp "tempo" { +// grpc { +// endpoint = "0.0.0.0:4317" +// } +// http { +// endpoint = "0.0.0.0:4318" +// } +// output { +// traces = [otelcol.processor.batch.tempo.input] +// } +// } -// Receptor Jaeger -otelcol.receiver.jaeger "jaeger_traces" { - protocols { - grpc { - endpoint = "0.0.0.0:14250" - } - thrift_http { - endpoint = "0.0.0.0:14268" - } - thrift_compact { - endpoint = "0.0.0.0:6831" - } - } - output { - traces = [otelcol.processor.batch.tempo.input] - } -} +// // Receptor Jaeger +// otelcol.receiver.jaeger "jaeger_traces" { +// protocols { +// grpc { +// endpoint = "0.0.0.0:14250" +// } +// thrift_http { +// endpoint = "0.0.0.0:14268" +// } +// thrift_compact { +// endpoint = "0.0.0.0:6831" +// } +// } +// output { +// traces = [otelcol.processor.batch.tempo.input] +// } +// } -// Receptor Zipkin -otelcol.receiver.zipkin "zipkin_traces" { - endpoint = "0.0.0.0:9411" - output { - traces = [otelcol.processor.batch.tempo.input] - } -} +// // Receptor Zipkin +// otelcol.receiver.zipkin "zipkin_traces" { +// endpoint = "0.0.0.0:9411" +// output { +// traces = [otelcol.processor.batch.tempo.input] +// } +// } -// Procesador batch -otelcol.processor.batch "tempo" { - send_batch_size = 1024 - timeout = "1s" - output { - traces = [otelcol.exporter.otlp.tempo.input] - } -} +// // Procesador batch +// otelcol.processor.batch "tempo" { +// send_batch_size = 1024 +// timeout = "1s" +// output { +// traces = [otelcol.exporter.otlp.tempo.input] +// } +// } -// Exportador a Tempo -otelcol.exporter.otlp "tempo" { - client { - endpoint = "http://tempo:4317" - tls { - insecure = true - } - } -} +// // Exportador a Tempo +// otelcol.exporter.otlp "tempo" { +// client { +// endpoint = "http://tempo:4317" +// tls { +// insecure = true +// } +// } +// } //============================================================================= // CONFIGURACIÓN GENERAL