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、内存、磁盘和网络指标。配合 PrometheusGrafana,你可以轻松构建一套专业的服务器监控系统。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。