【语音告警】Zabbix语音播报-报警媒介部分配置-语音报警灯|声光报警器|网络信号灯

阅读说明

本文为博灵语音通知终端与Zabbix报警媒介的配置,对接完成后可以实现Zabbix的声光语音告警,播报效果可以参考
Modbus-博灵语音通知终端与PLC联动告警介绍

对接前需配置好通知终端的IP地址,设备参数参见

其他完整的Zabbix语音播报报警联动参见博文,Zabbix与声光报警灯语音告警语音播报

设备参数

博灵语音通知终端产品参数

旧方案联动无法在Zabbix容器工作下的原因

原始文章的方案中,给Zabbix内置了一个告警程序,当发生告警时执行该脚本,实现与博灵语音通知终端联动的效果。
由于很多场景下使用了容器化安装Zabbix,导致脚本在容器中无法运行。
原因在于Zabbix使用了Alpine Linux发行版,该发行版基于musl库,而告警py脚本打包的可执行文件是依赖于glibc库的,通过ldd命令可以发现缺少很多符号依赖,所以无法执行,故采用新方案对接。

新方案

使用Zabbix报警媒介中的Webhook,并编写JavaScript

  1. 添加报警媒介,配置如下
    Zabbix报警媒介

(重要)Zabbix版本变化的说明

HttpRequest 是自 Zabbix 5.4 以来此对象的新名称。 以前它曾经被称为 CurlHttpRequest。 Zabbix 5.4 中的方法名称也已更改。 旧的对象/方法名称现在已弃用,并且在 Zabbix 6.0 之后将停止对它们的支持。
JavaScript脚本的说明链接
在这里插入图片描述

Zabbix版本>=5.4的脚本如下:

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 HttpRequest(),
    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.getStatus() != 200) {
    throw 'Response code: '+req.getStatus();
  }
  Zabbix.Log(4, resp)

} catch (error) {
  Zabbix.Log(4, 'Issue creation failed : '+error);

}

return 'OK';

Zabbix版本<=5.4的脚本内容如下

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';
  1. 之后选择Message Template选项卡(消息模板),点击添加,添加一个模板填写对应内容,本文填写的内容如下。消息模板是通知使用的模板,本文配置中,我们只播报消息模板中消息中内容,也就是刚刚参数中的{ALERT.MESSAGE}
    其中的{HOST.NAME}等为宏变量。关于宏变量说明,请参考Zabbix宏变量相关文档
    在这里插入图片描述
  2. 保存后,可以进行测试,url改为通知终端报警灯实际的IP地址
    博灵语音通知终端Zabbix对接
  3. 测试完成后,点开Open Log可以查看日志
    在这里插入图片描述
  4. 此时报警灯将会收到一个测试信息
    博灵语音通知终端播报日志
  5. 测试通过后,报警媒介配置完成,其他完整的Zabbix语音播报报警联动参见,Zabbix与声光报警灯语音告警语音播报

补充说明

  1. 提供的代码中,sign_data的值可以根据需求自行修改,参数详见设备的说明书,可以修改报警灯样式、语音速度、音色等多种功能。
    本方案仅使用了常规Api,其中的脚本内置签名计算逻辑,可以参考。

  2. 部分监控项轮询间隔太长,为了达到快速测试的效果,可以手动立刻检查某个监控项。具体操作方式为:进入监控项的配置页面,在最下方的操作按钮中,有一个Execute now按钮,点击即可立刻触发一次检查。见下图。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值