version: "3.5" services: # Metrics collector. # It scrapes targets defined in --promscrape.config # And forward them to --remoteWrite.url vmagent: container_name: vmagent image: victoriametrics/vmagent:v1.98.0 depends_on: - "victoriametrics" ports: - 8429:8429 volumes: - vmagentdata:/vmagentdata - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - "--promscrape.config=/etc/prometheus/prometheus.yml" - "--remoteWrite.url=http://victoriametrics:8428/api/v1/write" networks: - vm_net restart: always # VictoriaMetrics instance, a single process responsible for # storing metrics and serve read requests. victoriametrics: container_name: victoriametrics image: victoriametrics/victoria-metrics:v1.98.0 ports: - 8428:8428 - 8089:8089 - 8089:8089/udp - 2003:2003 - 2003:2003/udp - 4242:4242 volumes: - vmdata:/storage command: - "--storageDataPath=/storage" - "--graphiteListenAddr=:2003" - "--opentsdbListenAddr=:4242" - "--httpListenAddr=:8428" - "--influxListenAddr=:8089" - "--vmalert.proxyURL=http://vmalert:8880" networks: - vm_net restart: always # Grafana instance configured with VictoriaMetrics as datasource grafana: container_name: grafana image: grafana/grafana:10.3.1 depends_on: - "victoriametrics" ports: - 3000:3000 volumes: - grafanadata:/var/lib/grafana - ./provisioning/datasources/prometheus-datasource:/etc/grafana/provisioning/datasources - ./provisioning/dashboards:/etc/grafana/provisioning/dashboards - ./../../dashboards/victoriametrics.json:/var/lib/grafana/dashboards/vm.json - ./../../dashboards/vmagent.json:/var/lib/grafana/dashboards/vmagent.json - ./../../dashboards/vmalert.json:/var/lib/grafana/dashboards/vmalert.json networks: - vm_net restart: always # vmalert executes alerting and recording rules vmalert: container_name: vmalert image: victoriametrics/vmalert:v1.98.0 depends_on: - "victoriametrics" - "alertmanager" ports: - 8880:8880 volumes: - ./alerts.yml:/etc/alerts/alerts.yml - ./alerts-health.yml:/etc/alerts/alerts-health.yml - ./alerts-vmagent.yml:/etc/alerts/alerts-vmagent.yml - ./alerts-vmalert.yml:/etc/alerts/alerts-vmalert.yml command: - "--datasource.url=http://victoriametrics:8428/" - "--remoteRead.url=http://victoriametrics:8428/" - "--remoteWrite.url=http://victoriametrics:8428/" - "--notifier.url=http://alertmanager:9093/" - "--rule=/etc/alerts/*.yml" # display source of alerts in grafana - "--external.url=http://127.0.0.1:3000" #grafana outside container # when copypaste the line be aware of '$$' for escaping in '$expr' - '--external.alert.source=explore?orgId=1&left={"datasource":"VictoriaMetrics","queries":[{"expr":{{$$expr|jsonEscape|queryEscape}},"refId":"A"}],"range":{"from":"now-1h","to":"now"}}' networks: - vm_net restart: always # alertmanager receives alerting notifications from vmalert # and distributes them according to --config.file. alertmanager: container_name: alertmanager image: prom/alertmanager:v0.25.0 volumes: - ./alertmanager.yml:/config/alertmanager.yml command: - "--config.file=/config/alertmanager.yml" ports: - 9093:9093 networks: - vm_net restart: always volumes: vmagentdata: {} vmdata: {} grafanadata: {} networks: vm_net: