services: grafana: image: grafana/grafana:latest restart: unless-stopped user: "104" ports: - "3001:3000" volumes: - /mnt/docker-data/configs/grafana:/var/lib/grafana healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:3000/api/health || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 512M prometheus: image: prom/prometheus:latest restart: unless-stopped ports: - "9095:9090" command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - '--web.enable-lifecycle' volumes: - /mnt/docker-data/configs/prometheus:/etc/prometheus healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:9090/-/healthy || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 512M alertmanager: image: prom/alertmanager:latest restart: unless-stopped ports: - "9093:9093" command: - '--config.file=/etc/alertmanager/alertmanager.yml' - '--storage.path=/alertmanager' volumes: - /mnt/docker-data/configs/alertmanager:/etc/alertmanager - alertmanager-data:/alertmanager healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:9093/-/healthy || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 256M node-exporter: # DISABLED 2026-10-26: node-exporter runs STANDALONE (compose//node-exporter, pid:host). # This legacy copy would collide on :9100 if started; gated behind a profile so a # bare `docker compose up -d` here never starts it. profiles: ["legacy-node-exporter"] image: prom/node-exporter:latest restart: unless-stopped ports: - "9100:9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: global resources: limits: memory: 128M influxdb: image: influxdb:1.8-alpine restart: unless-stopped volumes: - /mnt/docker-data/configs/influxdb:/var/lib/influxdb healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:8086/ping || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 1G matrix-alertmanager-receiver: image: metio/matrix-alertmanager-receiver:2026.9.23 restart: unless-stopped ports: - "9094:9094" volumes: - /mnt/docker-data/configs/alertmanager/matrix-receiver-config.yml:/config/config.yml:ro command: ["--config-path", "/config/config.yml"] # NOTE: No healthcheck - this image is distroless (no shell), so CMD-SHELL healthchecks fail. # The service is verified healthy by Alertmanager successfully POSTing to it. logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 128M cadvisor: image: ghcr.io/google/cadvisor:v0.60.6 # moved off gcr.io (no releases there after v0.55) restart: unless-stopped privileged: true command: - '--docker_only=true' - '--disable_metrics=advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sched,tcp,udp,disk,diskIO,percpu' - '--housekeeping_interval=30s' - '--store_container_labels=false' ports: - "8081:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro devices: - /dev/kmsg logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 256M blackbox-exporter: image: prom/blackbox-exporter:latest restart: unless-stopped ports: - "9115:9115" command: - '--config.file=/config/blackbox.yml' volumes: - /mnt/docker-data/configs/blackbox:/config:ro logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 resources: limits: memory: 128M volumes: alertmanager-data: