阅读说明
本文为博灵语音通知终端与Zabbix报警媒介的配置,对接完成后可以实现Zabbix的声光语音告警,播报效果可以参考
Modbus-博灵语音通知终端与PLC联动告警介绍
对接前需配置好通知终端的IP地址,设备参数参见
其他完整的Zabbix语音播报报警联动参见博文,Zabbix与声光报警灯语音告警语音播报
设备参数
旧方案联动无法在Zabbix容器工作下的原因
原始文章的方案中,给Zabbix内置了一个告警程序,当发生告警时执行该脚本,实现与博灵语音通知终端联动的效果。
由于很多场景下使用了容器化安装Zabbix,导致脚本在容器中无法运行。
原因在于Zabbix使用了Alpine Linux发行版,该发行版基于musl库,而告警py脚本打包的可执行文件是依赖于glibc库的,通过ldd
命令可以发现缺少很多符号依赖,所以无法执行,故采用新方案对接。
新方案
使用Zabbix报警媒介中的Webhook,并编写JavaScript
。
- 添加报警媒介,配置如下
脚本内容如下
try {Zabbix.Log(4, 'Webhook script value='+value);params = JSON.parse(value),// 修改Key为报警灯的Keykey = "1qaz2wsx"sign_time = parseInt(new Date().valueOf() / 1000)// 这里为博灵通知终端自定义Api的参数,// 可以参考https://www.eyegroup.cc/a4_help/md_doc/common_api.htmlsign_data = {"led_style":15, "color":"[\"#ff00ff\"]", "led_flag":"[0.03,1]", "play_time":0,"text":params.msg,"tone":"000"};sign_data['token'] = keysign_data['time'] = sign_timekeys = Object.keys(sign_data);keys.sort();sign_temp = '';for (var i in keys){if(keys[i] == 'sign') continue;if(keys[i] == 'time'){sign_temp += 'time' + sign_time;continue;}sign_temp += keys[i] + sign_data[keys[i]];}Zabbix.Log(4, 'raw str=' + sign_temp);Zabbix.Log(4, 'sign str=' + md5(sign_temp));sign_data['sign'] = md5(sign_temp);delete sign_data['token']req = new CurlHttpRequest(),req.AddHeader('Content-Type: application/x-www-form-urlencoded');resp = {};// 构造urlencode字符串,构造www-form-urlencoded bodykeys = Object.keys(sign_data);keys.sort();raw_data = ""for(var i in keys){raw_data += keys[i] + "=" + encodeURIComponent(sign_data[keys[i]]) + "&"}raw_data = raw_data.substring(0, raw_data.length - 1)Zabbix.Log(4, "raw data: " + raw_data)resp = req.Post("http://" + params.url+ "/api/api/send_msg",raw_data);if (req.Status() != 200) {throw 'Response code: '+req.Status();}Zabbix.Log(4, resp)} catch (error) {Zabbix.Log(4, 'Issue creation failed : '+error);}return 'OK';
- 之后选择Message Template选项卡(消息模板),点击添加,添加一个模板填写对应内容,本文填写的内容如下。消息模板是通知使用的模板,本文配置中,我们只播报消息模板中
消息
中内容,也就是刚刚参数中的{ALERT.MESSAGE}
。
其中的{HOST.NAME}
等为宏变量。关于宏变量说明,请参考Zabbix宏变量相关文档。
- 保存后,可以进行测试,url改为通知终端报警灯实际的IP地址
- 测试完成后,点开Open Log可以查看日志
- 此时报警灯将会收到一个测试信息
- 测试通过后,报警媒介配置完成,其他完整的Zabbix语音播报报警联动参见,Zabbix与声光报警灯语音告警语音播报
补充说明
提供的代码中,sign_data的值可以根据需求自行修改,参数详见设备的说明书,可以修改报警灯样式、语音速度、音色等多种功能。
本方案仅使用了常规Api,其中的脚本内置签名计算逻辑,可以参考。