services: otel-collector: image: otel/opentelemetry-collector-contrib:latest container_name: otel-collector command: ["--config=/etc/otel-collector-config.yml"] volumes: - ./otel-collector-config.yml:/etc/otel-collector-config.yml ports: - "4317:4317" # gRPC - "4318:4318" # HTTP - "8889:8889" # Prometheus metrics endpoint networks: - observ-net labels: logging: "promtail" prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ./rules:/etc/prometheus/rules ports: - "9090:9090" # Interfaccia Web di Prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' depends_on: - otel-collector networks: - observ-net labels: logging: "promtail" grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_SECURITY_ADMIN_USER=admin volumes: - grafana-storage:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning depends_on: - prometheus networks: - observ-net labels: logging: "promtail" promtail: image: grafana/promtail:2.9.3 container_name: promtail restart: unless-stopped environment: TZ: Europe/Rome volumes: - ./promtail-config.yml:/etc/promtail/config.yml:ro - /var/run/docker.sock:/var/run/docker.sock:ro networks: - observ-net depends_on: - loki loki: image: grafana/loki:latest container_name: loki user: "0" ports: - "3100:3100" volumes: - ./loki-config.yml:/etc/loki/local-config.yaml - ./loki-data:/loki command: -config.file=/etc/loki/local-config.yaml restart: unless-stopped networks: - observ-net labels: logging: "promtail" tempo: image: grafana/tempo:latest container_name: tempo user: "0" command: ["-config.file=/etc/tempo.yml"] volumes: - ./tempo-config.yml:/etc/tempo.yml - tempo-data:/tmp/tempo ports: - "3200:3200" # Tempo HTTP - "4317" # OTLP gRPC - "4318" # OTLP HTTP restart: unless-stopped networks: - observ-net labels: logging: "promtail" node-exporter: image: prom/node-exporter:latest container_name: node-exporter command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--path.rootfs=/rootfs' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro ports: - "9100:9100" restart: unless-stopped networks: - observ-net labels: logging: "promtail" pyroscope: image: grafana/pyroscope:latest container_name: pyroscope ports: - "4040:4040" # Pyroscope UI and API volumes: - pyroscope-data:/var/lib/pyroscope restart: unless-stopped networks: - observ-net labels: logging: "promtail" environment: - PYROSCOPE_LOG_LEVEL=info volumes: grafana-storage: tempo-data: pyroscope-data: networks: observ-net: driver: bridge