Proxmox VE实用技巧2:让PVE显示CPU温度状态

在PVE主机的Web管理的“概要”中提供了比较常用的运行状态信息,如:CPU利用率、平均负载、内存使用率、硬盘空间、CPU型号、内核版本、管理版本等常用信息,然而并未提供温度状态显示。此处提供一种方法,让PVE显示出系统当前温度以及风扇转速状态等信息。当然,具体能显示的信息项内容取决于主机系统的CPU类型。在本文中,将以N3700处理器为例来说明。其具体过程如下:

1. 安装lm-sensors

lm-sensors(Linux-monitoring sensors,Linux监控传感器)是是一款免费的Linux开源软件工具,提供监控温度,电压,湿度和风扇的工具和驱动程序。它也可以检测机箱入侵。

安装lm-sensor的方法很简单,在PVE的shell下运行命令即可完成,具体命令如下:

apt-get install lm-sensors

安装完成后,可以运行命令“sensors-detect”来探测哪些传感器可用并加载相关的内核模块。

执行命令“sensors”即可显示出系统运行的温度状态,下面是N3700的显示结果示例:

root@pve:/# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +26.8°C (crit = +95.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +51.0°C (high = +90.0°C, crit = +90.0°C)
Core 1: +51.0°C (high = +90.0°C, crit = +90.0°C)
Core 2: +44.0°C (high = +90.0°C, crit = +90.0°C)
Core 3: +42.0°C (high = +90.0°C, crit = +90.0°C)

上面的结果显示了N3700的当前的温度状态,其中,CPU的四个核心(Core 0、Core 1、Core2和Core3)的温度状态是我们需要关注的内容。在后文中将根据这个输出结果来进行配置来显示温度状态。

2. 编辑修改文件

PVE使用Node.js来实现基于WebUI的管理,修改此文件的目的就是让其能定期执行sensors命令,并将结果输出Web页面上。具体的修改方法如下:

2.1. Nodes.pm

编辑文件”/usr/share/perl5/PVE/API2/Nodes.pm”,添加如下内容:

@@ -268,6 +268,8 @@ __PACKAGE__->register_method({
 $res->{pveversion} = PVE::pvecfg::package() . "/" .
 PVE::pvecfg::version_text();

+ $res->{thermalstate} = `sensors`;
+
 my $dinfo = df('/', 1); # output is bytes

 $res->{rootfs} = {

其中,前面带“+”号的两行为新添加的行,@@后面的数字为起始行号,在本例中起始位置为第268行。不同版本PVE文件的上下文位置可能会有所差异。其所需编辑的内容如下图所示:

pve-tips-2-1

注意:“sensors”前后的符号为反单引号“·”,即键盘数字行的第一个字符。

2.2.pvemanagerlib.js

编辑文件”/usr/share/pve-manager/js/pvemanagerlib.js”,这里需要修改两处地方:

第一处:修改页面的显示范围,以完整显示新添加的CPU温度状态。修改内容如下:

@@ -9366,7 +9366,7 @@ Ext.define('PVE.widget.RRDChart', {
 
 
 width: 770,
- height: 300,
+ height: 320,
 animation: false,
 interactions: [{
 type: 'crosszoom'
@@ -18022,7 +18022,7 @@ Ext.define('PVE.node.StatusView', {
 extend: 'PVE.panel.StatusView',
 alias: 'widget.pveNodeStatus',
 
- height: 300,
+ height: 320,
 bodyPadding: '20 15 20 15',
 
 layout: {

其所需编辑的内容如下面两图所示:

pve-tips-2-21

第二处:修改页面的显示内容,即相关的温度状态。修改内容如下:

@@ -18133,6 +18133,20 @@ Ext.define('PVE.node.StatusView', {
 title: gettext('PVE Manager Version'),
 textField: 'pveversion',
 value: ''
+ },
+ {
+ itemId: 'thermal',
+ colspan: 2,
+ printBar: false,
+ title: gettext('CPU Thermal State'),
+ textField: 'thermalstate',
+ renderer:function(value){
+ const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1];
+ const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1];
+ const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1];
+ const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1];
+ return `Core 0: ${c0} ℃ | Core 1: ${c1} ℃ | Core 2: ${c2} ℃ | Core 3: ${c3} ℃`
+ }
 }
 ],

其所需编辑的内容如下图所示:

pve-tips-2-22

其中,前面带“+”号的行是新添加的内容,带“-”号的行为移除的内容,@@后面的数字为起始行号。不同版本PVE文件的上下文位置可能会有所差异。

注意:“const”开头的常量名称和数量是由前文所说的“sensors”命令的输出结果决定的,对于不同的CPU类型其内容会有所不同,在本文中是依据N3700的四个核心(Core 0、Core 1、Core2和Core3)的名称来设定的。对于其他类型的CPU,可能还需要添加Package的名称和序号(多个Socket)。

3. 重启PVE的Web管理服务

修改完成后,重新启动PVE的Web管理服务使修改生效,其命令如下:

systemctl restart pveproxy

至此,PVE主机就可以显示出系统的CPU温度状态了。如下图所示:

pve-tips-2-3

注意:若浏览器显示内容没有发生变化,应清理缓存后重试。若Web管理页面不能正常显示则可能代码有错误,应修改后重试。

本方法在Proxmox VE 5.1下验证通过。

参考资料:

1)  https://en.wikipedia.org/wiki/Lm_sensors

2) http://www.ezpro.pro/thread-188-1-1.html

发表评论