From fd7a15209fd83e0357ccae165055a38d3d48af56 Mon Sep 17 00:00:00 2001 From: Socheat Sok Date: Sun, 23 Jun 2024 12:14:10 +0700 Subject: [PATCH] Refactor docker stack deployment --- docker-stack/Makefile | 30 ++---- docker-stack/alertmanager/Makefile | 19 ---- .../dockerswarm-nodes-alertmanager.yml | 41 -------- docker-stack/alertmanager/docker-stack.yml | 99 ------------------- docker-stack/cadvisor/Makefile | 19 ---- .../configs/dockerswarm-nodes-cadvisor.yml | 80 --------------- docker-stack/cadvisor/docker-stack.yml | 81 --------------- .../{prometheus => }/docker-stack.yml | 2 +- docker-stack/node-exporter/Makefile | 19 ---- .../dockerswarm-nodes-node-exporter.yml | 41 -------- docker-stack/node-exporter/docker-stack.yml | 54 ---------- docker-stack/prometheus/Makefile | 19 ---- 12 files changed, 11 insertions(+), 493 deletions(-) delete mode 100644 docker-stack/alertmanager/Makefile delete mode 100644 docker-stack/alertmanager/configs/dockerswarm-nodes-alertmanager.yml delete mode 100644 docker-stack/alertmanager/docker-stack.yml delete mode 100644 docker-stack/cadvisor/Makefile delete mode 100644 docker-stack/cadvisor/configs/dockerswarm-nodes-cadvisor.yml delete mode 100644 docker-stack/cadvisor/docker-stack.yml rename docker-stack/{prometheus => }/docker-stack.yml (99%) delete mode 100644 docker-stack/node-exporter/Makefile delete mode 100644 docker-stack/node-exporter/configs/dockerswarm-nodes-node-exporter.yml delete mode 100644 docker-stack/node-exporter/docker-stack.yml delete mode 100644 docker-stack/prometheus/Makefile diff --git a/docker-stack/Makefile b/docker-stack/Makefile index 98e258d..8184ddb 100644 --- a/docker-stack/Makefile +++ b/docker-stack/Makefile @@ -1,29 +1,19 @@ -docker-stack-name = test_prometheus +docker-stack-name = promstack_prometheus it: @echo "make [deploy|remove|clean|reset] docker-stack-name=$(docker-stack-name)" -networks: - @docker network create --scope=swarm --driver=overlay --attachable dockerswarm_ingress > /dev/null 2>&1 || true - @docker network create --scope=swarm --driver=overlay --attachable prometheus > /dev/null 2>&1 || true - @docker network create --scope=swarm --driver=overlay --attachable prometheus_gwnetwork > /dev/null 2>&1 || true - -deploy: networks - $(MAKE) -C prometheus deploy - $(MAKE) -C alertmanager deploy - $(MAKE) -C cadvisor deploy - $(MAKE) -C node-exporter deploy +deploy: + docker stack deploy -c docker-stack.yml $(docker-stack-name) remove: - $(MAKE) -C prometheus remove - $(MAKE) -C alertmanager remove - $(MAKE) -C cadvisor remove - $(MAKE) -C node-exporter remove + docker stack rm --detach=false $(docker-stack-name) clean: - $(MAKE) -C prometheus clean - $(MAKE) -C alertmanager clean - $(MAKE) -C cadvisor clean - $(MAKE) -C node-exporter clean + docker volume ls -q | grep $(docker-stack-name) | xargs docker volume rm + +reset: remove wait clean deploy -reset: remove clean deploy +wait: + @echo "Waiting for previous recipe to finish..." + @sleep 10 diff --git a/docker-stack/alertmanager/Makefile b/docker-stack/alertmanager/Makefile deleted file mode 100644 index 798e3da..0000000 --- a/docker-stack/alertmanager/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -docker-stack-name = promstack_alertmanager - -it: - @echo "make [deploy|remove|clean|reset] docker-stack-name=$(docker-stack-name)" - -deploy: - docker stack deploy -c docker-stack.yml $(docker-stack-name) - -remove: - docker stack rm --detach=false $(docker-stack-name) - -clean: - docker volume ls -q | grep $(docker-stack-name) | xargs docker volume rm - -reset: remove wait clean deploy - -wait: - @echo "Waiting for previous recipe to finish..." - @sleep 10 diff --git a/docker-stack/alertmanager/configs/dockerswarm-nodes-alertmanager.yml b/docker-stack/alertmanager/configs/dockerswarm-nodes-alertmanager.yml deleted file mode 100644 index 60425a6..0000000 --- a/docker-stack/alertmanager/configs/dockerswarm-nodes-alertmanager.yml +++ /dev/null @@ -1,41 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/prometheus.json -# -# Scrape config for Docker Swarm Nodes -# -# The Docker Engine metrics are required to be configured in the daemon.json file for Prometheus to scrape them. -# This configuration also includes a job to scrape the Node Exporter metrics that run on each node. -scrape_configs: - - job_name: 'promstack/nodes/alertmanager' - - dockerswarm_sd_configs: - - host: unix:///var/run/docker.sock - role: nodes - - relabel_configs: - # ================================================================================ - # Override prometheus internal labels - # ================================================================================ - - source_labels: - - __meta_dockerswarm_node_id - target_label: __address__ - replacement: alertmanager.$1.cluster.local:9093 - - # Set hostname as instance label - - source_labels: - - __meta_dockerswarm_node_address - target_label: instance - replacement: $1:9093 - - # ================================================================================ - # Label mapping - # ================================================================================ - - action: labelmap - regex: __meta_(dockerswarm_node_.+) - - action: labelmap - regex: __meta_dockerswarm_(node_(?:id|hostname)) - - # Set node_name label to node hostname - # This is useful for providing compatibility with the swarmprom dashboards - - source_labels: - - __meta_dockerswarm_node_hostname - target_label: node_name diff --git a/docker-stack/alertmanager/docker-stack.yml b/docker-stack/alertmanager/docker-stack.yml deleted file mode 100644 index aed440d..0000000 --- a/docker-stack/alertmanager/docker-stack.yml +++ /dev/null @@ -1,99 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/swarmlibs/dockerstack-schema/main/schema/dockerstack-spec.json - -x-default-logging: &x-default-logging - options: - max-size: "12m" - max-file: "5" - driver: json-file - -x-exporter-resources-constraints: &x-exporter-resources-constraints - limits: - memory: 128M - reservations: - memory: 64M - -services: - - # ==================================================== - # Alertmanager - # https://github.com/prometheus/alertmanager - # ==================================================== - - alertmanager: - image: swarmlibs/alertmanager:main - deploy: - mode: global - placement: - max_replicas_per_node: 1 - constraints: - - node.role == manager - labels: - io.prometheus.role: "alertmanager" - io.prometheus.dockerswarm-tasks.should_be_scraped: "false" - io.prometheus.dockerswarm-services.should_be_probed: "false" - logging: *x-default-logging - environment: - - DOCKERSWARM_SERVICE_ID={{.Service.ID}} - - DOCKERSWARM_SERVICE_NAME={{.Service.Name}} - - DOCKERSWARM_NODE_ID={{.Node.ID}} - - DOCKERSWARM_NODE_HOSTNAME={{.Node.Hostname}} - - DOCKERSWARM_TASK_ID={{.Task.ID}} - - DOCKERSWARM_TASK_NAME={{.Task.Name}} - - DOCKERSWARM_TASK_SLOT={{.Task.Slot}} - - DOCKERSWARM_STACK_NAMESPACE={{ index .Service.Labels "com.docker.stack.namespace"}} - ports: - - published: 9093 - target: 9093 - mode: host - hostname: alertmanager.{{.Node.ID}}.cluster.local - networks: - alertmanager_internal: - prometheus_gwnetwork: - extra_hosts: - - "host.docker.internal:host-gateway" - volumes: - - type: volume - source: alertmanager-data - target: /alertmanager - - alertmanager-config-reloader: - image: quay.io/prometheus-operator/prometheus-config-reloader:v0.74.0 - command: - - --listen-address=:8080 - - --watched-dir=/alertmanager-configs.d - - --reload-url=http://alertmanager:9093/-/reload - deploy: - mode: global - resources: *x-exporter-resources-constraints - placement: - max_replicas_per_node: 1 - constraints: - - node.role == manager - labels: - io.prometheus.role: "alertmanager-config-reloader" - io.prometheus.dockerswarm-tasks.should_be_scraped: "false" - io.prometheus.dockerswarm-services.should_be_probed: "false" - logging: *x-default-logging - networks: - alertmanager_internal: - volumes: - - type: volume - source: alertmanager-configs - target: /alertmanager-configs.d - -configs: - prometheus-scrape-config-v1: - file: ./configs/dockerswarm-nodes-alertmanager.yml - labels: - - "io.prometheus.scrape_config=true" - -volumes: - alertmanager-data: - alertmanager-configs: - -networks: - alertmanager_internal: - internal: true - prometheus_gwnetwork: - name: prometheus_gwnetwork - external: true diff --git a/docker-stack/cadvisor/Makefile b/docker-stack/cadvisor/Makefile deleted file mode 100644 index 0e709cd..0000000 --- a/docker-stack/cadvisor/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -docker-stack-name = promstack_cadvisor - -it: - @echo "make [deploy|remove|clean|reset] docker-stack-name=$(docker-stack-name)" - -deploy: - docker stack deploy -c docker-stack.yml $(docker-stack-name) - -remove: - docker stack rm --detach=false $(docker-stack-name) - -clean: - docker volume ls -q | grep $(docker-stack-name) | xargs docker volume rm - -reset: remove wait clean deploy - -wait: - @echo "Waiting for previous recipe to finish..." - @sleep 10 diff --git a/docker-stack/cadvisor/configs/dockerswarm-nodes-cadvisor.yml b/docker-stack/cadvisor/configs/dockerswarm-nodes-cadvisor.yml deleted file mode 100644 index 13147e5..0000000 --- a/docker-stack/cadvisor/configs/dockerswarm-nodes-cadvisor.yml +++ /dev/null @@ -1,80 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/prometheus.json -# -scrape_configs: - - - job_name: 'promstack/nodes/cadvisor' - - dockerswarm_sd_configs: - - host: unix:///var/run/docker.sock - role: nodes - - relabel_configs: - # ================================================================================ - # Override prometheus internal labels - # ================================================================================ - - source_labels: - - __meta_dockerswarm_node_id - target_label: __address__ - replacement: cadvisor.$1.cluster.local:8080 - - - source_labels: - - __meta_dockerswarm_node_address - target_label: instance - replacement: $1:8080 - - # ================================================================================ - # Label mapping - # ================================================================================ - - action: labelmap - regex: __meta_(dockerswarm_node_.+) - - action: labelmap - regex: __meta_dockerswarm_(node_(?:id|hostname)) - - metric_relabel_configs: - # ================================================================================ - # Label mapping - # ================================================================================ - - action: labelmap - regex: container_label_com_(docker_.*) - - # Rename labels docker_swarm_(.+) to dockerswarm_$1 - # This is useful for compatibility with "dockerswarm-tasks.yml" relabeling - - action: labelmap - regex: container_label_com_docker_swarm_(.+) - replacement: dockerswarm_$1 - - action: labeldrop - regex: (^docker_swarm_.+) - - # ================================================================================ - # Docker Swarm compatible relabeling - # - dockerswarm_task_name - # ================================================================================ - - # Set "task" label to ". - - source_labels: - - dockerswarm_task_name - target_label: task - regex: (.+)\.(.+)\.(.+) - replacement: $1.$2 - - # ================================================================================ - # Kubernetes compatible relabeling - # - namespace - # - deployment - # - pod - # ================================================================================ - # # Set Kubernetes's Namespace with "com.docker.stack.namespace" label - - source_labels: - - container_label_com_docker_stack_namespace - target_label: namespace - - # Set Kubernetes's Deployment with "com.docker.stack.namespace" label - - source_labels: - - container_label_com_docker_swarm_service_name - target_label: deployment - - # Set Kubernetes's Pod Name with Docker Swarm's Service Name - - source_labels: - - dockerswarm_task_name - target_label: pod - regex: (.*) diff --git a/docker-stack/cadvisor/docker-stack.yml b/docker-stack/cadvisor/docker-stack.yml deleted file mode 100644 index bcf8124..0000000 --- a/docker-stack/cadvisor/docker-stack.yml +++ /dev/null @@ -1,81 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/swarmlibs/dockerstack-schema/main/schema/dockerstack-spec.json - -x-default-logging: &x-default-logging - options: - max-size: "12m" - max-file: "5" - driver: json-file - -x-exporter-resources-constraints: &x-exporter-resources-constraints - limits: - memory: 128M - reservations: - memory: 64M - -services: - - # ==================================================== - # cAdvisor - # https://github.com/google/cadvisor - # ==================================================== - - cadvisor: - image: gcr.io/cadvisor/cadvisor:v0.47.0 - command: -logtostderr -docker_only - deploy: - mode: global - resources: *x-exporter-resources-constraints - labels: - io.prometheus.role: "cadvisor" - io.prometheus.dockerswarm-tasks.should_be_scraped: "false" - io.prometheus.dockerswarm-services.should_be_probed: "false" - logging: *x-default-logging - ports: - - published: 8080 - target: 8080 - mode: host - networks: - prometheus_gwnetwork: - hostname: cadvisor.{{.Node.ID}}.cluster.local - volumes: - - type: bind - source: / - target: /rootfs - read_only: true - - type: bind - source: /var/run - target: /var/run - read_only: true - - type: bind - source: /sys - target: /sys - read_only: true - - type: bind - source: /var/lib/docker - target: /var/lib/docker - read_only: true - - type: bind - source: /var/run/docker.sock - target: /var/run/docker.sock - read_only: true - # If you are running Docker Desktop on macOS, - # You'll need to comment out the following bind mounts - # - type: bind - # source: /dev/disk - # target: /dev/disk - # read_only: true - # - type: bind - # source: /dev/kmsg - # target: /dev/kmsg - # read_only: true - -configs: - prometheus-scrape-config-v1: - file: ./configs/dockerswarm-nodes-cadvisor.yml - labels: - - "io.prometheus.scrape_config=true" - -networks: - prometheus_gwnetwork: - name: prometheus_gwnetwork - external: true diff --git a/docker-stack/prometheus/docker-stack.yml b/docker-stack/docker-stack.yml similarity index 99% rename from docker-stack/prometheus/docker-stack.yml rename to docker-stack/docker-stack.yml index b93cc44..2b17ac3 100644 --- a/docker-stack/prometheus/docker-stack.yml +++ b/docker-stack/docker-stack.yml @@ -20,7 +20,7 @@ services: # ==================================================== prometheus: - image: swarmlibs/prometheus:local + image: swarmlibs/prometheus:main deploy: mode: global placement: diff --git a/docker-stack/node-exporter/Makefile b/docker-stack/node-exporter/Makefile deleted file mode 100644 index 72218ed..0000000 --- a/docker-stack/node-exporter/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -docker-stack-name = promstack_node_exporter - -it: - @echo "make [deploy|remove|clean|reset] docker-stack-name=$(docker-stack-name)" - -deploy: - docker stack deploy -c docker-stack.yml $(docker-stack-name) - -remove: - docker stack rm --detach=false $(docker-stack-name) - -clean: - docker volume ls -q | grep $(docker-stack-name) | xargs docker volume rm - -reset: remove wait clean deploy - -wait: - @echo "Waiting for previous recipe to finish..." - @sleep 10 diff --git a/docker-stack/node-exporter/configs/dockerswarm-nodes-node-exporter.yml b/docker-stack/node-exporter/configs/dockerswarm-nodes-node-exporter.yml deleted file mode 100644 index 2320541..0000000 --- a/docker-stack/node-exporter/configs/dockerswarm-nodes-node-exporter.yml +++ /dev/null @@ -1,41 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/prometheus.json -# -# Scrape config for Docker Swarm Nodes -# -# The Docker Engine metrics are required to be configured in the daemon.json file for Prometheus to scrape them. -# This configuration also includes a job to scrape the Node Exporter metrics that run on each node. -scrape_configs: - - job_name: 'promstack/nodes/node-exporter' - - dockerswarm_sd_configs: - - host: unix:///var/run/docker.sock - role: nodes - - relabel_configs: - # ================================================================================ - # Override prometheus internal labels - # ================================================================================ - - source_labels: - - __meta_dockerswarm_node_id - target_label: __address__ - replacement: node-exporter.$1.cluster.local:9100 - - # Set hostname as instance label - - source_labels: - - __meta_dockerswarm_node_address - target_label: instance - replacement: $1:9100 - - # ================================================================================ - # Label mapping - # ================================================================================ - - action: labelmap - regex: __meta_(dockerswarm_node_.+) - - action: labelmap - regex: __meta_dockerswarm_(node_(?:id|hostname)) - - # Set node_name label to node hostname - # This is useful for providing compatibility with the swarmprom dashboards - - source_labels: - - __meta_dockerswarm_node_hostname - target_label: node_name diff --git a/docker-stack/node-exporter/docker-stack.yml b/docker-stack/node-exporter/docker-stack.yml deleted file mode 100644 index dd7d202..0000000 --- a/docker-stack/node-exporter/docker-stack.yml +++ /dev/null @@ -1,54 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/swarmlibs/dockerstack-schema/main/schema/dockerstack-spec.json - -x-default-logging: &x-default-logging - options: - max-size: "12m" - max-file: "5" - driver: json-file - -x-exporter-resources-constraints: &x-exporter-resources-constraints - limits: - memory: 128M - reservations: - memory: 64M - -services: - - # ==================================================== - # Node exporter - # https://github.com/prometheus/node_exporter - # ==================================================== - - node-exporter: - image: swarmlibs/node-exporter:main - deploy: - mode: global - resources: *x-exporter-resources-constraints - labels: - io.prometheus.role: "node-exporter" - io.prometheus.dockerswarm-tasks.should_be_scraped: "false" - io.prometheus.dockerswarm-services.should_be_probed: "false" - logging: *x-default-logging - ports: - - published: 9100 - target: 9100 - mode: host - networks: - prometheus_gwnetwork: - hostname: node-exporter.{{.Node.ID}}.cluster.local - volumes: - - type: bind - source: / - target: /rootfs - read_only: true - -configs: - prometheus-scrape-config-v1: - file: ./configs/dockerswarm-nodes-node-exporter.yml - labels: - - "io.prometheus.scrape_config=true" - -networks: - prometheus_gwnetwork: - name: prometheus_gwnetwork - external: true diff --git a/docker-stack/prometheus/Makefile b/docker-stack/prometheus/Makefile deleted file mode 100644 index 8184ddb..0000000 --- a/docker-stack/prometheus/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -docker-stack-name = promstack_prometheus - -it: - @echo "make [deploy|remove|clean|reset] docker-stack-name=$(docker-stack-name)" - -deploy: - docker stack deploy -c docker-stack.yml $(docker-stack-name) - -remove: - docker stack rm --detach=false $(docker-stack-name) - -clean: - docker volume ls -q | grep $(docker-stack-name) | xargs docker volume rm - -reset: remove wait clean deploy - -wait: - @echo "Waiting for previous recipe to finish..." - @sleep 10