# Monitoring stack: Prometheus + Grafana + Loki + Promtail # Garage cluster (vps01, bigbox, vps02) metrics via WG admin API :3903 # Logs: docker logs of garage containers via promtail (docker driver) services: prometheus: image: prom/prometheus:v2.53.0 container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./prometheus-data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.retention.time=30d' - '--storage.tsdb.path=/prometheus' ports: - "9090:9090" networks: - monitoring grafana: image: grafana/grafana:11.1.0 container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin} - GF_USERS_ALLOW_SIGN_UP=false - GF_SERVER_ROOT_URL=http://localhost:3001 volumes: - ./grafana-data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning:ro - ./grafana/dashboards:/var/lib/grafana/dashboards:ro ports: - "3001:3000" depends_on: - prometheus networks: - monitoring loki: image: grafana/loki:3.1.0 container_name: loki restart: unless-stopped command: -config.file=/etc/loki/local-config.yaml volumes: - ./loki-config.yaml:/etc/loki/local-config.yaml:ro - ./loki-data:/loki ports: - "3100:3100" networks: - monitoring promtail: image: grafana/promtail:3.1.0 container_name: promtail restart: unless-stopped volumes: - ./promtail-config.yaml:/etc/promtail/config.yaml:ro - /var/run/docker.sock:/var/run/docker.sock command: -config.file=/etc/promtail/config.yaml depends_on: - loki networks: - monitoring networks: monitoring: driver: bridge