【逗老师的小技巧】群晖UPS NUT接口开发探索

平时喜欢研究技术的同学们,应该用过或者至少听说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,如果看到 NutServerture 则表示正常。
最后在 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

在这里插入图片描述

稍等一会即可看到监控数据
在这里插入图片描述
当市电中断或者其他故障发生的收,监控系统同样会产生相关的告警。
在这里插入图片描述
故障恢复的时候亦会收到恢复通知
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逗老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值