version: '3.8' services: # Database mysql: image: mysql:9.1 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=true - MYSQL_USER=petclinic - MYSQL_PASSWORD=petclinic - MYSQL_DATABASE=petclinic volumes: - "./conf.d:/etc/mysql/conf.d:ro" postgres: image: postgres:17.0 ports: - "5432:5432" environment: - POSTGRES_PASSWORD=petclinic - POSTGRES_USER=petclinic - POSTGRES_DB=petclinic prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./monitoring/prometheus/pipeline-rules.yml:/etc/prometheus/pipeline-rules.yml:ro - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-lifecycle' - '--log.level=debug' user: root # Added this line healthcheck: test: [ "CMD", "wget", "-q", "--spider", "http://localhost:9090/-/healthy" ] interval: 10s timeout: 5s retries: 3 networks: - monitoring-network grafana: image: grafana/grafana:latest ports: - "3000:3000" volumes: - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false - GF_INSTALL_PLUGINS=grafana-piechart-panel depends_on: prometheus: condition: service_healthy networks: - monitoring-network powerapi: image: powerapi/powerapi:latest privileged: true volumes: - /sys:/sys - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock environment: - POWERAPI_CPU_EVENTS=cpu-cycles,instructions - POWERAPI_PUSH_FREQUENCY=1000 - POWERAPI_PUSH_URL=http://pushgateway:9091/metrics/job/powerapi depends_on: - pushgateway networks: - monitoring-network pushgateway: image: prom/pushgateway ports: - "9091:9091" networks: - monitoring-network node-exporter: image: prom/node-exporter:latest volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' ports: - "9100:9100" depends_on: - prometheus networks: - monitoring-network volumes: prometheus_data: grafana_data: networks: monitoring-network: driver: bridge