ZABBIX新功能系列1-使用Webhook将告警主动推送至第三方系统
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"将可以手动测试脚本的执行,这个后面我会单独作为系列的一个题目介绍。
如果您喜欢这个系列,请扫描关注:
ZABBIX新功能系列1-使用Webhook将告警主动推送至第三方系统的更多相关文章
- 使用【百度云推送】第三方SDK实现推送功能具体解释
之前介绍过怎样使用shareSDK实现新浪微博分享功能,今天介绍怎样使用百度云推送SDK实现Android手机后台推送功能. 执行效果例如以下 第一步,假设使用百度的SDK,当然要先成为百度的开发人员 ...
- 一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式
前言 本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台. 本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念 ...
- zabbix 布署实践【5 使用邮箱SMTP SSL推送告警邮件】
由于传统的邮件推送脚本使用smtp 25端口,在各大邮箱提供商已不适用,已经向SSL过渡,这里以QQ邮箱为例,使用SSL 465端口 登录zabbix-server 进入 cd /usr/lib/za ...
- 微信公众号开发C#系列-7、消息管理-接收事件推送
1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...
- Dubbo学习系列之十一(Dashboard+Nacos规则推送)
中国武术,门派林立,都是号称多少代的XXX传人,结果在面对现代武术时,经常被KO秒杀,为啥,光靠宣传和口号撑门面,终究是靠不住,必须得有真货 ,得经得住考验,所以不能只说Sentinel有多好,也得给 ...
- ASP.NET SignalR 系列(五)之群组推送
在上一章介绍了 一对一推送的方式,这章重点介绍下群组推送和多人推送 群组主要就是用到了方法:Groups.Add(Context.ConnectionId, groupName); 将不同的连接id加 ...
- Asp.Net百度站长工具的主动推送功能
public static string PostUrl(string[] urls) { try { string formUrl = "http://data.zz.baidu.com/ ...
- ASP.NET SignalR 系列(八)之跨域推送
前面几章讲的都是同域下的推送和订阅.这种讲讲如何跨域 对于SignalR来说,默认是不允许跨域的,因为安全问题.虽如此,但同时提供了跨域方案. 两种跨域方式: 1:JSONP2:CORS JSONP的 ...
- ASP.NET SignalR 系列(四)之指定对象推送
在上一章讲到了广播推送,即所有订阅的用户都能收到,这种适合于信息广播. 接下来介绍如何给指定的对象推送 在讲这个之前先说明一下连接创建的基础知识 1.每个页面与服务端创建连接并启动时,这时服务端会产生 ...
随机推荐
- yarn上运行flink环境搭建
主要完成hadoop集群搭建和yarn上运行flink 1.搭建hadoop伪集群 主要是搭建hadoop MapReduce(yarn)和HDFS 1.1 下载&配置环境变量 这里下载的ha ...
- 怎么获取 Java 程序使用的内存?堆使用的百分比?
可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及 最大堆内存.通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间. Runtime.freeMemor ...
- vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作
官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...
- 你是如何调用 wait()方法的?使用 if 块还是循环?为什么?
wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条 件可能还没有满足,所以在处理前,循环检测条件是否满足会更好.下面是一段 标准的使用 wait 和 notify 方法 ...
- python学习笔记(九)——线程与进程
一.线程 Python 中为我们提供了两个模块来创建线程. _thread threading thread 模块已被废弃.用户可以使用 threading 模块代替.所以,在 Python 中不能再 ...
- 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
-webkit-box 的用法 通常,在移动端要实现水平方向平分宽度的布局,会使用 -webkit-box 来布局.它的使用方法是: <div class='parent'> <di ...
- React+dva+webpack+antd-mobile 实战分享(一)
再看本篇文章之前,本人还是建议想入坑react的童鞋可以选有create-react-app来创建react的项目,因为现在dva和roadhog还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备 ...
- WordPress 网站开发“微信小程序“实战(三)
本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...
- H5复制粘贴双端适配的解决方案(终极版)
前言 最终适配所有机型的方案基于clipboardjs官网https://clipboardjs.com/ 这个库由几个不同的CDN提供商托管.选择你最喜欢的:) jsDelivr <scrip ...
- 微信小程序时间戳转为日期格式
通常后台传递过来的都是时间戳,但是前台展示不能展示时间戳.就需要转化了. 功能说明: 微信小程序里,时间戳转化为日期格式,支持自定义. 拷贝至项目utils/utils.js中,并注意在js中声明下: ...