公司机房的环控系统使用台达的InfraSuite Manager。
系统菜单中有snmp和modbus的protocol,但是工程师表示snmp暂时不支持,只能透过modbus获取数据。
上网搜索了一下modbus的相关资料,这个协议是工业监控用的,而且非常古老,常见的有modbus serial和modbus tcp。
前者使用串口通讯,后者使用网络通讯。
还好,台达的InfraSuite Manager支持modbus tcp协议,这样就无需新增硬件连接。
Zabbix从5.2开始,在新版zabbix agent2中新增了一条命令modbus[https://fossies.org/linux/zabbix/src/go/plugins/modbus/README.md],用来连接modbus协议。
有八个参数,分别是endpoint,slaveid,function,address,count,type,endianness和offset。
具体每个参数的详细定义,可以去连接中查看,这里就不废话了。
思路准备好后,开始配置服务。
在InfraSuite Manager上启用modbus tcp服务,并导出Modbus位置表。
导出成功会,会在InfraSuite Manager的根目录生成ModbusMappingInfo.html文件。
用浏览器打开会看到完整的监控项地址。
有了数据地址,就可以开始测试数据的抓取了。
在运行InfraSuite Manager的机器上安装5.2版的zabbix agent2,在./Zabbix Agent2/zabbix_agent2.conf中新增如下配置:
Plugins.Modbus.Sessions.MB1.Endpoint=tcp://127.0.0.1:502
Plugins.Modbus.Sessions.MB1.SlaveID=1
Plugins.Modbus.Sessions.MB1.Timeout=3
其中SlaveID就是DeviceID。
配置好客户端后,在服务端上用zabbix_get命令测试是否可以抓取modbus数据库的数据。
zabbix_get -s 192.168.1.xx -k modbus[]
之前说过,modbus有8个参数要传,分别是endpoint,slaveid,function,address,count,type,endianness和offset。
endpoint:这里是local,tcp:127.0.0.1:502,因为在配置文件中已经配置了,这里就填MB1。
slaveid:因为配置文件已经有了,这里空着。
function:完整的数据库地址中包含这个数值,不用填写,也空着。
address:这是关键,要抓取数据的数据库地址。这里有个坑,InfraSuite Manager的实际地址和导出的表单不一致,实际地址在导出列表地址后面+1。比如我要抓取出风口温度,那这里填写40001。
count:要获取多少数据,默认是1,如果你要获取40001和往后的多个地址的数据,填写你需要的数量,就会得到一个数组。这里我们是单个获取,所以填1。
type:这里根据modbus数据类型进行填写,台达InfraSuite Manager的modbus所有栏位都是浮点数据,这里填float。
endianness:这里也是根据modbus数据类型的编码进行填写,台达InfraSuite Manager的modbus所有栏位都是编码都是Big endian,这里填be。
offset:这个参数用来获取目标地址往前或是往后的数据,如果抓取目标地址的数据,这里不用填。
那么我们这里的抓取数据的格式就是modbus.get[MB1,,,40001,1,float,be,]。
用zabbix get进行验证
测试确认能正常获取数据后,就可以创建模板,来抓取想要的数据了。
评论
发表评论