version: "3.4" services: prometheus: image: prom/prometheus:latest restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.external-url=https://prometheus.tobiasmanske.de' volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro,Z - prom_data:/prometheus - label_discovery:/label_discovery:ro - ./rules:/rules:ro,Z labels: - "traefik.enable=true" - "traefik.http.routers.prometheus.rule=Host(`prometheus.tobiasmanske.de`)" - "traefik.http.routers.prometheus.entryPoints=websecure" - "traefik.http.services.prometheus.loadbalancer.server.port=9090" - "traefik.http.routers.prometheus.middlewares=oauth@file" depends_on: - prometheus-docker-sd - cadvisor - node-exporter networks: - backend - alertmanager - metrics prometheus-docker-sd: image: registry.tobiasmanske.de/prometheus-docker-sd:latest restart: unless-stopped privileged: true networks: - backend volumes: - /var/run/docker.sock:/var/run/docker.sock:ro,Z - label_discovery:/prometheus-docker-sd:rw logging: # this service generates a HUGE amout of logs. driver: "none" alertmanager: image: prom/alertmanager:latest labels: - "traefik.enable=true" - "traefik.http.routers.alertmanager.rule=Host(`alertmanager.tobiasmanske.de`)" - "traefik.http.routers.alertmanager.entryPoints=websecure" - "traefik.http.services.alertmanager.loadbalancer.server.port=9093" - "traefik.http.routers.alertmanager.middlewares=oauth@file" volumes: - ./alertmanager.yml:/etc/alertmanager/config.yml:ro,Z - alertmanager_data:/data networks: - alertmanager restart: unless-stopped command: - '--config.file=/etc/alertmanager/config.yml' - '--web.external-url=https://alertmanager.tobiasmanske.de' - '--storage.path=/data' alertmanager-matrix: image: jaywink/matrix-alertmanager:latest restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.alertmanager-matrix.rule=Host(`alertmanager.tobiasmanske.de`) && PathPrefix(`/matrix/`)" - "traefik.http.routers.alertmanager-matrix.middlewares=matrix-strip" - "traefik.http.middlewares.matrix-strip.stripprefix.prefixes=/matrix" - "traefik.http.middlewares.matrix-strip.stripprefix.forceslash=false" - "traefik.http.routers.alertmanager-matrix.entryPoints=websecure" - "traefik.http.services.alertmanager-matrix.loadbalancer.server.port=3000" environment: - APP_PORT=3000 - APP_ALERTMANAGER_SECRET={{ prometheus.alertmanager.matrix.alertmanager_token }} - MATRIX_HOMESERVER_URL=http://pantalaimon:8008 - MATRIX_ROOMS={{ prometheus.alertmanager.matrix.rooms | join('|') }} - MATRIX_TOKEN={{ prometheus.alertmanager.matrix.matrix_token }} - MATRIX_USER=@alertmanager:{{ matrix.baseurl }} - MENTION_ROOM=1 networks: - alertmanager - pantalaimon grafana: image: grafana/grafana:latest restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.grafana.rule=Host(`grafana.tobiasmanske.de`)" - "traefik.http.routers.grafana.entryPoints=websecure" - "traefik.http.services.grafana.loadbalancer.server.port=3000" networks: - backend - default environment: - "GF_SERVER_ROOT_URL=https://grafana.tobiasmanske.de" - "GF_SECURITY_ADMIN_USER={{ grafana.admin.user }}" - "GF_SECURITY_ADMIN_PASSWORD={{ grafana.admin.password }}" - "GF_AUTH_GENERIC_OAUTH_NAME=Keycloak" - "GF_AUTH_GENERIC_OAUTH_ENABLED=true" - "GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP=true" - "GF_AUTH_GENERIC_OAUTH_CLIENT_ID={{ grafana.oidc.client_id }}" - "GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET={{ grafana.oidc.client_secret }}" - "GF_AUTH_GENERIC_OAUTH_SCOPES=openid email profile offline_access roles" - "GF_AUTH_GENERIC_OAUTH_GROUP_ATTRIBUTE_PATH=groups" - "GF_AUTH_GENERIC_OAUTH_EMAIL_ATTRIBUTE_PATH=email" - "GF_AUTH_GENERIC_OAUTH_LOGIN_ATTRIBUTE_PATH=preferred_username" - "GF_AUTH_GENERIC_OAUTH_NAME_ATTRIBUTE_PATH=full_name" - "GF_AUTH_GENERIC_OAUTH_AUTH_URL=https://{{ grafana.oidc.url }}/realms/{{ grafana.oidc.realm_name }}/protocol/openid-connect/auth" - "GF_AUTH_GENERIC_OAUTH_TOKEN_URL=https://{{ grafana.oidc.url }}/realms/{{ grafana.oidc.realm_name }}/protocol/openid-connect/token" - "GF_AUTH_GENERIC_OAUTH_API_URL=https://{{ grafana.oidc.url }}/realms/{{ grafana.oidc.realm_name }}/protocol/openid-connect/userinfo" - "GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH=contains(resource_access.grafana.roles[*], 'serveradmin') && 'GrafanaAdmin' || contains(resource_access.grafana.roles[*], 'admin') && 'Admin' || contains(resource_access.grafana.roles[*], 'editor') && 'Editor' || 'Viewer'" - "GF_AUTH_GENERIC_OAUTH_ALLOW_ASSIGN_GRAFANA_ADMIN=true" volumes: - grafana_data:/var/lib/grafana - ./grafana-ds.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro,Z - ./grafana-db.yml:/etc/grafana/provisioning/dashboards/datasource.yml:ro,Z - ./grafana-dashboards:/var/lib/grafana/dashboards:ro,Z node-exporter: image: quay.io/prometheus/node-exporter:latest container_name: host-nc-chaoswg-org-node-exporter privileged: true labels: - "prometheus-scrape.enabled=true" - "prometheus-scrape.port=9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro - /:/host:ro,rslave - /run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket:ro command: - '--path.rootfs=/host' - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points' - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)" - '--collector.systemd' networks: - metrics restart: unless-stopped cadvisor: image: gcr.io/cadvisor/cadvisor:latest privileged: true labels: - "prometheus-scrape.enabled=true" - "prometheus-scrape.port=8080" command: - "-docker_only=true" - "-housekeeping_interval=10s" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro networks: - metrics restart: unless-stopped loki: image: grafana/loki:latest restart: unless-stopped command: -config.file=/etc/loki/loki.yaml volumes: - ./loki.yml:/etc/loki/loki.yaml:ro,Z - loki_data:/loki labels: - "prometheus-scrape.enabled=true" - "prometheus-scrape.port=3100" networks: - backend promtail: image: grafana/promtail:latest security_opt: - label:disable restart: unless-stopped volumes: - ./promtail.yml:/etc/promtail/config.yml:ro - /var/log:/var/log:ro - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock command: -config.file=/etc/promtail/config.yml labels: - "prometheus-scrape.enabled=true" - "prometheus-scrape.port=8080" networks: - backend - metrics mimir: image: grafana/mimir:latest restart: unless-stopped volumes: - mimir_data:/mimir - ./mimir.yml:/etc/mimir-config/mimir.yaml:ro,Z entrypoint: - /bin/mimir - -config.file=/etc/mimir-config/mimir.yaml - -validation.max-label-names-per-series=60 labels: - "prometheus-scrape.enabled=true" - "prometheus-scrape.port=8080" networks: - backend - metrics volumes: prom_data: grafana_data: loki_data: label_discovery: alertmanager_data: mimir_data: networks: pantalaimon: external: true backend: internal: true alertmanager: metrics: external: true