--- version: "3.8" services: node_exporter: image: prom/node-exporter:v1.0.1 user: root environment: - NODE_ID={{.Node.ID}} volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro - /etc/hostname:/etc/nodename command: - '--path.sysfs=/host/sys' - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--collector.textfile.directory=/etc/node-exporter/' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)' - '--no-collector.ipvs' configs: - source: node_exporter_entrypoint_sh target: /entrypoint.sh entrypoint: ['/bin/sh', '-e', '/entrypoint.sh'] networks: - exporters deploy: mode: global endpoint_mode: dnsrr cadvisor: image: google/cadvisor:latest command: -logtostderr -docker_only volumes: - /var/lib/docker/:/var/lib/docker - /dev/disk/:/dev/disk - /sys:/sys - /var/run:/var/run - /:/rootfs networks: - exporters deploy: mode: global endpoint_mode: dnsrr loki: image: grafana/loki:2.0.0 command: -config.file=/etc/loki/local-config.yaml networks: - loki - api deploy: endpoint_mode: dnsrr ports: - target: 3100 published: 3100 protocol: tcp mode: host configs: - source: loki_yml target: /etc/loki/local-config.yaml volumes: - loki-data:/loki promtail: image: grafana/promtail:2.0.0 volumes: - /var/log:/var/log command: -config.file=/etc/promtail/config.yml networks: - loki deploy: mode: global endpoint_mode: dnsrr prometheus: image: prom/prometheus:latest volumes: - prometheus-data:/prometheus:rw configs: - source: prometheus_yml target: /etc/prometheus/prometheus.yml networks: api: aliases: - prometheus_api exporters: ~ proxy: ~ deploy: restart_policy: condition: on-failure labels: - "traefik.enable=true" - "traefik.http.services.${STACK_NAME}_prometheus.loadbalancer.server.port=9090" - "traefik.http.routers.${STACK_NAME}-prometheus.rule=Host(`${PROMETHEUS_DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}-prometheus.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}-prometheus.tls=true" - "traefik.http.routers.${STACK_NAME}-prometheus.tls.certresolver=${LETS_ENCRYPT_ENV}" healthcheck: test: "wget -q http://localhost:9090/graph -O/dev/null" interval: 5s timeout: 10s retries: 3 start_period: 10s grafana: image: grafana/grafana volumes: - grafana-data:/var/lib/grafana:rw configs: - source: grafana_datasources_yml target: /etc/grafana/provisioning/datasources/datasources.yml networks: - api - proxy environment: - GF_SMTP_HOST - GF_SMTP_ENABLED - GF_SMTP_FROM_ADDRESS - GF_SMTP_SKIP_VERIFY - GF_SECURITY_ALLOW_EMBEDDING - GF_INSTALL_PLUGINS=grafana-piechart-panel - GF_SERVER_ROOT_URL=https://${GRAFANA_DOMAIN} deploy: labels: - "traefik.enable=true" - "traefik.http.services.${STACK_NAME}-grafana.loadbalancer.server.port=3000" - "traefik.http.routers.${STACK_NAME}-grafana.rule=Host(`${GRAFANA_DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}-grafana.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}-grafana.tls=true" - "traefik.http.routers.${STACK_NAME}-grafana.tls.certresolver=${LETS_ENCRYPT_ENV}" healthcheck: test: "wget -q http://localhost:3000/ -O/dev/null" interval: 5s timeout: 10s retries: 3 start_period: 10s configs: prometheus_yml: name: ${STACK_NAME}_prometheus_yml_${PROMETHEUS_YML_VERSION} file: prometheus.yml promtail_yml: name: ${STACK_NAME}_promtail_yml_${PROMTAIL_YML_VERSION} file: promtail.yml loki_yml: template_driver: golang name: ${STACK_NAME}_loki_yml_${LOKI_YML_VERSION} file: loki.yml.tmpl grafana_datasources_yml: name: ${STACK_NAME}_grafana_datasources_yml_${GRAFANA_DATASOURCES_YML_VERSION} file: grafana-datasources.yml node_exporter_entrypoint_sh: name: ${STACK_NAME}_node_exporter_entrypoint_${NODE_EXPORTER_ENTRYPOINT_VERSION} file: node-exporter-entrypoint.sh volumes: prometheus-data: grafana-data: loki-data: networks: api: driver: overlay exporters: driver: overlay attachable: true loki: driver: overlay attachable: true proxy: external: true