17.4.2 Node Exporter系统指标采集
Node Exporter 用于采集 Linux 主机的系统级指标,通过读取 /proc、/sys 等内核接口获取 CPU、内存、磁盘、网络等指标,适用于物理机、虚拟机与容器宿主机的统一监控。本节聚焦原理、安装、配置、验证、排错与练习。
原理草图
核心指标类别与含义(示例)
- CPU:node_cpu_seconds_total、node_load1/5/15
- 内存:node_memory_MemAvailable_bytes、node_memory_SwapUsed_bytes
- 磁盘:node_disk_io_time_seconds_total、node_filesystem_avail_bytes
- 网络:node_network_receive_bytes_total、node_network_transmit_errors_total
- 系统:node_boot_time_seconds、node_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_load1 与 node_memory_MemAvailable_bytes 的值。
3) 在容器模式下部署 Node Exporter,验证是否能采集到宿主机磁盘容量指标。
4) 关闭 systemd 采集器后,比较 /metrics 输出差异并记录耗时变化。