平时喜欢研究技术的同学们,应该用过或者至少听说Synology群晖的NAS产品。今天逗老师就讲一个NAS和UPS的故事。
Synology群晖的NAS产品里,有一个UPS管理功能。对于市面上大部分带有USB管理接口的UPS来说,基本都能适配群晖的NAS。
当UPS和NAS连接后,NAS可以在UPS电池即将耗尽之前主动进入安全模式,减少数据丢失的风险。
同时直连UPS的NAS还可以作为UPS服务器,让其他群晖NAS设备通过本机读取UPS设备信息,同时控制开关机。
现在,有趣的事情来了。群晖的这个UPS服务器功能,除了连接其他的群晖NAS,可不可以对接一下其他第三方的网关监控平台,或者是对接一下ESXi虚拟化平台?
例如,我们就成功的将群晖的UPS服务器的接口数据,连接到了PRTG或者Zabbix监控服务器。
目录
一、家用UPS监控接口与工业UPS的区别
工业UPS大部分使用SNMP、串口modbus等方案进行监控和管理。普遍有标准的API或者遵循标准的MODBUS规范。
但是家用产品怎么监控呢,家用产品会跟你谈API么?会跟你谈总线规范么?闹呢!
家用产品目前可能使用到两种方式进行管理:
- 1、Windows ACPI电源管理方案,这种UPS插上电脑直接识别成一坨电池,台式机秒变笔记本。
- 2、使用NUT规范进行管理。通过嵌入式设备,将UPS的私有通信协议转换成符合NUT规范的接口。
二、Network UPS Tools(NUT)
经过很多网友们的探索,群晖的UPS服务器实际使用的是NUT接口规范。
NUT是许多网友和一些公司的共同写出来的,目前这个项目的官网地址是:
https://networkupstools.org/
NUT服务器通过串口、USB、SNMP等任何可能的办法连接到UPS上之后,通过NUT服务端将UPS的运行数据提供给其他网络上的服务器,实现共享。
三、ESXi使用NUT获取电源详情
对于极客范的同学们,家里一般都会有一个NAS和一个ESXi服务器。现在ESXi服务器对接群晖NAS获取UPS运行数据办法很成熟。
# 下载到本机,然后远程传输到ESXi的服务器上,有些ESXi服务器由于安全原因不允许访问远程服务器
# 这个软件包是法国人提供的,原始下载地址是 http://rene.margar.fr/download/1368/
$ wget https://www.mobibrw.com/wp-content/uploads/2019/05/NutClient-ESXi-2.0.0.tar.gz
$ scp NutClient-ESXi-2.0.0.tar.gz root@10.10.10.2:~/tmp/
# 登录带ESXi服务器
$ ssh 10.10.10.2 -l root
$ cd /tmp
$ tar xvf NutClient-ESXi-2.0.0.tar.gz
# 设置软件安装策略,否则会被阻止安装
$ esxcli software acceptance set --level CommunitySupported
$ ./upsmon-install.sh
安装成功显示如下:
[root@localhost:/tmp] ./upsmon-install.sh
Installation Result
Message: Operation finished successfully.
Reboot Required: false
VIBs Installed: Margar_bootbank_upsmon_2.7.4-2.0.0
VIBs Removed:
VIBs Skipped:
接着登录 ESXi,打开管理,高级设置,找到 NUT 相关的设置选项:
安装完之后可能直接看不到,如果找不到的话,需要重启一下ESXi服务器。
UserVars.NutUpsName:ups@10.10.10.111(这里的地址填群晖NAS的地址)
UserVars.NutUser:monuser
UserVars.NutPassword:secret
UserVars.NutFinalDelay:5(LOW POWER低电量状态后延迟几秒关机,不是停电后的延迟)
配置完后在vSphere Client的配置-安全配置文件-服务-NutClient设置与主机一起启动和停止。
NutClient是守护进程,要先配置UserVars中的NUT参数再运行NutClient服务。
并且每次修改UserVars参数后都要重启NutClient服务才有用
ssh 中执行 /opt/nut/bin/upsc ups@10.10.10.111
,如果能看到输出信息,则表示连接 ups 成功:
最后,验证防火墙设置,执行 esxcli network firewall ruleset list
,如果看到 NutServer
为 ture
则表示正常。
最后在 ESXi 的服务里面设置 Network UPS Tools client 服务随系统启动即可!
四、Telnet直接获取NUT电源详情
下面,我们搞一点更有意思的事情。
群晖使用TCP的3493端口作为UPS服务器端口,NUT接口很有意思的是,我们telnet上去之后就可以访问和获取相关的信息。
简单看了一下NUT的文档,最简单的可以使用LIST命令获取到一些我们感兴趣的信息。
例如:
LIST UPS
可以获取这台服务器上连接的UPS,LIST VAR xxx
可以获取某台UPS主机的参数。LOGOUT
命令退出登录。
接口文档详情如下:
NUT Network protocol information GET
NUT Network protocol information LIST
telnet 10.10.10.111 3493
Trying 10.10.10.111...
Connected to 10.10.10.111.
Escape character is '^]'.
LIST UPS
BEGIN LIST UPS
UPS ups "Description unavailable"
END LIST UPS
LIST VAR ups
BEGIN LIST VAR ups
VAR ups battery.charge "100"
VAR ups battery.charge.low "20"
VAR ups battery.runtime "1440"
VAR ups battery.type "PbAc"
VAR ups device.mfr "EATON"
VAR ups device.model "SANTAK TG-BOX 850 "
VAR ups device.serial "Blank"
VAR ups device.type "ups"
VAR ups driver.name "usbhid-ups"
VAR ups driver.parameter.pollfreq "30"
VAR ups driver.parameter.pollinterval "5"
VAR ups driver.parameter.port "auto"
VAR ups driver.version "DSM6-2-25364-191230"
VAR ups driver.version.data "MGE HID 1.33"
VAR ups driver.version.internal "0.38"
VAR ups input.transfer.high "264"
VAR ups input.transfer.low "184"
VAR ups outlet.1.desc "PowerShare Outlet 1"
VAR ups outlet.1.id "1"
VAR ups outlet.1.status "on"
VAR ups outlet.1.switchable "no"
VAR ups outlet.desc "Main Outlet"
VAR ups outlet.id "0"
VAR ups outlet.switchable "yes"
VAR ups output.frequency.nominal "50"
VAR ups output.voltage "230.0"
VAR ups output.voltage.nominal "220"
VAR ups ups.beeper.status "enabled"
VAR ups ups.delay.shutdown "20"
VAR ups ups.delay.start "30"
VAR ups ups.firmware "02.08.0010"
VAR ups ups.load "20"
VAR ups ups.mfr "EATON"
VAR ups ups.model "SANTAK TG-BOX 850 "
VAR ups ups.power.nominal "850"
VAR ups ups.productid "ffff"
VAR ups ups.serial "Blank"
VAR ups ups.status "OL CHRG"
VAR ups ups.timer.shutdown "0"
VAR ups ups.timer.start "0"
VAR ups ups.type "offline / line interactive"
VAR ups ups.vendorid "0463"
END LIST VAR ups
LOGOUT
OK Goodbye
Connection closed by foreign host.
这,我写个Python脚本随便就能格式化这些数据,然后呈现给第三方监控系统啊。
四、第三方监控系统获取NUT电源详情
如果一些小型office的机房用到了这种小型UPS,又需要获取监控数据,而且office里恰好有一台群晖的话。
那么就可以用到下面这个方法
Public_Share_Project/PRTG 自定义传感器Customer Senser/UPS NUT/NUT_UPS.py
添加方式:
脚本拷贝到PRTG探针的如下目录,传递参数{‘nut’:‘10.10.10.111’},这里的IP地址写群晖NAS的IP地址。
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\python
稍等一会即可看到监控数据
当市电中断或者其他故障发生的收,监控系统同样会产生相关的告警。
故障恢复的时候亦会收到恢复通知