基于Node Exporter的Golang GPU与CPU频率温度监控实现
本文介绍如何基于Golang对Node Exporter进行二次开发,实现GPU及CPU频率、温度的监控。通过整合现有代码库,编译生成二进制文件,可直接用于Prometheus等监控系统,无需额外部署DCGM。
Node Exporter GPU与CPU监控方案概述
概述:利用node_exporter实现GPU与CPU频率及温度的统一监控,避免同时部署node_exporter与dcgm带来的冗余。本文聚焦于最高温度区域的监测。若需获取所有CPU核心的独立温度数据,需对代码进行相应调整。
代码参考了https://gitee.com/kevinliu_CQ/node_exporter中关于GPU监控的实现部分。
集成了cpu的两项自定义监控功能,参考自https://gitee.com/jiaminxu/self_node_exporter。
环境准备与编译部署
执行Go语言环境的安装步骤。
wget https://dl.google.com/go/go1.16.5.linux-amd64.tar.gz
tar -xvf go1.16.5.linux-amd64.tar.gz
cp -r ./go /usr/local
cd /usr/local/go/bin
cp -r * /usr/bin
mkdir -p $HOME/go
echo "export GOROOT=$HOME/go" >> /etc/profile
echo "export GOPATH=$HOME/gopath" >> /etc/profile
echo "export PATH=$PATH:$GOROOT/bin:$GOPATH/bin" >> /etc/profile
echo "export env -w GO111MODULE=on" >> /etc/profile
echo "export env -w GOPROXY=https://goproxy.io,direct" >> /etc/profile
source /etc/profile
cd /srv/
git clone https://gitee.com/kevinliu_CQ/node_exporter.git
cd node_exporter/
# cp自己的go文件到collector/下
mkdir -p /usr/local/cuda/include
cp -p nvml.h /usr/local/cuda/include
export GOPROXY=https://goproxy.cn
go build编译完成后,直接运行./node_exporter二进制文件即可启动服务。
gitee仓库中已提供编译好的amd64架构可执行文件。
这个版本添加了Nvidia GPU信息的抓取,所以编译的时候需要nvml.h 复制到/usr/local/cuda/include 目录里面
1. 复制依赖
```bash
mkdir -p /usr/local/cuda/include
cp -p nvml.h /usr/local/cuda/include
```
2. 定义GOPROXY变量
```bash
export GOPROXY=https://goproxy.cn
```
3. 编译项目
```bash
cd /root/gitee_node_exporter
go build
如果报错kit相关需要替换"github.com/go-kit/log"为"github.com/go-kit/kit/log"
```
4. 在如果一切正常在目录中会生成node_exporter的可执行二进制文件
5. 运行即可
```bash
./node_exporter --web.listen-address=":19200"
```
6. 打包arm64架构的方法
* apt install gcc-aarch64-linux-gnu
* env CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC_FOR_TARGET=gcc-aarch64-linux-gnu CC=aarch64-linux-gnu-gcc go build
CPU温度读取机制与实现
CPU最高温度通过x86_pkg_temp路径获取。
$ cat /sys/class/thermal/thermal_zone10/type
x86_pkg_temp
随后/sys/class/thermal/thermal_zone10/temp是用于i3状态栏显示的文件路径。
补充说明,每个内核的温度数据均可通过temp*_input在/sys/devices/platform/coretemp.0/hwmon/hwmon*/. 关联temp*_label文件可以明确显示哪个文件对应哪个内核(本例涉及4个内核):
.../hwmon*/$ grep "" temp*_label
temp1_label:Physical id 0
temp2_label:Core 0
temp3_label:Core 1
temp4_label:Core 2
temp5_label:Core 3
该文件temp1_input对应于内核的最高温度值。
若需获取每个CPU核心的具体温度,需要执行以下操作:
cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input

参考资源
https://qa.1r1g.cn/unix/ask/21339181/
https://cloud.tencent.com/developer/article/1820706
至此,关于使用golang通过node_exporter监控GPU及CPU频率和温度的介绍结束。如需了解更多golang监控GPU频率与温度的内容,请查阅本站往期文章或继续浏览后续相关教程,感谢大家的支持!
怎么在本地运行JavaScript脚本:Node.js下载安装与环境配置教程
2026-11-05 09:02:33
JavaScript开发环境怎么搭建:Node.js安装与VS Code配置指南
2026-11-03 23:36:59
JavaScript零基础入门:环境搭建与第一个Hello World
2026-11-03 23:34:09
NW.js 是什么:基于 Chromium 和 Node.js 的桌面应用框架
2026-11-03 15:14:00
nvm、n 和官方安装包:哪种 Node.js 升级方式更适合你
2026-11-03 14:54:28
