Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

时间:2021-12-20 03:30:23

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

前面有提到通过python的方式告警,但由于每个人的环境都不一样,容易出现格式缩进等一些问题,而实际上钉钉机器人也是通过webhook的方式来实现的,Zabbix 5.2版本原生支持webhook的方式去推送事件。

首先贴下代码,下面的title部分记得修改为自己的

  1. var dingding = { 
  2.   keynull
  3.   message: null
  4.   msgtype: "markdown"
  5.   proxy: null
  6. sendMessage: function () { 
  7.     var params = { 
  8.        msgtype: dingding.msgtype, 
  9.        markdown: { 
  10.           title: "IT小白Kasar",(注意这里可以修改) 
  11.           text: dingding.message 
  12.         }, 
  13.       }, 
  14.       data, 
  15.       response, 
  16.       request = new CurlHttpRequest(), 
  17.       url = 
  18.         "https://oapi.dingtalk.com/robot/send?access_token=" + 
  19.         dingding.key
  20.     if (dingding.proxy) { 
  21.       request.setProxy(dingding.proxy); 
  22.     } 
  23.     request.AddHeader("Content-Type: application/json"); 
  24.     data = JSON.stringify(params); 
  25.     // Remove replace() function if you want to see the exposed key in the log file. 
  26.     Zabbix.Log( 
  27.       4, 
  28.       "[dingding Webhook] URL: " + url.replace(dingding.key"<BOT KEY>"
  29.     ); 
  30.     Zabbix.Log(4, "[dingding Webhook] params: " + data); 
  31.     response = request.Post(url, data); 
  32.     Zabbix.Log(4, "[dingding Webhook] HTTP code: " + request.Status()); 
  33.     try { 
  34.       response = JSON.parse(response); 
  35.     } catch (error) { 
  36.       response = null
  37.     } 
  38.     if (request.Status() !== 200 || response.errcode !== 0) { 
  39.       if (typeof response.errmsg === "string") { 
  40.         throw response.errmsg; 
  41.       } else { 
  42.         throw "Unknown error. Check debug log for more information."
  43.       } 
  44.     } 
  45.   }, 
  46. }; 
  47. try { 
  48.   var params = JSON.parse(value); 
  49.   if (typeof params.Key === "undefined") { 
  50.     throw 'Incorrect value is given for parameter "Key": parameter is missing'
  51.   } 
  52.   dingding.key = params.Key
  53.   if (params.HTTPProxy) { 
  54.     dingding.proxy = params.HTTPProxy; 
  55.   } 
  56.   dingding.to = params.To
  57.   dingding.message = params.Subject + "\n" + params.Message; 
  58.   dingding.sendMessage(); 
  59.   return "OK"
  60. } catch (error) { 
  61.   Zabbix.Log(4, "[dingding Webhook] notification failed: " + error); 
  62.   throw "Sending failed: " + error + "."

这个脚本贴在下图的这个位置,在报警媒介类型下

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

需要将key部分修改为自己的机器人的token,主要是下图里的"access_token="的一串字符串。

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

添加完成后,我们就可以测试下

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

然后添加下默认告警媒介

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

最终效果

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

未美化效果

Zabbix 5.2 由浅入深之钉钉机器人告警(webhook方式)

写在最后

 

这种方式就摆脱了格式问题,可以实现开箱即用,而且无需装额外的环境即可实现,快去试试吧。最后感谢官方的模板,有借鉴部分。

原文链接:https://www.toutiao.com/i6965679632477848101/