services: # Grafana instance configured with VictoriaLogs as datasource grafana: container_name: grafana image: grafana/grafana:10.4.2 depends_on: - "victoriametrics" - "victorialogs" ports: - 3000:3000 volumes: - grafanadata:/var/lib/grafana - ./provisioning/datasources/victorialogs-datasource:/etc/grafana/provisioning/datasources - ./provisioning/dashboards:/etc/grafana/provisioning/dashboards - ./provisioning/plugins/:/var/lib/grafana/plugins - ./../../dashboards/victoriametrics.json:/var/lib/grafana/dashboards/vm.json - ./../../dashboards/victorialogs.json:/var/lib/grafana/dashboards/vl.json environment: - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victorialogs-datasource/releases/download/v0.8.0/victorialogs-datasource-v0.8.0.zip;victorialogs-datasource" - "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=victorialogs-datasource" networks: - vm_net restart: always # fluentbit is logs collector. It collects logs according to fluent-bit.conf # and forwards them to VictoriaLogs fluentbit: container_name: fluentbit image: fluent/fluent-bit:2.1.4 volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf depends_on: [victorialogs] ports: - "5140:5140" networks: - vm_net # VictoriaLogs instance, a single process responsible for # storing logs and serving read queries. victorialogs: container_name: victorialogs image: victoriametrics/victoria-logs:v1.0.0-victorialogs command: - "--storageDataPath=/vlogs" - "--httpListenAddr=:9428" volumes: - vldata:/vlogs ports: - "9428:9428" networks: - vm_net # VictoriaMetrics instance, a single process responsible for # scraping, storing metrics and serve read requests. victoriametrics: container_name: victoriametrics image: victoriametrics/victoria-metrics:v1.106.1 ports: - 8428:8428 volumes: - vmdata:/storage - ./prometheus-victorialogs.yml:/etc/prometheus/prometheus.yml command: - "--storageDataPath=/storage" - "--httpListenAddr=:8428" - "--promscrape.config=/etc/prometheus/prometheus.yml" networks: - vm_net restart: always # vmauth is a router and balancer for HTTP requests. # It proxies query requests from vmalert to either VictoriaMetrics or VictoriaLogs, # depending on the requested path. vmauth: container_name: vmauth image: victoriametrics/vmauth:v1.106.1 depends_on: - "victoriametrics" - "victorialogs" volumes: - ./auth-mixed-datasource.yml:/etc/auth.yml command: - "--auth.config=/etc/auth.yml" ports: - 8427:8427 networks: - vm_net restart: always # vmalert executes alerting and recording rules according to given rule type. vmalert: container_name: vmalert image: victoriametrics/vmalert:v1.106.1 depends_on: - "vmauth" - "alertmanager" - "victoriametrics" ports: - 8880:8880 volumes: - ./rules/alerts.yml:/etc/alerts/alerts.yml - ./rules/alerts-vlogs.yml:/etc/alerts/vlogs.yml - ./rules/alerts-health.yml:/etc/alerts/alerts-health.yml - ./rules/alerts-vmagent.yml:/etc/alerts/alerts-vmagent.yml - ./rules/alerts-vmalert.yml:/etc/alerts/alerts-vmalert.yml # vlogs rule - ./rules/vlogs-example-alerts.yml:/etc/alerts/vlogs-example-alerts.yml command: - "--datasource.url=http://vmauth:8427/" - "--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 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.27.0 volumes: - ./alertmanager.yml:/config/alertmanager.yml command: - "--config.file=/config/alertmanager.yml" ports: - 9093:9093 networks: - vm_net restart: always volumes: vmdata: {} vldata: {} grafanadata: {} networks: vm_net: