services: # Prometheus para métricas prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "${PROMETHEUS_PORT:-9090}:9090" volumes: - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-lifecycle' - '--web.enable-admin-api' - '--web.enable-remote-write-receiver' user: "65534:65534" networks: - monitoring restart: always # Loki para logs loki: image: grafana/loki:latest container_name: loki ports: - "${LOKI_PORT:-3100}:3100" volumes: - ./config/loki/loki.yaml:/etc/loki/local-config.yaml - loki_data:/loki command: -config.file=/etc/loki/local-config.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 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 - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro - alloy_data:/var/lib/alloy command: - run - --server.http.listen-addr=0.0.0.0:12345 - /etc/alloy/config.river environment: - ALLOY_HOSTNAME=${ALLOY_HOSTNAME:-alloy} networks: - monitoring restart: always extra_hosts: - "host.docker.internal:host-gateway" depends_on: - prometheus - loki - tempo # Grafana para visualización grafana: image: grafana/grafana:latest container_name: grafana ports: - "${GRAFANA_PORT:-3500}:3000" environment: - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin123} - GF_PATHS_DATA=/var/lib/grafana - GF_PATHS_LOGS=/var/log/grafana - GF_PATHS_PLUGINS=/var/lib/grafana/plugins - GF_PATHS_PROVISIONING=/etc/grafana/provisioning volumes: - ./config/grafana/provisioning:/etc/grafana/provisioning - ./config/grafana/dashboards:/var/lib/grafana/dashboards - grafana_data:/var/lib/grafana user: "472:472" networks: - monitoring restart: always 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 # 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 networks: monitoring: driver: bridge volumes: prometheus_data: loki_data: tempo_data: alloy_data: grafana_data: promtail_positions: