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.每个页面与服务端创建连接并启动时,这时服务端会产生 ...
随机推荐
- 启动一个线程是调用 run()还是 start()方法?
启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态, 这意味着它可以由 JVM 调度并执行,这并不意味着线程就会立即运行.run()方 法是线程启动后要进行回调(callb ...
- Java 中 notify 和 notifyAll 有什么区别?
notify() 方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有 用武之地.而 notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程 能继续运行.
- 重载(Overload)和重写(Override)的区别。重载的 方法能否根据返回类型进行区分?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性.重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同.参数个数不同或者二者都不同)则视 ...
- spring 支持哪些 ORM 框架 ?
Hibernate iBatis JPA JDO OJB
- Eureka server
Eureka server使用的不是spring mvc的框架,而是使用Jersey. Eureka server ,启动的流程,追本溯源,是在 DiscoveryClient里面,使用这个构造方法 ...
- synchronize、Lock、ReenTrantLock 的区别
synchronize 和Lock: 1.synchronize 系java 内置关键字:而Lock 是一个类 2.synchronize 可以作用于变量.方法.代码块:而Lock 是显式地指定开始和 ...
- CommonCollection1反序列化学系
CommonsCollection1 1.前置知识 1.1.反射基础知识 1.1.1. 对象与类的基础知识 类(class),对象(object) 对象是类的实例化,中华田园犬(object)是狗(c ...
- 攻防世界 Ditf misc
Ditf 附件下载下来就是一张图片,我们拉到hxd中发现应该有隐藏的压缩包 我们拉入到kali里面分析 意外发现图片高度被修改过我们先用binwalk分析图片看看 我们先尝试分离一下分离出一个压缩包但 ...
- 基于mongodb的搜索分页
mongodb模糊查询并分页 1.建立数据库 代码如下: var mongoose = require('mongoose'); var shortid = require('shortid'); v ...
- 前端webpack workflow(二)——Webpack基本使用
作者:Jogis原文链接:https://github.com/yesvods/Blog/issues/3转载请注明原文链接以及作者信息 前一篇文章介绍了webpack以及安装方法,这次将会介绍web ...