services: prometheus: image: prom/prometheus:v2.53.0 container_name: prometheus restart: unless-stopped command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=7d - --web.enable-lifecycle volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml:ro - prometheus-data:/prometheus ports: - "9090:9090" networks: - monitoring-net alertmanager: image: prom/alertmanager:v0.27.0 container_name: alertmanager restart: unless-stopped command: - --config.file=/etc/alertmanager/alertmanager.yml volumes: - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro - alertmanager-data:/alertmanager ports: - "9093:9093" networks: - monitoring-net alert-logger: image: mendhak/http-https-echo:latest container_name: alert-logger restart: unless-stopped networks: - monitoring-net grafana: image: grafana/grafana:11.1.0 container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} volumes: - ./grafana/provisioning:/etc/grafana/provisioning:ro - ./grafana/dashboards:/var/lib/grafana/dashboards:ro - grafana-data:/var/lib/grafana ports: - "3000:3000" networks: - monitoring-net volumes: prometheus-data: alertmanager-data: grafana-data: networks: monitoring-net: external: true