用 node_exporter 采集主机指标

在你的服务器上装 node_exporter,把 CPU、内存、磁盘、网络等主机指标暴露给 Prometheus 抓取。

当你想知道 VPS 到底忙不忙、磁盘还剩多少、内存是不是快爆了,靠 top 一次次登录看并不现实。nodeexporter 是 Prometheus 官方提供的一个采集器,专门把 Linux 主机的硬件与内核指标(CPU、内存、磁盘、文件系统、网络、负载等)通过 HTTP 暴露成 Prometheus 能识别的文本格式。它本身只读、不改系统,资源占用极小,是搭建主机监控的第一块基石。

本文以 Ubuntu / Debian 为主,带你从零跑起来。

一、下载并安装二进制

nodeexporter 是单个静态二进制,无需依赖,直接下载解压即可。到官方 Releases 页找到对应架构(一般是 linux-amd64),然后:

# 请把版本号换成官网最新的 releases 版本
VER=1.8.2
cd /tmp
curl -fsSLO https://github.com/prometheus/node_exporter/releases/download/v${VER}/node_exporter-${VER}.linux-amd64.tar.gz
tar xzf node_exporter-${VER}.linux-amd64.tar.gz
sudo cp node_exporter-${VER}.linux-amd64/node_exporter /usr/local/bin/

建议用一个无登录权限的专用系统账号来跑它,减小攻击面:

sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter

二、用 systemd 跑成后台服务

新建 /etc/systemd/system/nodeexporter.service:

[Unit]
Description=Prometheus node_exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

验证是否正常监听 9100 端口、能吐出指标:

curl -s localhost:9100/metrics | head

看到大量 nodecpusecondstotal、nodememory 之类的行,就说明成功了。

三、让 Prometheus 来抓取

在 Prometheus 的 prometheus.yml 里,把这台机器加为一个 scrape target:

scrape_configs:
  - job_name: node
    static_configs:
      - targets:
          - "10.0.0.5:9100"   # 换成你服务器的内网 IP
        labels:
          instance: web-1

改完 reload Prometheus(kill -HUP 或调 /-/reload),在 Prometheus 的 Targets 页面确认该 target 状态是 UP。

四、安全:别把 9100 裸露到公网

/metrics 里包含主机名、内核版本、挂载点、网卡等信息,不应对公网开放。两条原则任选或叠加:

  • 只监听内网:如上例用 --web.listen-address=<内网IP>:9100 或 127.0.0.1(同机 Prometheus 时)。
  • 防火墙限制:只放行 Prometheus 服务器的 IP。
sudo ufw allow from 10.0.0.10 to any port 9100 proto tcp

五、常见指标含义

  • nodecpusecondstotal:各 CPU 各模式累计秒数,用 rate() 算使用率。
  • nodememoryMemAvailablebytes:可用内存,比 MemFree 更能反映真实余量。
  • nodefilesystemavailbytes:文件系统剩余空间,配合 size 算使用率。
  • nodeload1 / nodeload5 / nodeload15:系统平均负载。
  • nodenetworkreceivebytestotal / transmit:网卡收发字节,用 rate() 算带宽。
  • nodediskiotimesecondstotal:磁盘繁忙时间,判断 IO 瓶颈。

小结

装 nodeexporter 只需三步:下载二进制、用 systemd 跑成监听 9100 的服务、在 Prometheus 加一个 scrape target。务必把端口收在内网或用防火墙限制,避免泄露主机信息。跑通之后,你就有了 CPU、内存、磁盘、网络的持续时序数据,后续接 Grafana 出图或配告警都水到渠成。