4. Node Exporter 参数详解:CPU采集开关、内存采集开关、磁盘采集开关、网络采集开关、自定义采集器

Node Exporter 是 Prometheus 生态中最核心的主机指标采集器,其默认采集项超过 20 个模块。在生产环境中,并非所有采集项都需要开启——开启过多采集器会增加 Exporter 自身开销,并给 Prometheus Server 带来不必要的抓取压力。本章详细拆解 CPU、内存、磁盘、网络四大核心采集开关的配置方法,并介绍如何通过 --collector.disable-defaults 配合白名单模式构建自定义采集器集合。

4.1 采集开关总览与启用机制

Node Exporter 的每个采集器(collector)都对应一个 --collector.<name> 命令行参数。默认情况下,所有标记为“默认启用”的采集器都会自动加载。用户可以通过以下两种方式控制采集开关:

控制方式 参数示例 说明
显式禁用 --no-collector.cpu 在参数前加 no- 前缀,关闭指定采集器
白名单模式 --collector.disable-defaults --collector.cpu --collector.meminfo 先禁用所有默认采集器,再逐个启用需要的模块
黑名单模式 --collector.disable-defaults --collector.diskstats(仅举例) 不推荐;白名单模式更可控
最佳实践:在 Runbook 联动自愈场景中,建议使用 白名单模式。只开启自愈剧本实际依赖的指标采集器,可降低 30%~50% 的 Exporter 内存占用,并减少 Prometheus 抓取超时风险。

4.2 CPU 采集开关

CPU 采集器负责输出每个 CPU 核心的用户态、系统态、空闲、I/O 等待、软中断、硬中断等时间占比。默认采集器名为 cpu,对应的指标前缀为 node_cpu_seconds_total。

4.2.1 关键参数

参数 默认值 说明
--collector.cpu 启用 CPU 时间采集主开关
--collector.cpu.guest 启用 是否采集 guest 和 guest_nice 时间(虚拟机场景)
--collector.cpu.info 启用 是否采集 CPU 型号、频率、核心数等静态信息

4.2.2 典型配置示例

# 仅采集 CPU 时间,关闭 guest 和 info 子采集器
./node_exporter \
  --collector.disable-defaults \
  --collector.cpu \
  --no-collector.cpu.guest \
  --no-collector.cpu.info
自愈场景关联:CPU 使用率突增告警通常依赖 node_cpu_seconds_total{mode="user"} 和 mode="system"。如果自愈剧本只检测 CPU 负载,可以关闭 cpu.info 以减少指标基数。

4.3 内存采集开关

内存采集器 meminfo 输出 /proc/meminfo 中的全部内存指标,包括总内存、可用内存、缓存、缓冲区、Swap 等。默认采集器名为 meminfo,指标前缀 node_memory_MemTotal_bytes、node_memory_MemAvailable_bytes 等。

4.3.1 关键参数

参数 默认值 说明
--collector.meminfo 启用 内存指标主开关
--collector.meminfo.numa 禁用 是否采集 NUMA 节点内存分布(多路服务器场景)

4.3.2 典型配置示例

# 启用内存采集,同时开启 NUMA 支持
./node_exporter \
  --collector.disable-defaults \
  --collector.meminfo \
  --collector.meminfo.numa
注意:NUMA 采集会为每个 NUMA 节点生成一组独立指标。在 2 路服务器上指标基数翻倍,4 路服务器翻 4 倍。如果自愈剧本不涉及 NUMA 感知调度,建议保持关闭。

4.4 磁盘采集开关

磁盘采集涉及两个主要模块:diskstats(磁盘 I/O 统计)和 filesystem(文件系统使用率)。两者默认均启用。

4.4.1 关键参数

参数 默认值 说明
--collector.diskstats 启用 磁盘读写次数、延迟、队列长度等 I/O 指标
--collector.filesystem 启用 文件系统挂载点、总空间、已用空间、inode 使用率
--collector.filesystem.mount-points-exclude ^/(dev|proc|sys|run|tmpfs|...)($|/) 排除不需要监控的挂载点正则表达式
--collector.filesystem.fs-types-exclude ^(autofs|binfmt_misc|bpf|cgroup2?|...)$ 排除不需要监控的文件系统类型正则表达式

4.4.2 典型配置示例

# 启用磁盘 I/O 和文件系统,排除 tmpfs 和 docker 临时挂载
./node_exporter \
  --collector.disable-defaults \
  --collector.diskstats \
  --collector.filesystem \
  --collector.filesystem.mount-points-exclude="^/(dev|proc|sys|run|tmpfs|var/lib/docker)($|/)" \
  --collector.filesystem.fs-types-exclude="^(autofs|tmpfs|devpts|overlay)$"
磁盘自愈场景:磁盘使用率超过 90% 的自愈剧本通常依赖 node_filesystem_avail_bytes 和 node_filesystem_size_bytes。建议在 mount-points-exclude 中排除 /boot、/snap 等非业务挂载点,减少无效告警。

4.5 网络采集开关

