version: '3.5'
services:
  vmagent:
    container_name: vmagent
    image: victoriametrics/vmagent
    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:
    container_name: victoriametrics
    image: victoriametrics/victoria-metrics
    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'
    networks:
      - vm_net
    restart: always
  grafana:
    container_name: grafana
    image: grafana/grafana:7.1.1
    depends_on:
      - "victoriametrics"
    ports:
      - 3000:3000
    volumes:
      - grafanadata:/var/lib/grafana
      - ./provisioning/:/etc/grafana/provisioning/
      - ./../../dashboards/victoriametrics.json:/var/lib/grafana/dashboards/vm.json
      - ./../../dashboards/vmagent.json:/var/lib/grafana/dashboards/vmagent.json
    networks:
      - vm_net
    restart: always
  vmalert:
    container_name: vmalert
    image: victoriametrics/vmalert
    depends_on:
      - "victoriametrics"
      - "alertmanager"
    ports:
      - 8880:8880
    volumes:
      - ./alerts.yml:/etc/alerts/alerts.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
      - '--external.alert.source=explore?orgId=1&left=["now-1h","now","VictoriaMetrics",{"expr":"{{$$expr|quotesEscape|crlfEscape|queryEscape}}"},{"mode":"Metrics"},{"ui":[true,true,true,"none"]}]' ## when copypaste the line be aware of '$$' for escaping in '$expr'    networks:
      - vm_net
    restart: always
  alertmanager:
    container_name: alertmanager
    image:  prom/alertmanager
    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: