17.4.2 Node Exporter系统指标采集

Node Exporter 用于采集 Linux 主机的系统级指标,通过读取 /proc、/sys 等内核接口获取 CPU、内存、磁盘、网络等指标,适用于物理机、虚拟机与容器宿主机的统一监控。本节聚焦原理、安装、配置、验证、排错与练习。

原理草图

文章图片

核心指标类别与含义(示例)
- CPU:node_cpu_seconds_totalnode_load1/5/15
- 内存:node_memory_MemAvailable_bytesnode_memory_SwapUsed_bytes
- 磁盘:node_disk_io_time_seconds_totalnode_filesystem_avail_bytes
- 网络:node_network_receive_bytes_totalnode_network_transmit_errors_total
- 系统:node_boot_time_secondsnode_processes_running

安装与启用(binary + systemd 示例)

# 1) 下载并解压(以 x86_64 为例)
VERSION=1.6.1
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz
tar -zxf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/

# 2) 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service >/dev/null <<'EOF'
[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=nobody
Group=nogroup
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=:9100 \
  --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|run|var/lib/docker/.+)($|/)" \
  --collector.systemd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 3) 启动并验证
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter --no-pager

# 4) 验证指标输出
curl -s http://127.0.0.1:9100/metrics | head

命令解释
- --web.listen-address=:9100:监听端口 9100
- --collector.filesystem.ignored-mount-points:忽略虚拟挂载点,降低噪声
- --collector.systemd:启用 systemd 采集器(需权限)

Prometheus 抓取配置示例

# /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.10.10:9100','192.168.10.11:9100']

容器方式运行(宿主机指标)

# 宿主机采集需挂载 /proc /sys 和根文件系统
docker run -d --name node_exporter --net=host --pid=host \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /:/rootfs:ro \
  prom/node-exporter:v1.6.1 \
  --path.procfs=/host/proc \
  --path.sysfs=/host/sys \
  --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|run|var/lib/docker/.+)($|/)"

关键配置参数与示例

# 禁用 systemd 采集器,减少开销
/usr/local/bin/node_exporter --no-collector.systemd

# 仅启用部分采集器
/usr/local/bin/node_exporter --collector.cpu --collector.meminfo --collector.filesystem

验证与指标查询示例

# 1) 过滤 CPU 使用相关指标
curl -s http://127.0.0.1:9100/metrics | grep -E "node_cpu_seconds_total|node_load1"

# 2) 查看磁盘可用空间
curl -s http://127.0.0.1:9100/metrics | grep node_filesystem_avail_bytes

常见问题与排错
1) 访问不到 9100 端口

# 查看监听端口
ss -lntp | grep 9100
# 查看日志
journalctl -u node_exporter -n 50 --no-pager

2) 指标缺失或为 0

# 检查采集器是否被禁用
ps -ef | grep node_exporter | grep collector
# 容器内检查挂载
docker inspect node_exporter | grep -A2 Mounts

3) 系统负载高

# 降低采集器数量
/usr/local/bin/node_exporter --no-collector.systemd --no-collector.mdadm

练习
1) 安装 Node Exporter,并在 Prometheus 中新增抓取目标。
2) 通过 curl 找出当前 node_load1node_memory_MemAvailable_bytes 的值。
3) 在容器模式下部署 Node Exporter,验证是否能采集到宿主机磁盘容量指标。
4) 关闭 systemd 采集器后,比较 /metrics 输出差异并记录耗时变化。