From 971fe8dda8ddf946deeea2044fd5e2145a90b73f Mon Sep 17 00:00:00 2001 From: jeremy Date: Sat, 11 Jul 2026 11:19:04 -0500 Subject: [PATCH] feat: standalone node-exporter + telegraf compose per node Post-Swarm: node-exporter must run standalone with pid:host, since Swarm mode blocked it and cross-node /proc namespaces contaminated swap metrics. Marks the stacks/ definition superseded. Co-Authored-By: Claude Opus 4.8 --- compose/bart/node-exporter/docker-compose.yml | 24 +++++++++++++++++++ compose/bart/telegraf/docker-compose.yml | 22 +++++++++++++++++ .../node-exporter/docker-compose.yml | 24 +++++++++++++++++++ .../hf-pdocker-01/telegraf/docker-compose.yml | 22 +++++++++++++++++ .../node-exporter/docker-compose.yml | 24 +++++++++++++++++++ .../hf-pdocker-02/telegraf/docker-compose.yml | 22 +++++++++++++++++ stacks/node-exporter/docker-compose.yml | 12 +++++++++- 7 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 compose/bart/node-exporter/docker-compose.yml create mode 100644 compose/bart/telegraf/docker-compose.yml create mode 100644 compose/hf-pdocker-01/node-exporter/docker-compose.yml create mode 100644 compose/hf-pdocker-01/telegraf/docker-compose.yml create mode 100644 compose/hf-pdocker-02/node-exporter/docker-compose.yml create mode 100644 compose/hf-pdocker-02/telegraf/docker-compose.yml diff --git a/compose/bart/node-exporter/docker-compose.yml b/compose/bart/node-exporter/docker-compose.yml new file mode 100644 index 0000000..44c01a5 --- /dev/null +++ b/compose/bart/node-exporter/docker-compose.yml @@ -0,0 +1,24 @@ +services: + node-exporter: + image: prom/node-exporter:v1.7.0 + container_name: node-exporter + hostname: bart + network_mode: host + pid: host + restart: unless-stopped + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.rootfs=/rootfs' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" + labels: + - "com.centurylinklabs.watchtower.enable=false" diff --git a/compose/bart/telegraf/docker-compose.yml b/compose/bart/telegraf/docker-compose.yml new file mode 100644 index 0000000..7176768 --- /dev/null +++ b/compose/bart/telegraf/docker-compose.yml @@ -0,0 +1,22 @@ +services: + telegraf: + image: telegraf:latest + container_name: telegraf + hostname: bart + restart: unless-stopped + environment: + - HOST_PROC=/host/proc + - HOST_SYS=/host/sys + - HOST_ETC=/host/etc + volumes: + - /mnt/docker-data/configs/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - /sys:/host/sys:ro + - /proc:/host/proc:ro + - /etc:/host/etc:ro + mem_limit: 512M + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" diff --git a/compose/hf-pdocker-01/node-exporter/docker-compose.yml b/compose/hf-pdocker-01/node-exporter/docker-compose.yml new file mode 100644 index 0000000..1a2310d --- /dev/null +++ b/compose/hf-pdocker-01/node-exporter/docker-compose.yml @@ -0,0 +1,24 @@ +services: + node-exporter: + image: prom/node-exporter:v1.7.0 + container_name: node-exporter + hostname: hf-pdocker-01 + network_mode: host + pid: host + restart: unless-stopped + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.rootfs=/rootfs' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" + labels: + - "com.centurylinklabs.watchtower.enable=false" diff --git a/compose/hf-pdocker-01/telegraf/docker-compose.yml b/compose/hf-pdocker-01/telegraf/docker-compose.yml new file mode 100644 index 0000000..eb098d2 --- /dev/null +++ b/compose/hf-pdocker-01/telegraf/docker-compose.yml @@ -0,0 +1,22 @@ +services: + telegraf: + image: telegraf:latest + container_name: telegraf + hostname: hf-pdocker-01 + restart: unless-stopped + environment: + - HOST_PROC=/host/proc + - HOST_SYS=/host/sys + - HOST_ETC=/host/etc + volumes: + - /mnt/docker-data/configs/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - /sys:/host/sys:ro + - /proc:/host/proc:ro + - /etc:/host/etc:ro + mem_limit: 512M + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" diff --git a/compose/hf-pdocker-02/node-exporter/docker-compose.yml b/compose/hf-pdocker-02/node-exporter/docker-compose.yml new file mode 100644 index 0000000..2c5575f --- /dev/null +++ b/compose/hf-pdocker-02/node-exporter/docker-compose.yml @@ -0,0 +1,24 @@ +services: + node-exporter: + image: prom/node-exporter:v1.7.0 + container_name: node-exporter + hostname: hf-pdocker-02 + network_mode: host + pid: host + restart: unless-stopped + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.rootfs=/rootfs' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" + labels: + - "com.centurylinklabs.watchtower.enable=false" diff --git a/compose/hf-pdocker-02/telegraf/docker-compose.yml b/compose/hf-pdocker-02/telegraf/docker-compose.yml new file mode 100644 index 0000000..625efa0 --- /dev/null +++ b/compose/hf-pdocker-02/telegraf/docker-compose.yml @@ -0,0 +1,22 @@ +services: + telegraf: + image: telegraf:latest + container_name: telegraf + hostname: hf-pdocker-02 + restart: unless-stopped + environment: + - HOST_PROC=/host/proc + - HOST_SYS=/host/sys + - HOST_ETC=/host/etc + volumes: + - /mnt/docker-data/configs/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - /sys:/host/sys:ro + - /proc:/host/proc:ro + - /etc:/host/etc:ro + mem_limit: 512M + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" diff --git a/stacks/node-exporter/docker-compose.yml b/stacks/node-exporter/docker-compose.yml index 1fc3438..5272e36 100644 --- a/stacks/node-exporter/docker-compose.yml +++ b/stacks/node-exporter/docker-compose.yml @@ -1,7 +1,16 @@ +# SUPERSEDED 2026-03-21: Do NOT deploy this as a Swarm stack. +# Swarm mode blocks pid: host, causing cross-node /proc namespace contamination +# where node-exporter reads wrong host's memory metrics. +# Use standalone Compose on each node instead: +# compose/hf-pdocker-01/node-exporter/docker-compose.yml +# compose/hf-pdocker-02/node-exporter/docker-compose.yml +# compose/bart/node-exporter/docker-compose.yml + services: node-exporter: - image: prom/node-exporter:latest + image: prom/node-exporter:v1.7.0 hostname: "{{.Node.Hostname}}" + pid: host ports: - "9100:9100" volumes: @@ -12,6 +21,7 @@ services: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' + - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' logging: driver: "json-file" options: