services: # Prometheus para métricas prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "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: unless-stopped # Loki para logs loki: image: grafana/loki:latest container_name: loki ports: - "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: unless-stopped # Tempo para trazas - Solo almacenamiento (Alloy maneja la recolección) tempo: image: grafana/tempo:latest container_name: tempo ports: - "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: unless-stopped # Grafana Alloy para colección de datos - ÚNICA PUERTA DE ENTRADA alloy: image: grafana/alloy:latest container_name: alloy ports: - "12345:12345" # Puerto para la UI de Alloy # Puertos para métricas - "9999:9999" # HTTP receiver para métricas externas # Puertos para logs - "3101:3101" # HTTP receiver para logs externos - "1514:1514" # Syslog TCP receiver # Puertos para trazas - OpenTelemetry - "4317:4317" # OTLP gRPC (ya expuesto en tempo, redirigido aquí) - "4318:4318" # OTLP HTTP (ya expuesto en tempo, redirigido aquí) # Puertos para trazas - Jaeger compatibility - "14250:14250" # Jaeger gRPC - "14268:14268" # Jaeger HTTP - "6831:6831/udp" # Jaeger compact thrift # Puertos para trazas - Zipkin compatibility - "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 networks: - monitoring restart: unless-stopped depends_on: - prometheus - loki - tempo # Grafana para visualización grafana: image: grafana/grafana:latest container_name: grafana ports: - "3500:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_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 - grafana_data:/var/lib/grafana user: "472:472" networks: - monitoring restart: unless-stopped depends_on: - prometheus - loki - tempo networks: monitoring: driver: bridge volumes: prometheus_data: loki_data: tempo_data: alloy_data: grafana_data: