From c4cfa8081f04390ad672f0ae4e252a40c26d1f00 Mon Sep 17 00:00:00 2001 From: beatz174-bit Date: Wed, 13 May 2026 09:33:29 +1000 Subject: [PATCH] Refine public docs generation and simplify topology diagrams --- docs/generated/compose-files.txt | 2 - docs/generated/compose-inventory.md | 6 +- docs/generated/docker-compose.resolved.yml | 86 +++-------- docs/generated/index.md | 1 - docs/generated/prometheus-rules.md | 127 ---------------- docs/generated/traefik-routes.md | 2 - docs/index.md | 1 - docs/monitoring.md | 1 - docs/public/compose-inventory.md | 6 +- docs/public/diagrams.md | 6 + docs/public/index.md | 3 +- docs/public/prometheus-rules.md | 127 ---------------- docs/public/traefik-routes.md | 2 - mkdocs.yml | 1 - scripts/docs/generate-all.sh | 1 - scripts/docs/generate-diagrams.py | 160 ++++++++++++++------- scripts/docs/generate-docs-index.py | 1 - scripts/docs/sanitize-public-docs.py | 11 +- 18 files changed, 149 insertions(+), 395 deletions(-) delete mode 100644 docs/generated/prometheus-rules.md delete mode 100644 docs/public/prometheus-rules.md diff --git a/docs/generated/compose-files.txt b/docs/generated/compose-files.txt index 8b1c05c..b602f4c 100644 --- a/docs/generated/compose-files.txt +++ b/docs/generated/compose-files.txt @@ -4,8 +4,6 @@ apps/gramps/docker-compose.yml apps/nextcloud/docker-compose.yml apps/passbolt/docker-compose.yml apps/searxng/docker-compose.yml -apps/shift-recorder/docker-compose.yml -apps/stockfill/docker-compose.yml core/authelia/docker-compose.yml core/crowdsec/docker-compose.yml core/error-pages/docker-compose.yml diff --git a/docs/generated/compose-inventory.md b/docs/generated/compose-inventory.md index 4354f2c..ffffaac 100644 --- a/docs/generated/compose-inventory.md +++ b/docs/generated/compose-inventory.md @@ -1,12 +1,12 @@ # Docker Compose Inventory -Source fingerprint: `0fad36c3fed6` +Source fingerprint: `232be78ef441` ## Summary | Item | Count | |---|---:| -| Services | 30 | +| Services | 28 | | Networks | 5 | | Volumes | 0 | @@ -40,8 +40,6 @@ Source fingerprint: `0fad36c3fed6` | portainer | portainer | portainer/portainer-ce:latest | | monitoring, all, portainer | traefik | | unless-stopped | | prometheus | prometheus | prom/prometheus:latest | | monitoring, all, prometheus | monitor, traefik | | unless-stopped | | searxng-webapp | searxng-webapp | searxng/searxng | | apps, all, searxng | traefik | | always | -| shift-recorder-web | shift-recorder | | /home/nixos/docker/apps/shift-recorder | apps, all, shift-recorder | traefik | | unless-stopped | -| stockfill | stockfill | | /home/nixos/docker/apps/stockfill | apps, all, stockfill | traefik | | unless-stopped | | telegraf | telegraf | telegraf:latest | | monitoring, all, telegraf, prometheus | monitor | | unless-stopped | | traefik | traefik | traefik:3 | /home/nixos/docker/core | core, all, traefik | traefik | {'mode': 'ingress', 'target': 80, 'published': '80', 'protocol': 'tcp'}, {'mode': 'ingress', 'target': 443, 'published': '443', 'protocol': 'tcp'} | always | diff --git a/docs/generated/docker-compose.resolved.yml b/docs/generated/docker-compose.resolved.yml index 4b6259c..c88d792 100644 --- a/docs/generated/docker-compose.resolved.yml +++ b/docs/generated/docker-compose.resolved.yml @@ -163,7 +163,7 @@ services: - no-new-privileges:true volumes: - type: bind - source: /home/nixos/.docker/config.json + source: /root/.docker/config.json target: /root/.docker/config.json read_only: true bind: @@ -280,8 +280,8 @@ services: - gotify container_name: gotify environment: - GOTIFY_DEFAULTUSER_NAME: admin - GOTIFY_DEFAULTUSER_PASS: R1m@dmin + GOTIFY_DEFAULTUSER_NAME: dummy-user + GOTIFY_DEFAULTUSER_PASS: dummy-user GOTIFY_REGISTRATION: "false" TZ: Australia/Brisbane image: gotify/server:latest @@ -379,14 +379,14 @@ services: GRAMPSWEB_CELERY_CONFIG__result_backend: redis://gramps-redis:6379/0 GRAMPSWEB_DEFAULT_FROM_EMAIL: beatz174@gmail.com GRAMPSWEB_EMAIL_HOST: smtp.gmail.com - GRAMPSWEB_EMAIL_HOST_PASSWORD: kqdw fvml wlag ldgv - GRAMPSWEB_EMAIL_HOST_USER: beatz174 + GRAMPSWEB_EMAIL_HOST_PASSWORD: dummy@example.com + GRAMPSWEB_EMAIL_HOST_USER: dummy@example.com GRAMPSWEB_EMAIL_PORT: "587" GRAMPSWEB_EMAIL_USE_SSL: "false" GRAMPSWEB_EMAIL_USE_STARTTLS: "true" GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://gramps-redis:6379/1 GRAMPSWEB_REGISTRATION_DISABLED: "true" - GRAMPSWEB_SECRET_KEY: 8916e899404fa2eefe0a87ea08d3b5a1f5b7ab2a1cfc5ae3374bb9c7b0e1cf83 + GRAMPSWEB_SECRET_KEY: dummy-grampsweb_secret_key GRAMPSWEB_TREE: main TZ: Australia/Brisbane healthcheck: @@ -474,14 +474,14 @@ services: GRAMPSWEB_CELERY_CONFIG__result_backend: redis://gramps-redis:6379/0 GRAMPSWEB_DEFAULT_FROM_EMAIL: beatz174@gmail.com GRAMPSWEB_EMAIL_HOST: smtp.gmail.com - GRAMPSWEB_EMAIL_HOST_PASSWORD: kqdw fvml wlag ldgv - GRAMPSWEB_EMAIL_HOST_USER: beatz174 + GRAMPSWEB_EMAIL_HOST_PASSWORD: dummy@example.com + GRAMPSWEB_EMAIL_HOST_USER: dummy@example.com GRAMPSWEB_EMAIL_PORT: "587" GRAMPSWEB_EMAIL_USE_SSL: "false" GRAMPSWEB_EMAIL_USE_STARTTLS: "true" GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://gramps-redis:6379/1 GRAMPSWEB_REGISTRATION_DISABLED: "true" - GRAMPSWEB_SECRET_KEY: 8916e899404fa2eefe0a87ea08d3b5a1f5b7ab2a1cfc5ae3374bb9c7b0e1cf83 + GRAMPSWEB_SECRET_KEY: dummy-grampsweb_secret_key GRAMPSWEB_TREE: main TZ: Australia/Brisbane healthcheck: @@ -549,7 +549,7 @@ services: DOCKER_INFLUXDB_INIT_MODE: setup DOCKER_INFLUXDB_INIT_ORG: pbs DOCKER_INFLUXDB_INIT_PASSWORD_FILE: /run/secrets/influxdb_init_password - DOCKER_INFLUXDB_INIT_USERNAME: admin + DOCKER_INFLUXDB_INIT_USERNAME: dummy-user healthcheck: test: - CMD-SHELL @@ -647,7 +647,7 @@ services: io.portainer.accesscontrol.public: "" traefik.docker.network: core_traefik traefik.enable: "true" - traefik.http.middlewares.mtls-bridge-auth.basicauth.users: beatzaplenty:$$2y$$05$$WAj1.xaHHoR0lmgx8UedwuIM4qv2Uz7eezY4gxASfM5KAdN8mPLOa + traefik.http.middlewares.mtls-bridge-auth.basicauth.users: "" traefik.http.middlewares.mtls-bridge-cors.headers.accesscontrolallowcredentials: "true" traefik.http.middlewares.mtls-bridge-cors.headers.accesscontrolallowheaders: authorization,content-type,x-grafana-action,x-grafana-device-id traefik.http.middlewares.mtls-bridge-cors.headers.accesscontrolallowmethods: GET,POST,PUT,PATCH,DELETE,OPTIONS @@ -690,9 +690,9 @@ services: MYSQL_DATABASE: nextcloud MYSQL_PASSWORD_FILE: /run/secrets/nextcloud_db_password MYSQL_ROOT_PASSWORD_FILE: /run/secrets/nextcloud_db_root_password - MYSQL_USER: nextcloud + MYSQL_USER: dummyuser NEXTCLOUD_ADMIN_PASSWORD_FILE: /run/secrets/nextcloud_admin_password - NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_USER: dummy-user hostname: nextcloud_db healthcheck: test: @@ -772,12 +772,12 @@ services: condition: service_started required: true environment: - MAIL_DOMAIN: gmail.com - MAIL_FROM_ADDRESS: beatz174 + MAIL_DOMAIN: example.lan.ddnsgeek.com + MAIL_FROM_ADDRESS: dummy MYSQL_DATABASE: nextcloud MYSQL_HOST: nextcloud_db:3306 MYSQL_PASSWORD_FILE: /run/secrets/nextcloud_db_password - MYSQL_USER: nextcloud + MYSQL_USER: dummyuser NEXTCLOUD_TRUSTED_DOMAINS: nextcloud.lan.ddnsgeek.com OVERWRITECLIURL: https://nextcloud.lan.ddnsgeek.com OVERWRITEPROTOCOL: https @@ -786,7 +786,7 @@ services: REDIS_HOST_PORT: "6379" SMTP_AUTHTYPE: login SMTP_HOST: smtp.gmail.com - SMTP_NAME: beatz174@gmail.com + SMTP_NAME: dummy-name SMTP_PASSWORD_FILE: /run/secrets/nextcloud_smtp_password SMTP_PORT: "587" SMTP_SECURE: tls @@ -943,10 +943,10 @@ services: - passbolt container_name: passbolt-db environment: - MYSQL_DATABASE: passbolt + MYSQL_DATABASE: dummy-passbolt_db_name MYSQL_PASSWORD_FILE: /run/secrets/passbolt_db_password MYSQL_RANDOM_ROOT_PASSWORD: "true" - MYSQL_USER: passbolt + MYSQL_USER: dummyuser healthcheck: test: - CMD-SHELL @@ -989,11 +989,11 @@ services: required: true environment: APP_FULL_BASE_URL: https://passbolt.lan.ddnsgeek.com - DATASOURCES_DEFAULT_DATABASE: passbolt + DATASOURCES_DEFAULT_DATABASE: dummy-passbolt_db_name DATASOURCES_DEFAULT_HOST: passbolt-db DATASOURCES_DEFAULT_PASSWORD_FILE: /run/secrets/passbolt_db_password - DATASOURCES_DEFAULT_USERNAME: passbolt - PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: CBBB2B8F3E9FACA114537ACB8965B750F7363586 + DATASOURCES_DEFAULT_USERNAME: dummyuser + PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: dummy-passbolt_gpg_server_key_fingerprint healthcheck: test: - CMD-SHELL @@ -1037,7 +1037,7 @@ services: container_name: pihole-exporter environment: PIHOLE_HOSTNAME: pihole.sweet.home - PIHOLE_PASSWORD: "" + PIHOLE_PASSWORD: dummy-pihole_password PORT: "9617" image: ekofr/pihole-exporter:latest networks: @@ -1191,46 +1191,6 @@ services: - /tmp - /var - /run - shift-recorder-web: - profiles: - - apps - - all - - shift-recorder - build: - context: /home/nixos/docker/apps/shift-recorder - dockerfile: Dockerfile - container_name: shift-recorder - labels: - io.portainer.accesscontrol.public: "" - traefik.enable: "true" - traefik.http.routers.shifts.entrypoints: websecure - traefik.http.routers.shifts.rule: Host(`shifts.lan.ddnsgeek.com`) - traefik.http.routers.shifts.tls: "true" - traefik.http.routers.shifts.tls.certresolver: myresolver - traefik.http.services.shifts.loadbalancer.server.port: "80" - networks: - traefik: null - restart: unless-stopped - stockfill: - profiles: - - apps - - all - - stockfill - build: - context: /home/nixos/docker/apps/stockfill - dockerfile: Dockerfile - container_name: stockfill - labels: - io.portainer.accesscontrol.public: "" - traefik.enable: "true" - traefik.http.routers.stockfill.entrypoints: websecure - traefik.http.routers.stockfill.rule: Host(`stockfill.lan.ddnsgeek.com`) - traefik.http.routers.stockfill.tls: "true" - traefik.http.routers.stockfill.tls.certresolver: myresolver - traefik.http.services.stockfill.loadbalancer.server.port: "80" - networks: - traefik: null - restart: unless-stopped telegraf: profiles: - monitoring diff --git a/docs/generated/index.md b/docs/generated/index.md index 4ebaf24..bfa298d 100644 --- a/docs/generated/index.md +++ b/docs/generated/index.md @@ -8,5 +8,4 @@ This directory contains documentation generated automatically from repository co - [Resolved Docker Compose config](docker-compose.resolved.yml) - [Compose inventory](compose-inventory.md) - [Traefik routes](traefik-routes.md) -- [Prometheus rules](prometheus-rules.md) - [Docker Compose diagram](../diagrams/docker-compose.svg) diff --git a/docs/generated/prometheus-rules.md b/docs/generated/prometheus-rules.md deleted file mode 100644 index 8ff8978..0000000 --- a/docs/generated/prometheus-rules.md +++ /dev/null @@ -1,127 +0,0 @@ -# Prometheus Rules - -| File | Group | Alert | Expr | For | Labels | Annotations | -|---|---|---|---|---|---|---| -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | diff --git a/docs/generated/traefik-routes.md b/docs/generated/traefik-routes.md index caba96f..1e3d05c 100644 --- a/docs/generated/traefik-routes.md +++ b/docs/generated/traefik-routes.md @@ -18,6 +18,4 @@ | portainer | portainer | Host(`portainer.lan.ddnsgeek.com`) | websecure | true | | 9000 | | prometheus | prometheus | Host(`prometheus.lan.ddnsgeek.com`) | websecure | | authelia | 9090 | | searxng-webapp | searxng | Host(`searxng.lan.ddnsgeek.com`) | websecure | | | 8080 | -| shift-recorder-web | shifts | Host(`shifts.lan.ddnsgeek.com`) | websecure | true | | 80 | -| stockfill | stockfill | Host(`stockfill.lan.ddnsgeek.com`) | websecure | true | | 80 | | traefik | traefik | Host(`traefik.lan.ddnsgeek.com`) | websecure | | authelia | | diff --git a/docs/index.md b/docs/index.md index b38b1ca..01f8eb3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,6 @@ Some sections are manually written. Other sections are generated automatically b - [Compose Inventory](generated/compose-inventory.md) - [Traefik Routes](generated/traefik-routes.md) -- [Prometheus Rules](generated/prometheus-rules.md) - [Resolved Compose Config](generated/docker-compose.resolved.yml) - [Docker Compose Diagram](diagrams/docker-compose.svg) diff --git a/docs/monitoring.md b/docs/monitoring.md index a42a723..0700151 100644 --- a/docs/monitoring.md +++ b/docs/monitoring.md @@ -8,4 +8,3 @@ Monitoring documentation is generated from static rule files committed in this r Generated asset: -- [Prometheus Rules](generated/prometheus-rules.md) diff --git a/docs/public/compose-inventory.md b/docs/public/compose-inventory.md index 4354f2c..ffffaac 100644 --- a/docs/public/compose-inventory.md +++ b/docs/public/compose-inventory.md @@ -1,12 +1,12 @@ # Docker Compose Inventory -Source fingerprint: `0fad36c3fed6` +Source fingerprint: `232be78ef441` ## Summary | Item | Count | |---|---:| -| Services | 30 | +| Services | 28 | | Networks | 5 | | Volumes | 0 | @@ -40,8 +40,6 @@ Source fingerprint: `0fad36c3fed6` | portainer | portainer | portainer/portainer-ce:latest | | monitoring, all, portainer | traefik | | unless-stopped | | prometheus | prometheus | prom/prometheus:latest | | monitoring, all, prometheus | monitor, traefik | | unless-stopped | | searxng-webapp | searxng-webapp | searxng/searxng | | apps, all, searxng | traefik | | always | -| shift-recorder-web | shift-recorder | | /home/nixos/docker/apps/shift-recorder | apps, all, shift-recorder | traefik | | unless-stopped | -| stockfill | stockfill | | /home/nixos/docker/apps/stockfill | apps, all, stockfill | traefik | | unless-stopped | | telegraf | telegraf | telegraf:latest | | monitoring, all, telegraf, prometheus | monitor | | unless-stopped | | traefik | traefik | traefik:3 | /home/nixos/docker/core | core, all, traefik | traefik | {'mode': 'ingress', 'target': 80, 'published': '80', 'protocol': 'tcp'}, {'mode': 'ingress', 'target': 443, 'published': '443', 'protocol': 'tcp'} | always | diff --git a/docs/public/diagrams.md b/docs/public/diagrams.md index 334e03b..12b1336 100644 --- a/docs/public/diagrams.md +++ b/docs/public/diagrams.md @@ -2,8 +2,14 @@ ## Physical / virtual topology +This view groups containers by inferred host and service role (edge/proxy/auth, monitoring, automation, apps, and supporting storage/services). + ![Physical topology](physical-topology.svg) ## Docker, Traefik and Dynu routing +This view shows sanitised public DNS names flowing to Traefik, then to exposed Docker services, with backend Docker network membership shown as secondary context. + +_Diagrams are generated from Compose data and Traefik labels._ + ![Docker Traefik Dynu](docker-traefik-dynu.svg) diff --git a/docs/public/index.md b/docs/public/index.md index 9d57d8e..d88d6d2 100644 --- a/docs/public/index.md +++ b/docs/public/index.md @@ -2,6 +2,8 @@ This documentation is generated from the infrastructure repository. Sensitive values are redacted. +> Generated docs are sanitised/redacted before publishing to GitHub Pages. + ## Infrastructure diagrams ### Physical / virtual topology @@ -17,4 +19,3 @@ This documentation is generated from the infrastructure repository. Sensitive va - [Diagrams](diagrams.md) - [Compose Inventory](compose-inventory.md) - [Traefik Routes](traefik-routes.md) -- [Prometheus Rules](prometheus-rules.md) diff --git a/docs/public/prometheus-rules.md b/docs/public/prometheus-rules.md deleted file mode 100644 index 8ff8978..0000000 --- a/docs/public/prometheus-rules.md +++ /dev/null @@ -1,127 +0,0 @@ -# Prometheus Rules - -| File | Group | Alert | Expr | For | Labels | Annotations | -|---|---|---|---|---|---|---| -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| docker/monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | -| monitoring/prometheus/rules/alerts.yml | system | HostHighCPU | 100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m]))) > 90 | 2m | {'severity': 'warning'} | {'summary': 'High CPU usage on host'} | -| monitoring/prometheus/rules/alerts.yml | system | ContainerRestarting | increase(container_restart_count[10m]) > 3 | 1m | {'severity': 'warning'} | {'summary': 'Container restarting frequently'} | -| monitoring/prometheus/rules/alerts.yml | system | AlwaysFiring | vector(1) | 10s | {'severity': 'critical'} | {'summary': 'This alert should always fire'} | diff --git a/docs/public/traefik-routes.md b/docs/public/traefik-routes.md index 18734a7..fa19faf 100644 --- a/docs/public/traefik-routes.md +++ b/docs/public/traefik-routes.md @@ -18,6 +18,4 @@ | portainer | portainer | Host(``) | websecure | true | | 9000 | | prometheus | prometheus | Host(``) | websecure | | authelia | 9090 | | searxng-webapp | searxng | Host(``) | websecure | | | 8080 | -| shift-recorder-web | shifts | Host(``) | websecure | true | | 80 | -| stockfill | stockfill | Host(``) | websecure | true | | 80 | | traefik | traefik | Host(``) | websecure | | authelia | | diff --git a/mkdocs.yml b/mkdocs.yml index 8b54c34..390d6e9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,7 +14,6 @@ nav: - Generated: - Compose Inventory: generated/compose-inventory.md - Traefik Routes: generated/traefik-routes.md - - Prometheus Rules: generated/prometheus-rules.md theme: name: mkdocs diff --git a/scripts/docs/generate-all.sh b/scripts/docs/generate-all.sh index 65806ee..798603b 100755 --- a/scripts/docs/generate-all.sh +++ b/scripts/docs/generate-all.sh @@ -6,7 +6,6 @@ mkdir -p docs/generated docs/diagrams docs/public scripts/docs/render-compose-config.sh python3 scripts/docs/generate-compose-inventory.py docs/generated/docker-compose.resolved.yml docs/generated/compose-inventory.md python3 scripts/docs/generate-traefik-routes.py docs/generated/docker-compose.resolved.yml docs/generated/traefik-routes.md -python3 scripts/docs/generate-prometheus-rules.py docs/generated/prometheus-rules.md python3 scripts/docs/generate-docs-index.py docs/generated/index.md python3 scripts/docs/generate-diagrams.py --compose docs/generated/docker-compose.resolved.yml --out-dir docs/diagrams python3 scripts/docs/sanitize-public-docs.py docs/generated docs/diagrams docs/public diff --git a/scripts/docs/generate-diagrams.py b/scripts/docs/generate-diagrams.py index 7945c71..08af270 100644 --- a/scripts/docs/generate-diagrams.py +++ b/scripts/docs/generate-diagrams.py @@ -77,38 +77,67 @@ def infer_host(service_name: str, service: dict) -> str: return "docker" +def categorize_service(service_name: str) -> str: + s = service_name.lower() + if any(k in s for k in ["traefik", "authelia", "oauth", "auth", "proxy", "nginx", "caddy"]): + return "edge/proxy/auth" + if any(k in s for k in ["prometheus", "grafana", "loki", "promtail", "alert", "node-exporter", "cadvisor"]): + return "monitoring" + if any(k in s for k in ["watchtower", "diun", "ansible", "cron", "runner", "backup"]): + return "automation" + if any(k in s for k in ["postgres", "mariadb", "mysql", "redis", "minio", "nfs", "storage", "db", "queue"]): + return "storage/database/support" + return "apps" + + def generate_physical_topology(compose: dict, out_dot: Path, out_svg: Path) -> None: services = compose.get("services") or {} - hosts: dict[str, list[str]] = {} + hosts: dict[str, dict[str, list[str]]] = {} for name, svc in services.items(): - hosts.setdefault(infer_host(name, svc), []).append(name) + host = infer_host(name, svc) + cat = categorize_service(name) + hosts.setdefault(host, {}).setdefault(cat, []).append(name) lines = [ "digraph PhysicalTopology {", - " graph [rankdir=LR, compound=true, splines=ortho, nodesep=0.45, ranksep=0.75, fontname=\"Helvetica\"];", + " graph [rankdir=LR, compound=true, splines=polyline, nodesep=0.7, ranksep=1.2, fontname=\"Helvetica\", concentrate=true];", " node [fontname=\"Helvetica\", fontsize=10, style=\"rounded,filled\", fillcolor=\"#ffffff\"];", - " edge [fontname=\"Helvetica\", fontsize=9];", + " edge [fontname=\"Helvetica\", fontsize=9, color=\"#64748b\"];", ] - for host, host_services in sorted(hosts.items()): - lines.extend( - [ - f' subgraph "cluster_{host}" {{', - f' label="{host}";', - ' style="rounded,filled";', - ' color="#c7d6f5";', - ' fillcolor="#eef3ff";', - f' "host:{host}" [label="{host}", shape=box3d, fillcolor="#d4e3ff"];', - ] - ) - for service in sorted(host_services): - lines.append( - f' "svc:{service}" [label="{service}", shape=box, fillcolor="#dff2e1"];' - ) - lines.append(f' "host:{host}" -> "svc:{service}" [style=dashed, color="#6b7280"];') - lines.append(" }") + for host, cat_map in sorted(hosts.items()): + lines.extend([ + f' subgraph "cluster_{host}" {{', + f' label="{host} host";', + ' style="rounded,filled";', + ' color="#93c5fd";', + ' fillcolor="#eff6ff";', + ]) + for category, svcs in sorted(cat_map.items()): + cluster_id = f"cluster_{host}_{re.sub(r'[^a-zA-Z0-9]+', '_', category)}" + lines.extend([ + f' subgraph "{cluster_id}" {{', + f' label="{category}";', + ' style="rounded,dashed";', + ' color="#bfdbfe";', + ' fillcolor="#f8fbff";', + ]) + for service in sorted(svcs): + lines.append(f' "svc:{service}" [label="{service}", shape=box, fillcolor="#dcfce7"];') + lines.append(' }') + lines.append(' }') - lines.append("}") + lines.extend([ + ' subgraph "cluster_legend" {', + ' label="Legend"; style="rounded"; color="#d1d5db";', + ' "leg_host" [label="Host cluster", shape=box3d, fillcolor="#eff6ff"];', + ' "leg_cat" [label="Service category", shape=folder, fillcolor="#f8fbff"];', + ' "leg_svc" [label="Container/service", shape=box, fillcolor="#dcfce7"];', + ' "leg_host" -> "leg_cat" [style=dashed];', + ' "leg_cat" -> "leg_svc" [style=dashed];', + ' }', + "}", + ]) write_dot(out_dot, lines) render_svg(out_dot, out_svg) @@ -120,62 +149,83 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) -> lines = [ "digraph DockerTraefikDynu {", - " graph [rankdir=LR, compound=true, splines=true, nodesep=0.5, ranksep=1.0, fontname=\"Helvetica\"];", + " graph [rankdir=LR, compound=true, splines=ortho, nodesep=0.7, ranksep=1.2, fontname=\"Helvetica\", concentrate=true];", " node [fontname=\"Helvetica\", fontsize=10, style=\"rounded,filled\"];", - " edge [fontname=\"Helvetica\", fontsize=9];", - ' "ext:dynu" [label="Dynu / Public DNS", shape=oval, fillcolor="#fde68a"];', - ' "svc:traefik" [label="traefik", shape=box, fillcolor="#bfdbfe"];', + " edge [fontname=\"Helvetica\", fontsize=9, color=\"#334155\"];", + ' "svc:traefik" [label="Traefik\n(entrypoint)", shape=box, fillcolor="#bfdbfe"];', ] - for net in sorted(networks.keys()): - lines.append(f' "net:{net}" [label="{net}", shape=ellipse, fillcolor="#f3f4f6"];') + routes: dict[str, dict] = {} + dns_nodes: set[str] = set() for svc_name, svc in sorted(services.items()): - lines.append(f' "svc:{svc_name}" [label="{svc_name}", shape=box, fillcolor="#dcfce7"];') - svc_nets = svc.get("networks") or [] - if isinstance(svc_nets, dict): - svc_nets = svc_nets.keys() - for net in svc_nets: - lines.append(f' "svc:{svc_name}" -> "net:{net}" [color="#6b7280"];') - labels = parse_labels(svc) router_prefix = "traefik.http.routers." service_prefix = "traefik.http.services." + lb_ports = {} + for k, v in labels.items(): + if k.startswith(service_prefix) and k.endswith(".loadbalancer.server.port"): + lb_ports[k[len(service_prefix):].split(".", 1)[0]] = v routers = sorted({k[len(router_prefix):].split(".", 1)[0] for k in labels if k.startswith(router_prefix)}) for router in routers: rule = labels.get(f"{router_prefix}{router}.rule", "") - router_service = labels.get(f"{router_prefix}{router}.service", svc_name) + target = labels.get(f"{router_prefix}{router}.service", svc_name) middlewares = labels.get(f"{router_prefix}{router}.middlewares", "") - entrypoints = labels.get(f"{router_prefix}{router}.entrypoints", "") tls = labels.get(f"{router_prefix}{router}.tls", "false") - lines.append(f' "router:{router}" [label="router:{router}\\nentry:{entrypoints} tls:{tls}", shape=diamond, fillcolor="#fbcfe8"];') - lines.append(f' "svc:traefik" -> "router:{router}";') - target_node = f"traefik-service:{router_service}" - lines.append(f' "{target_node}" [label="service:{router_service}", shape=component, fillcolor="#fecaca"];') - lines.append(f' "router:{router}" -> "{target_node}";') + port = lb_ports.get(target, "") + badges = [] + if str(tls).lower() in ("true", "1"): + badges.append("TLS") + mw_low = middlewares.lower() + if "authelia" in mw_low: + badges.append("authelia") + if "mtls" in mw_low: + badges.append("mTLS") + hosts = [sanitize_domain(h, known_domains) for h in extract_hosts(rule)] + if not hosts: + continue + info = routes.setdefault(svc_name, {"hosts": set(), "port": port, "badges": set()}) + info["hosts"].update(hosts) + if port: + info["port"] = port + info["badges"].update(badges) - for host in extract_hosts(rule): - clean = sanitize_domain(host, known_domains) - lines.append(f' "dns:{clean}" [label="{clean}", shape=note, fillcolor="#fde68a"];') - lines.append(f' "ext:dynu" -> "dns:{clean}";') - lines.append(f' "dns:{clean}" -> "router:{router}";') + for svc_name, info in sorted(routes.items()): + label = svc_name + if info.get("port"): + label += f"\n:{info['port']}" + if info.get("badges"): + label += "\n[" + ", ".join(sorted(info["badges"])) + "]" + lines.append(f' "svc:{svc_name}" [label="{label}", shape=box, fillcolor="#dcfce7"];') + lines.append(f' "svc:traefik" -> "svc:{svc_name}" [penwidth=1.4];') + for host in sorted(info["hosts"]): + dns_nodes.add(host) + lines.append(f' "dns:{host}" [label="{host}", shape=note, fillcolor="#fef3c7"];') + lines.append(f' "dns:{host}" -> "svc:traefik";') - for middleware in [m.strip() for m in middlewares.split(",") if m.strip()]: - lines.append(f' "mw:{middleware}" [label="{middleware}", shape=hexagon, fillcolor="#ddd6fe"];') - lines.append(f' "router:{router}" -> "mw:{middleware}" [style=dashed];') + lines.append(' { rank=same; ' + '; '.join([f'"dns:{d}"' for d in sorted(dns_nodes)]) + '; }' if dns_nodes else '') - lb_services = sorted({k[len(service_prefix):].split(".", 1)[0] for k in labels if k.startswith(service_prefix)}) - for lb in lb_services: - port = labels.get(f"{service_prefix}{lb}.loadbalancer.server.port", "") - lines.append(f' "traefik-service:{lb}" [label="service:{lb}\\nport:{port}", shape=component, fillcolor="#fecaca"];') - lines.append(f' "traefik-service:{lb}" -> "svc:{svc_name}";') + lines.append(' subgraph "cluster_networks" {') + lines.append(' label="Docker backend networks"; style="rounded,dashed"; color="#d1d5db";') + for net in sorted(networks.keys()): + lines.append(f' "net:{net}" [label="{net}", shape=ellipse, fillcolor="#f8fafc"];') + lines.append(' }') + + for svc_name in sorted(routes.keys()): + svc = services.get(svc_name, {}) + svc_nets = svc.get("networks") or [] + if isinstance(svc_nets, dict): + svc_nets = svc_nets.keys() + for net in svc_nets: + lines.append(f' "svc:{svc_name}" -> "net:{net}" [style=dashed, color="#94a3b8", arrowsize=0.7];') lines.append("}") write_dot(out_dot, lines) render_svg(out_dot, out_svg) + def generate_compose_topology(compose: dict, out_dot: Path, out_svg: Path) -> None: services = compose.get("services") or {} networks = compose.get("networks") or {} diff --git a/scripts/docs/generate-docs-index.py b/scripts/docs/generate-docs-index.py index 5f4fd60..bcedad9 100644 --- a/scripts/docs/generate-docs-index.py +++ b/scripts/docs/generate-docs-index.py @@ -15,7 +15,6 @@ This directory contains documentation generated automatically from repository co - [Resolved Docker Compose config](docker-compose.resolved.yml) - [Compose inventory](compose-inventory.md) - [Traefik routes](traefik-routes.md) -- [Prometheus rules](prometheus-rules.md) - [Docker Compose diagram](../diagrams/docker-compose.svg) """ ) diff --git a/scripts/docs/sanitize-public-docs.py b/scripts/docs/sanitize-public-docs.py index 4a1a6e2..7544fbc 100644 --- a/scripts/docs/sanitize-public-docs.py +++ b/scripts/docs/sanitize-public-docs.py @@ -21,7 +21,7 @@ def sanitize_text(content: str) -> str: return content -for name in ['compose-inventory.md', 'traefik-routes.md', 'prometheus-rules.md']: +for name in ['compose-inventory.md', 'traefik-routes.md']: src = src_generated / name if src.exists(): (out_dir / name).write_text(sanitize_text(src.read_text(errors='ignore'))) @@ -36,6 +36,8 @@ for svg_name in ['docker-compose.svg', 'physical-topology.svg', 'docker-traefik- This documentation is generated from the infrastructure repository. Sensitive values are redacted. +> Generated docs are sanitised/redacted before publishing to GitHub Pages. + ## Infrastructure diagrams ### Physical / virtual topology @@ -51,7 +53,6 @@ This documentation is generated from the infrastructure repository. Sensitive va - [Diagrams](diagrams.md) - [Compose Inventory](compose-inventory.md) - [Traefik Routes](traefik-routes.md) -- [Prometheus Rules](prometheus-rules.md) """ ) @@ -60,10 +61,16 @@ This documentation is generated from the infrastructure repository. Sensitive va ## Physical / virtual topology +This view groups containers by inferred host and service role (edge/proxy/auth, monitoring, automation, apps, and supporting storage/services). + ![Physical topology](physical-topology.svg) ## Docker, Traefik and Dynu routing +This view shows sanitised public DNS names flowing to Traefik, then to exposed Docker services, with backend Docker network membership shown as secondary context. + +_Diagrams are generated from Compose data and Traefik labels._ + ![Docker Traefik Dynu](docker-traefik-dynu.svg) """ )