1 Webhook 脚本示例

概述

尽管 Zabbix 提供了大量开箱即用的 webhook 集成,但您可能希望create自定义 webhook。本节提供了自定义 webhook 脚本的示例(在Script参数中使用)。有关其他 webhook 参数的说明,请参阅 webhook部分。

Jira webhook(自定义)

此脚本将create一个JIRA问题并返回有关创建的问题的一些信息。

try {
           Zabbix.log(4, '[ Jira webhook ] 已启动,参数为: ' + value);
       
           var result = {
                   'tags': {
                       '端点': 'jira'
                   }
               },
               params = JSON.parse(value),
               req = new HttpRequest(),
               fields = {},
               resp;
       
           if (params.HTTPProxy) {
               req.setProxy(params.HTTPProxy);
           }
       
           req.addHeader('Content-Type: application/json');
           req.addHeader('Authorization: Basic ' + params.authentication);
       
           fields.summary = params.summary;
           fields.description = params.description;
           fields.project = {key: params.project_key};
           fields.issuetype = {id: params.issue_id};
       
           resp = req.post('https://jira.example.com/rest/api/2/问题/',
               JSON.stringify({"fields": fields})
           );
       
           if (req.getStatus() != 201) {
               throw '响应代码: ' + req.getStatus();
           }
       
           resp = JSON.parse(resp);
           result.tags.issue_id = resp.id;
           result.tags.issue_key = resp.key;
       
           return JSON.stringify(result);
       }
       catch (error) {
           Zabbix.log(4, '[ Jira webhook ] 问题创建失败,JSON : ' + JSON.stringify({"fields": fields}));
           Zabbix.log(3, '[ Jira webhook ] 问题创建失败 : ' + error);
       
           throw '发生错误: ' + error;
       }

Slack webhook(自定义)

此 webhook 将把来自 Zabbix 的通知转发到一个 Slack 频道。

try {
           var params = JSON.parse(value),
               req = new HttpRequest(),
               response;
       
           if (params.HTTPProxy) {
               req.setProxy(params.HTTPProxy);
           }
       
           req.addHeader('Content-Type: application/x-www-form-urlencoded');
       
           Zabbix.log(4, '[ Slack webhook ] Webhook 请求,value=' + value);
       
           response = req.post(params.hook_url, 'payload=' + encodeURIComponent(value));
           Zabbix.log(4, '[ Slack webhook ] 返回代码: ' + req.getStatus() + '。响应: ' + response);
       
           try {
               response = JSON.parse(response);
           }
           catch (error) {
               if (req.getStatus() < 200 || req.getStatus() >= 300) {
                   throw '请求失败,状态代码为 ' + req.getStatus();
               }
               else {
                   throw '请求成功,但响应解析失败。';
               }
           }
       
           if (req.getStatus() !== 200 || !response.ok || response.ok === 'false') {
               throw response.error;
           }
       
           return 'OK';
       }
       catch (error) {
           Zabbix.log(3, '[ Slack webhook ] 发送失败。错误: ' + error);
       
           throw '发生错误,错误信息为: ' + error;
       }