ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ZABBIX新功能系列1-使用Webhook将告警主动推送至第三方系统

2022-05-06 23:00:09  阅读:297  来源: 互联网

标签:脚本 Webhook webhook JSON ZABBIX params fields 推送


       Zabbix5以来的新版本与以前的版本除UI界面变化较大外,在很多功能上也有许多亮点,我这里计划安排1个系列来和大家交流一些新功能的使用,这是第一篇:使用Webhook将告警主动推送至第三方系统。

       首先说一下什么是Webhook?它是一个api概念,微服务api的使用范式之一,简单来说Webhook就是一个接收HTTP POST(或GET,PUT,DELETE)的URL。一个实现了Webhook的API就是在当事件发生的时候会向这个配置好的URL发送一条信息,与请求-响应式不同,使用Webhook,可以实时接收到消息。以往Zabbix的告警主动推送主要有2种方法,一种是使用邮件或短信等方式,另一种是使用自定义Shell脚本的方式来实现,现在Zabbix与主流技术接轨,使用Webhook就可以推送到第三方系统,且已提供了与许多系统的示例,如Jira,Redmine,OTRS等。

         下面我们就来讲讲如定义一个Webhook来推送告警。

1.点击“管理”-“报警媒介类型"-"创建媒介类型"

图片

2.在”报警媒介类型“页面选择”类型“为“Webhook”,然后输入相关参数,如果新建,建议可以从一个已有的如"Jira"。

图片

 

属性使用说明
参数  webhook 变量是属性与值的字典。

对于预配置的 webhook,参数列表会有所不同,具体取决于Webhook服务接口的定义。

对于新的 webhook,默认包含几个常用变量(URL:<empty>、HTTPProxy:<empty>、To:{ALERT.SENDTO}、Subject:{ALERT.SUBJECT}、Message:{ALERT.MESSAGE }),你可以保留或删除它们。参数支持问题通知中支持的

所有宏。如果使用 HTTP 代理,代理字符串需要前缀[scheme]://指定使用哪种代理(例如 https、socks4、socks5;)

脚本

这里输入 JavaScript 代码,代码执行 webhook 操作。

该脚本是一个接受属性-值(即上面编辑的参数)的函数代码。使用 JSON.parse() 方法将值转换为 JSON 对象,例如:var params = JSON.parse(value);.

该代码可以访问所有参数,它可以执行 HTTP GET、POST、PUT 和 DELETE 请求,并且可以控制 HTTP 的header与body。

脚本必须包含返回值,否则将无效。它可能会返回执行成功状态以及TAG和VALUE的可选列表或错误信息。

请注意,该脚本仅在创建警报后执行。如果脚本配置为返回TAG,这些TAG不会在最近的告警消息和恢复消息中的 {EVENT.TAGS} 和 {EVENT.RECOVERY.TAGS} 宏中得到解析。

超时

JavaScript 执行超时(1-60 秒,默认 30 秒)。

Process tags

选择它会将返回的 JSON 作为TAG处理。这些TAG将被添加到 Zabbix 中已经存在的(如果有的话)问题事件标签中。

如果选择了它,则 webhook 应始终返回一个 JSON 对象,其中至少包含一个空的TAG对象:var result = {tags: {}};。

示例:‘Jira ID’: ‘PROD-1234’等

Include event menu entry

选择它将“动作”菜单中包含一个链接到创建的外部系统的菜单项目。

如果选择它,则不应该使用 webhook 向不同用户发送通知,因为这样将可能生成多个与单个问题事件相关的多个警报操作

Menu entry name 指定菜单名称。可以使用{EVENT.TAGS.<tag name>} 宏.
如果选择了 Include event menu entry 该项必填.
Menu entry URL 指定菜单的入口URL。Specify the underlying URL of the menu entry.可以使用{EVENT.TAGS.<tag name>} 宏.
如果选择了 Include event menu entry 该项必填.

3.输入脚本,示例代码:

try {    Zabbix.log(4, '[ Jira webhook ] Started with params: ' + value);    var result = {            'tags': {                'endpoint': '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://tsupport.zabbix.lan/rest/api/2/issue/',        JSON.stringify({"fields": fields})    );    if (req.getStatus() != 201) {        throw 'Response code: ' + 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 ] Issue creation failed json : ' + JSON.stringify({"fields": fields}));    Zabbix.log(3, '[ Jira webhook ] issue creation failed : ' + error);    throw 'Failed with error: ' + error;}

4.配置专用用户并配报警媒介     

    Webhook的最佳实践是配置对应的专用用户并联系对应的报警媒介。

图片

 

图片

 

5.配置触发器动作来执行Webhook

图片

创建一个新的动作

图片

 

图片

如果上面一切配置正常,当发生对应的告警将会执行对应的WEBHOOK操作,而且在5.4的版本可以定义Webhook脚本,复制上面定义的脚本到“管理”-“脚本”中创建一个新的脚本,并配置脚本作用于“Manual event action"将可以手动测试脚本的执行,这个后面我会单独作为系列的一个题目介绍。

图片

如果您喜欢这个系列,请扫描关注:

 

标签:脚本,Webhook,webhook,JSON,ZABBIX,params,fields,推送
来源: https://www.cnblogs.com/linwinfan/p/16240423.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有