Docker Swarm中容器化node-exporter监控主机流量的可行方案咨询
解决Docker Swarm环境下主机网络流量监控问题
核心问题定位
你当前的配置存在镜像误用的致命错误:使用了ubuntu/alertmanager镜像(这是Prometheus的告警组件),而非node-exporter镜像,这直接导致无法正确采集主机网络指标。此外,部分参数和挂载配置也需要调整以适配主机流量采集需求。
正确的Docker Swarm部署配置
以下是经过验证的node-exporter全局部署配置,确保采集主机而非容器的网络流量:
services: node_exporter: image: prom/node-exporter:latest pid: "host" networks: - my-proxy-public volumes: - /sys:/host/sys:ro - /proc:/host/proc:ro - /:/rootfs:ro - /etc/hostname:/etc/nodename:ro deploy: mode: global resources: limits: memory: 128M reservations: memory: 64M command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)' - '--collector.netclass.ignored-devices=^(veth|docker0|br-).*' - '--no-collector.ipvs'
关键配置说明
- 镜像修正:使用官方
prom/node-exporter镜像,确保是正确的主机指标采集工具。 - pid: host:让容器共享主机的PID命名空间,确保能访问主机的网络资源。
- 挂载目录:正确挂载主机的
/proc、/sys和根文件系统,保证node-exporter能读取主机的网络统计数据。 - 忽略容器网卡:通过
--collector.netclass.ignored-devices参数过滤掉容器相关的虚拟网卡(如veth开头、docker0、网桥设备),只保留主机物理网卡的指标。 - 全局部署:
mode: global确保Swarm集群的每台主机都运行一个node-exporter实例,实现全集群主机监控。
指标验证
部署完成后,访问node-exporter的metrics端点(默认http://<主机IP>:9100/metrics),查找node_network_receive_bytes_total指标,确认其device标签为你的主机物理网卡(如eth0、ens33),而非容器虚拟网卡,此时该指标即为主机的入站流量统计。
关于/var/run/netns目录的说明
该目录仅在主机启用了网络命名空间隔离时才会存在,若你的主机未配置相关功能,无需挂载此目录,node-exporter通过/proc/net和/sys/class/net即可获取主机网卡的流量数据。
内容的提问来源于stack exchange,提问作者Mefitico
相关产品推荐
相关产品推荐

