您的位置:

NodeExporter:可扩展的系统监控组件

今天我们要聊的是NodeExporter,一款可扩展的系统监控组件。NodeExporter是Prometheus生态系统中的一员,作为Prometheus的一个客户端,NodeExporter主要负责收集服务器的各种指标,诸如CPU使用率、内存使用率、磁盘使用情况、网络流量等。

一、NodeExporter源码

NodeExporter是开源软件,其源码托管在GitHub上,感兴趣的读者可以前往查看。

二、NodeExporter指标

作为Prometheus客户端,NodeExporter的最主要的职责就是提供系统各种指标,以下是一些NodeExporter支持的指标:

node_boot_time_seconds:系统启动时间
node_cpu_seconds_total:CPU使用时间、CPU使用率
node_filesystem_avail_bytes:文件系统的可用空间大小
node_filesystem_size_bytes:文件系统的总空间大小
node_load1:1分钟平均负载
node_memory_MemAvailable_bytes:系统内存可用空间大小
node_vmstat_pgfault:发生缺页错误的次数

以上指标只是冰山一角,NodeExporter提供的指标非常多,完整列表可以在Prometheus的官方网站上查看。

三、NodeExporter采集原理

NodeExporter实现了Prometheus的/(metrics)API,提供了最基础的metric输出方式。当Prometheus Server查询NodeExporter的metric API时,NodeExporter返回系统信息。这样Prometheus就可以通过拉取的方式获得数据。

当然,NodeExporter也支持通过PushGateway的方式,将数据主动推送到Prometheus Server上,PushGateway在我们后面的文章中会介绍。

四、NodeExporter源码解读

下面我们来看一下NodeExporter源码的分层设计:

│  prometheus.go
│  README.md
│  main.go
│
├─collectors
│  │  collectors.go
│  │  cpu.go
│  │  cpufreq_linux.go
│  │  diskstats_linux.go
│  │  exports.go
│  │  filesystem_linux.go
│  │  ioctl_linux.go
│  │  loadavg_linux.go
│  │  meminfo_linux.go
│  │  netdev_linux.go
│  │  netstat_linux.go
│  │  processes_linux.go
│  │  procstat_linux.go
│  │  stat_linux.go
│  │  textfile.go
│  │  textfile_linux.go
│  │
│  ├─collector_structs
│  │      cpufreq_linux.go
│  │      diskstat.go
│  │      filesystem_linux.go
│  │      interrupts.go
│  │      meminfo.go
│  │      netstat.go
│  │      stat_linux.go
│  │      tcpstat.go
│  │      uptime.go
│  │
│  └─systemd
│          networkd_linux.go
│          systemd_linux.go
│          systemd_units.go
│          timedate_linux.go
│          udev_linux.go
│          units.go
│
├─collector/check_test_data
│      test-linux-proc-diskstats
│      test2-linux-proc-diskstats
│      test2-linux-proc-net-dev_snmp6
│      test-linux-device-mapper_multipath
│      test2-linux-device-mapper_multipath
│      test-linux-proc-stat
│      test2-linux-proc-stat
│      test2-textfile-time
│      test-textfile-go
│
├─config
│      config.go
│
├─exporter
│      node_exporter.go
│
├─textfile
│      textfile.go
│
├─util
│      helpers.go
│      md5sum.go
│      version_info.go
│
└─vendor

NodeExporter的源码分以collectors、config、exporter、textfile、util等为主要模块。

其中collectors是最核心的模块,其中包括collectors.go、cpu.go、filesystem_linux.go等 Collected部分指标。

NodeExporter的代码非常清晰、模块化并且易于理解,这也为其提供了较好的可扩展性。如果有兴趣深入了解NodeExporter的源码实现,建议阅读源码。

五、Node-export选取

Node-export选取是NodeExporter中的一个子系统,该子系统负责自动发现节点的机制和配置。

下面是一个简单的Node-export选取配置的例子:

bearer_token_file: /path/to/token/file
disable_exporter_metrics: true
disable_collectors:
  - netdev
  - sockstat

以上的配置文件意味着NodeExporter会读取/path/to/token/file中的token,同时禁用netdev和sockstat的Collector。

六、总结

综上所述,NodeExporter可以让我们轻松地收集各种系统指标,以便我们更好地监控我们的系统。NodeExporter源码清晰、模块化,易于理解,而Node-export选取则为NodeExporter提供了自动化的配置机制。

使用NodeExporter和Prometheus可以非常方便地搭建起一个优秀的监控系统,同时,我们也可以通过深入了解其源码实现,进一步扩展其功能。