当前位置: 首页 > news >正文

读懂Node Exporter采集数据的原理

一、核心原理

  1. 模块化采集器(Collectors)​
    Node Exporter 由 ​50+ 个独立 Collectors​ 构成(如 cpumemoryfilesystemnetstat 等)。每个 Collector 负责特定维度的数据采集:

    • 内核数据​:通过读取 /proc/sys 虚拟文件系统(例如 cpu 信息来自 /proc/stat)。

    • 系统命令​:执行 ip linkps 等命令解析输出。

    • 硬件指标​:通过第三方库(如 github.com/prometheus/procfs)解析。

关键设计​:通过 --collector.<name> 参数按需启用 Collector,避免无用资源消耗。

  1. HTTP 暴露端点
    Node Exporter 默认监听 ​9100 端口,当收到 Prometheus 的 HTTP 请求(GET /metrics)时:
bash
复制
curl http://localhost:9100/metrics
# 输出示例:
node_cpu_seconds_total{cpu="0",mode="user"} 12345.67
node_memory_MemFree_bytes 2.1e+09
  1. Prometheus 主动拉取
    Prometheus Server 按配置的 scrape_interval(如 15s)周期性地请求 Node Exporter 的 /metrics 接口,获取最新指标数据。

二、数据采集解析

2.1 典型 Collector 实现机制

Collector数据源采集方式关键指标示例
cpu/proc/stat解析文件node_cpu_seconds_total{mode="idle"}
memory/proc/meminfo正则匹配字段node_memory_MemFree_bytes
filesystem/proc/mounts + syscall.Statfs挂载点扫描 + 系统调用node_filesystem_avail_bytes{device="/dev/sda1"}
netdev/proc/net/dev解析网络接口流量node_network_receive_bytes_total{device="eth0"}
systemdD-Bus 接口Unix Socket 通信node_systemd_unit_state{name="docker.service"}

2.2 指标生成逻辑(以内存为例)

  • 读取 /proc/meminfo
MemTotal:       32817152 kB
MemFree:         2148760 kB
...
  • 转换为标准 Prometheus 指标:
node_memory_MemTotal_bytes 32817152000
node_memory_MemFree_bytes 2148760000

单位转换​:原始 kB 值 ×1024 → 统一为 bytes 单位

三、避坑指南(生产环境经验)

3.1 高基数陷阱

问题​:netstat Collector 产生 node_netstat_Tcp_Ext 等包含 IP 的指标,导致时序爆炸。
解决​:禁用高危 Collector:

--no-collector.netstat --no-collector.sockstat

3.2 ​文件描述符耗尽

问题​:频繁采集大量挂载点(如 Kubernetes 容器)导致 EMFILE 错误。
解决​:调整内核参数:

sysctl -w fs.file-max=1000000

3.3 采集超时优化

问题​:HugePage 数量多时 meminfo 解析变慢。
解决​:设置单次采集超时:

# prometheus.yml
scrape_timeout: 10s

总结​:Node Exporter 本质是 ​系统指标标准化中间层,通过抽象操作系统接口为 Prometheus 提供统一数据模型。其高效性源于 ​零缓冲设计​(实时采集+响应),瓶颈常出现在文件操作和网络传输,需针对性优化配置。掌握其原理对监控集群资源调度、Exporter 定制开发至关重要。

http://www.dtcms.com/a/313917.html

相关文章:

  • Spring Boot + ShardingSphere 实现分库分表 + 读写分离实战
  • day15 SPI
  • PE 方法中的海面边界建模:光滑与粗糙海面条件解析
  • Android JUnit 测试框架详解:从基础到高级实践
  • C 语言枚举、typedef 与预处理详解
  • TinUI较复杂面板布局演示
  • 使用1panel将http升级至https的过程
  • 8.高斯混合模型
  • Next Terminal 实战:内网无密码安全登录
  • Ubuntu共享文件夹权限设置
  • 面试题:闭包和循环的异步如何结合
  • 《算法导论》第 1 章 - 算法在计算中的作用
  • 微型化 IMU:重塑无人机与机器人的性能边界
  • 从HTTP到WebSocket:打造极速实时通讯体验
  • 微帧GPU视频硬编优化引擎:面向人工智能大时代的AI算法与硬编协同优化方案
  • web第一次作业
  • cf Educational Codeforces Round 177 C. Disappearing Permutation
  • C++八股文——设计模式
  • 分布式版本控制工具Git
  • 微服务配置管理:Spring Cloud Alibaba Nacos 实践
  • Scrapy爬虫集成MongoDB存储
  • 基于单片机空气质量检测/气体检测系统
  • FPGA学习笔记——简单的乒乓缓存(RAM)
  • docker容器命令
  • Dbeaver数据库的安装和使用(保姆级别)
  • 嵌入式硬件篇---OpenMV存储
  • 精品PPT | 企业数字化运营平台总体规划建设方案
  • LeetCode热题100——42. 接雨水
  • AI绘画-Stable Diffusion-WebUI的ControlNet用法
  • 设计模式(一)——抽象工厂模式