node-exporter 获取服务器状态数据完整原理与流程

laoluo
laoluo
laoluo
管理员
125
文章
0
粉丝
教程评论2阅读模式

一、核心定位

node-exporter 是 Prometheus 官方提供的服务器硬件 / 系统指标采集器,运行在被监控服务器本地,通过读取系统底层接口、文件、命令采集硬件、内核、磁盘、网络、CPU、内存等指标,对外提供 HTTP /metrics 接口供 Prometheus 拉取。

node-exporter 获取服务器状态数据完整原理与流程

二、数据采集底层来源(Linux 为主)

1. 核心数据源:/proc 虚拟文件系统(内核实时信息)

/proc 是 Linux 内核导出运行时状态的虚拟目录,node-exporter 绝大部分指标来自这里:

文件路径 采集指标
/proc/cpuinfo CPU 型号、核心数、主频
/proc/stat CPU 各模式占用(user/system/idle/iowait)、中断、上下文切换
/proc/meminfo 总内存、可用内存、缓存、Swap 用量
/proc/diskstats 磁盘读写 IO、扇区、IO 耗时
/proc/net/dev 网卡收发包、字节、丢包、错误包
/proc/loadavg 1/5/15 分钟系统负载
/proc/uptime 服务器运行时长
/proc/sys/fs/file-nr 文件句柄使用量
/proc/mounts 挂载点、磁盘分区使用率

2. /sys 设备硬件信息(硬件、块设备、电源、温度)

/sys 是 sysfs 文件系统,存放硬件设备标准化信息:

  • 磁盘型号、扇区大小、RAID 信息
  • CPU 温度、风扇转速(/sys/class/hwmon/
  • 电源、电池状态(物理机 / 笔记本)

3. 系统调用 & 标准工具封装

部分指标无法直接读文件,node-exporter 通过 Go 系统调用封装实现:

  1. 文件系统使用率:封装 statfs() 系统调用,等价 df -h
  2. 系统时间、时区:系统时间调用
  3. 硬件信息:读取 DMI 信息 /sys/devices/virtual/dmi/id/(主板、序列号、厂商)
  4. 磁盘分区标签:解析 blkid 信息

4. 可选采集器(额外开启)

node-exporter 内置多组 collector,默认只开启基础采集,部分需手动启用:

  • systemd:读取 systemd 服务运行状态(journal、服务启停)
  • arp:ARP 连接表
  • ipvs:LVS 负载均衡状态
  • raid:软 RAID mdstat 状态
  • hwmon:硬件温度传感器
  • smart:硬盘 SMART 健康信息(需 root)
  • logind:登录会话、用户在线数

三、完整数据流转流程

步骤 1:node-exporter 启动加载采集器

  1. 进程启动时加载内置 Collector(CPU、mem、disk、net 等);
  2. 根据启动参数 --collector.xxx 开启 / 关闭对应采集模块;
  3. 绑定默认端口 9100,启动 HTTP 服务。

步骤 2:Prometheus 定时发起拉取(核心逻辑:Pull 模式)

Prometheus 配置 scrape_configs 定义目标:

scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["192.168.1.100:9100"] # 被监控机 node-exporter 地址

每隔 scrape_interval(默认 15s)发送 HTTP GET 请求:

GET http://192.168.1.100:9100/metrics

步骤 3:node-exporter 实时采集系统数据

收到 /metrics 请求后同步执行全量采集(每次拉取重新读取系统文件,无本地缓存):

  1. 依次遍历所有启用的 Collector;
  2. 读取 /proc//sys、调用系统函数获取原始数值;
  3. 原始数据标准化转换为 Prometheus 格式指标(key-value + label); 示例输出:
node_memory_MemTotal_bytes 16679440384
node_cpu_seconds_total{cpu="0",mode="idle"} 123456.78
node_disk_io_time_seconds_total{device="vda"} 789.12
  1. 增加内置标签:instance(服务器地址)、job 等。

步骤 4:数据返回 & Prometheus 存储

  1. node-exporter 将文本格式指标返回给 Prometheus;
  2. Prometheus 解析指标,存入本地时序数据库 TSDB;
  3. Grafana 查询 Prometheus 数据做可视化展示。

四、关键特性细节

  1. 无推送逻辑 node-exporter 不会主动上报数据,始终被动等待 Prometheus 拉取;
  2. 无持久化存储 采集的数据仅存在内存,请求结束即销毁,时序数据完全由 Prometheus 保存;
  3. 权限影响采集范围
    • 普通用户:只能获取基础 CPU、内存、网络;
    • root 用户:可读取 SMART 硬盘健康、硬件温度、raid、systemd 完整状态;
  4. 采集性能 读取 /proc 是内存虚拟文件,IO 开销极低,单台机器 node-exporter CPU 占用几乎可忽略;大量磁盘 / 传感器采集才会轻微增加耗时;
  5. 过滤不需要的指标 通过 --no-collector.xxx 关闭无用采集器减少输出,例如:
./node-exporter --no-collector.arp --no-collector.ipvs

五、Windows 环境差异补充

Windows 版 node-exporter 不再读取 /proc,底层调用 Windows API:

  • 性能计数器(PerfCounter)获取 CPU、内存、磁盘;
  • WMI 接口读取硬件、系统服务、网卡信息; 采集逻辑一致:本地采集 → 9100 端口 /metrics → Prometheus 拉取。

六、常用验证命令

在被监控服务器直接查看原始指标,验证采集是否正常:

# 本机访问 metrics 接口
curl http://127.0.0.1:9100/metrics

# 过滤内存指标
curl http://127.0.0.1:9100/metrics | grep node_memory

 

 
laoluo
  • 本文由 laoluo 发表于2026年6月27日 10:17:31
  • 转载请务必保留本文链接:https://www.mydata-api.com/tutorials/286.html
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证