网络采集器 network 输出每个网络接口的收发字节数、包数、错误数、丢包数等。默认采集器名为 network,指标前缀 node_network_receive_bytes_total、node_network_transmit_bytes_total。

4.5.1 关键参数

参数 默认值 说明
--collector.network 启用 网络指标主开关
--collector.network.device-exclude ^(lo|veth.*|docker.*|cali.*|flannel.*)$ 排除虚拟网卡的正则表达式
--collector.network.statistics 禁用 是否采集 /proc/net/netstat 中的扩展统计(如 TCP 重传、丢包)

4.5.2 典型配置示例

# 启用网络采集,排除 loopback 和容器虚拟网卡,开启扩展统计
./node_exporter \
  --collector.disable-defaults \
  --collector.network \
  --collector.network.device-exclude="^(lo|veth.*|docker.*|cali.*|flannel.*)$" \
  --collector.network.statistics
网络自愈场景:网络丢包率检测依赖 node_network_receive_drop_total 和 node_network_transmit_drop_total。如果主机运行在容器化环境,务必通过 device-exclude 排除虚拟网卡,否则每个容器网卡都会生成独立指标,导致 Prometheus 存储膨胀。

4.6 自定义采集器

当内置采集器无法满足特定自愈场景时,Node Exporter 提供 textfile collector 机制,允许用户通过 shell 脚本或任意可执行程序生成自定义指标,写入指定文件后由 Exporter 定时读取。

4.6.1 textfile collector 工作原理

  1. 用户编写脚本,输出 Prometheus 格式的指标文本(以 # HELP 和 # TYPE 开头)。
  2. 脚本将结果写入 .prom 后缀文件(如 /var/lib/node_exporter/custom_metrics.prom)。
  3. Node Exporter 通过 --collector.textfile.directory 参数指定目录,定期读取目录下所有 .prom 文件并暴露。

4.6.2 关键参数

参数 默认值 说明
--collector.textfile.directory 空(不启用) 指定存放 .prom 文件的目录路径
--collector.textfile.interval 5s 文件扫描间隔(建议与 Prometheus 抓取间隔一致)

4.6.3 自定义采集器示例

#!/bin/bash
# 自定义采集器:检测 Nginx 进程存活状态
# 输出到 /var/lib/node_exporter/custom_metrics.prom

NGINX_PID=$(pgrep -x nginx | wc -l)

cat <<EOF
# HELP custom_nginx_process_alive Nginx process alive status (1=alive, 0=dead)
# TYPE custom_nginx_process_alive gauge
custom_nginx_process_alive ${NGINX_PID}
EOF
# Node Exporter 启动参数
./node_exporter \
  --collector.disable-defaults \
  --collector.cpu \
  --collector.meminfo \
  --collector.diskstats \
  --collector.filesystem \
  --collector.network \
  --collector.textfile.directory="/var/lib/node_exporter"
注意事项:
  • 自定义脚本必须使用 cron 或 systemd timer 定期执行,Node Exporter 只负责读取文件,不负责生成指标。
  • 文件写入建议使用原子操作:先写入临时文件,再 mv 重命名,避免 Exporter 读到不完整内容。
  • 指标命名建议使用 custom_ 前缀,与内置指标区分。

4.7 采集开关配置总览图

下图展示了 Node Exporter 采集开关的完整配置流程,从启动参数到最终指标暴露的链路关系:

Node Exporter 采集开关配置总览 Node Exporter 采集开关配置总览 启动参数解析器 白名单模式 --collector.disable-defaults 黑名单模式 --no-collector.xxx 混合模式 白名单 + 部分禁用 CPU 采集器 cpu / cpu.guest 内存采集器 meminfo / numa 磁盘采集器 diskstats / filesystem 网络采集器 network / statistics 自定义采集器 (textfile) --collector.textfile.directory /metrics 端点 → Prometheus 抓取

4.8 生产环境推荐配置清单

以下配置适用于大多数 Runbook 联动自愈场景,兼顾指标完整性与采集性能:

./node_exporter \
  --collector.disable-defaults \
  --collector.cpu \
  --no-collector.cpu.guest \
  --no-collector.cpu.info \
  --collector.meminfo \
  --collector.diskstats \
  --collector.filesystem \
  --collector.filesystem.mount-points-exclude="^/(dev|proc|sys|run|tmpfs|var/lib/docker)($|/)" \
  --collector.filesystem.fs-types-exclude="^(autofs|tmpfs|devpts|overlay)$" \
  --collector.network \
  --collector.network.device-exclude="^(lo|veth.*|docker.*|cali.*|flannel.*)$" \
  --collector.network.statistics \
  --collector.textfile.directory="/var/lib/node_exporter" \
  --web.listen-address=":9100" \
  --log.level="warn"
性能对比:默认全量采集模式下,Node Exporter 在 64 核、256GB 内存、10 块磁盘、50 个网络接口的物理机上,内存占用约 80~120MB。采用上述白名单配置后,内存占用可降至 30~50MB,抓取耗时从 800ms 降至 200ms 以内。