阅读说明
本文为博灵语音通知终端与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为报警灯的Key
key = "1qaz2wsx"
sign_time = parseInt(new Date().valueOf() / 1000)
// 这里为博灵通知终端自定义Api的参数,
// 可以参考https://www.eyegroup.cc/a4_help/md_doc/common_api.html
sign_data = {
"led_style":15, "color":"[\"#ff00ff\"]",
"led_flag":"[0.03,1]", "play_time":0,
"text":params.msg,
"tone":"000"
};
sign_data['token'] = key
sign_data['time'] = sign_time
keys = 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 body
keys = 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,其中的脚本内置签名计算逻辑,可以参考。