Node Exporter 采集 CPU 内存指标教程
Node Exporter 是 Prometheus 官方提供的系统级指标采集器,能够暴露 Linux 服务器的 CPU、内存、磁盘、网络等硬件和操作系统指标。它是 Prometheus 监控体系中最基础也最重要的组件之一。本文将在搬瓦工 VPS 上安装 Node Exporter 并将其接入 Prometheus 进行数据采集。
一、环境要求
- 操作系统:任意 Linux 发行版(Ubuntu、Debian、CentOS 等)。
- 资源消耗:Node Exporter 非常轻量,仅占用约 10-20MB 内存。
- 端口:默认使用 9100 端口。
- 前置条件:已部署 Prometheus。
二、创建系统用户
useradd --no-create-home --shell /bin/false node_exporter
三、下载并安装 Node Exporter
3.1 下载最新版本
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xzf node_exporter-1.7.0.linux-amd64.tar.gz
3.2 安装二进制文件
cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
chown node_exporter:node_exporter /usr/local/bin/node_exporter
四、创建 Systemd 服务
cat > /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.cpu \
--collector.meminfo \
--collector.diskstats \
--collector.filesystem \
--collector.netdev \
--collector.loadavg \
--collector.uname \
--collector.vmstat \
--collector.time \
--collector.processes \
--web.listen-address=:9100
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
启动服务
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter
验证运行
# 检查端口监听
ss -tlnp | grep 9100
# 测试指标输出
curl http://localhost:9100/metrics | head -20
五、在 Prometheus 中配置 Node Exporter
编辑 Prometheus 配置文件 /etc/prometheus/prometheus.yml,在 scrape_configs 中添加 Node Exporter 目标:
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
labels:
instance: "bwg-vps-01"
# 如果需要监控多台服务器
- job_name: "node-remote"
static_configs:
- targets: ["192.168.1.10:9100", "192.168.1.11:9100"]
重新加载 Prometheus 配置:
# 方式一:发送 SIGHUP 信号
kill -HUP $(pidof prometheus)
# 方式二:通过 API(需启用 --web.enable-lifecycle)
curl -X POST http://localhost:9090/-/reload
# 方式三:重启服务
systemctl restart prometheus
六、核心指标详解
6.1 CPU 指标
Node Exporter 通过 node_cpu_seconds_total 指标暴露 CPU 使用情况,按不同模式(user、system、idle、iowait 等)统计:
# CPU 使用率(排除 idle 模式)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 各 CPU 核心使用率
rate(node_cpu_seconds_total{mode!="idle"}[5m]) * 100
# iowait 比例(判断是否有 I/O 瓶颈)
avg by(instance) (rate(node_cpu_seconds_total{mode="iowait"}[5m])) * 100
# 系统负载(1/5/15 分钟)
node_load1
node_load5
node_load15
6.2 内存指标
# 内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
# 可用内存(GB)
node_memory_MemAvailable_bytes / 1024 / 1024 / 1024
# 总内存(GB)
node_memory_MemTotal_bytes / 1024 / 1024 / 1024
# Swap 使用率
(1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100
# 缓存和缓冲区占用
node_memory_Cached_bytes + node_memory_Buffers_bytes
6.3 磁盘指标
# 磁盘使用率
(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100
# 磁盘可用空间(GB)
node_filesystem_avail_bytes{mountpoint="/"} / 1024 / 1024 / 1024
# 磁盘 I/O 读取速率(字节/秒)
rate(node_disk_read_bytes_total[5m])
# 磁盘 I/O 写入速率(字节/秒)
rate(node_disk_written_bytes_total[5m])
# 磁盘 IOPS
rate(node_disk_reads_completed_total[5m]) + rate(node_disk_writes_completed_total[5m])
6.4 网络指标
# 网络接收速率(字节/秒)
rate(node_network_receive_bytes_total{device="eth0"}[5m])
# 网络发送速率(字节/秒)
rate(node_network_transmit_bytes_total{device="eth0"}[5m])
# 网络错误包速率
rate(node_network_receive_errs_total{device="eth0"}[5m])
rate(node_network_transmit_errs_total{device="eth0"}[5m])
七、在 Grafana 中可视化
安装好 Grafana 后,推荐导入以下仪表板:
- 仪表板 ID 1860:Node Exporter Full,包含 CPU、内存、磁盘、网络等所有指标的详细面板。
- 仪表板 ID 11074:Node Exporter for Prometheus,简洁版系统概览。
导入方法:登录 Grafana → Dashboards → Import → 输入 ID → 选择 Prometheus 数据源 → Import。
八、使用 Docker 运行 Node Exporter
docker run -d \
--name node-exporter \
--restart unless-stopped \
--net host \
--pid host \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter:latest \
--path.procfs=/host/proc \
--path.sysfs=/host/sys \
--path.rootfs=/rootfs \
--collector.filesystem.mount-points-exclude="^/(sys|proc|dev|host|etc)($$|/)"
注意:Docker 方式运行需要使用 --net host 以便准确采集网络指标。
九、安全配置
9.1 限制访问
Node Exporter 默认不带认证功能,建议通过防火墙限制访问:
# 仅允许 Prometheus 服务器访问
ufw allow from YOUR_PROMETHEUS_IP to any port 9100
ufw deny 9100
9.2 启用 TLS 和基本认证
cat > /etc/node_exporter/web.yml <<EOF
tls_server_config:
cert_file: /etc/node_exporter/cert.pem
key_file: /etc/node_exporter/key.pem
basic_auth_users:
prometheus: YOUR_BCRYPT_HASH
EOF
# 在 systemd 服务中添加参数
# --web.config.file=/etc/node_exporter/web.yml
十、常见问题
部分指标为空
某些收集器需要特定的内核支持或权限。检查 Node Exporter 日志:
journalctl -u node_exporter -f
Prometheus 无法抓取指标
# 检查 Prometheus 目标状态
curl http://localhost:9090/api/v1/targets | python3 -m json.tool
确认网络连通性和防火墙设置。
总结
Node Exporter 是 Prometheus 监控体系中不可或缺的组件,能够全面采集服务器的 CPU、内存、磁盘和网络指标。配合 Prometheus 和 Grafana,你可以轻松构建一套专业的服务器监控系统。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。