Zabbix通过与微信、钉钉整合实现实时告警
abbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信、钉钉作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
一、Zabbix整合微信实现实时告警
1.1、微信企业号申请
要实现将告警信息发送到微信,需要申请一个企业微信号,当然个人也可以申请,登录http://work.weixin.qq.com/, 然后选择注册即可,如下图所示:
这是注册企业微信的步骤,企业名称可以填写企业、政府或组织,个人就选组织,接着需要选择管理员姓名和电话号码,通过短信验证后,还需要管理员通过微信扫描绑定企业号,以后就可以通过管理员的微信登录企业号管理后台。
添加完成,点击“注册”,然后选择“进入管理后台”,即可进入企业微信后台,如下图所示:
进入后台,接着选择导航栏中的“通讯录”,在企业微信中添加人员,如下图所示:
可通过手动添加成员,或者微信邀请的方式添加成员。成员添加后,可以查看成员详情,如下图所示:
这里需要注意,每个成员的账号需要记录下来,后面在zabbix配置中会用到。并且每个成员只有关注微工作台后,才能在微信中收取企业微信的告警信息。
那么如何关注微工作台呢,选择导航中“连接微信”选项,如下图所示:
选择左侧导航中的微工作台,右边就会出现微工作台的介绍,这里重点了解一下微工作台的用途,通过微工作台,企业微信成员无需下载企业微信客户端,直接用微信扫码关注微工作台,即可在微信中接收企业通知和使用企业应用。
如何关注微工作台呢,如下图所示:
在上图邀请关注中,有个二维码,让每个成员扫描这个二维码即可关注微工作台,此外还可以对微工作台进行各种设置。
接着,选择导航栏中的“应用与小程序”,开始创建一个应用,如下图所示:
这里选择自建应用,然后开始创建一个应用,如下图所示:

这里添加应用logo、应用名称和介绍,还有这个应用的可见范围,选择对应的人员即可。应用创建成功之后,会显示应用信息,如下图所示:

这里重点记录下此应用的AgentId和Secret,后面会在zabbix配置中用到。
最后,点击导航中“我的企业”,记录下企业ID这个信息,如下图所示:
最下面的企业ID后面这个字符串我们也需要记录下来,后面zabbix配置中会用到。
到此为止,关于企业微信的注册和要配置的内容已经介绍完毕了。
1.2、获取微信告警脚本
要将告警信息发送给微信,就需要一个发送脚本,可从如下地址下载这个脚本:
[root@zabbixserver ~]#wget https://www.ixdba.net/zabbix/weixin_linux_amd64
然后将此脚本放在zabbix server的alertscripts目录下,我们这里是/usr/local/zabbix/share/zabbix/alertscripts,接着做一些可执行权限修改:
[root@zabbixserver alertscripts]# mv weixin_linux_amd64 weixin
[root@zabbixserver alertscripts]# chmod 755 weixin
最后,修改zabbix server配置文件zabbix_server.conf,添加如下内容:
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
这样设置后,zabbix web端就可以自动获取到脚本。
接下来,先测试一下这个脚本是否可用,可执行如下命令测试:
[root@zabbixserver alertscripts]# ./weixin --corpid=ww962865bb7f121382 --corpsecret=FFRXeC9TAFIaYzi50cQQg6RP8CFVsIEB3Ef1rcWW1f0 --msg="您好,这是微信告警测试" --user=zhouxingxing --agentid=1000003
{"errcode":0,"errmsg":"ok","invaliduser":""}
其中:
corpid= 企业号里面的企业ID。
corpsecret:这里就是我们自建应用里面的Secret的id。
agentid:我们自建应用里面的AgentId。
msg:要发送的消息内容。
user:邀请用户的账号,注意是在微信企业号里面成员详情页的账号。
如果执行完毕没有报错,那么我们的微信就应该收到了这条命令的告警信息了。
1.3、zabbix web上配置微信告警
打开zabbix web,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:

这里有几个需要注意的,就是corpid、corpsecret和agentid,这三个参数的值都是从微信企业号后台获取的,上面已经做过特别指出了。
另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为winxin,那么这里就填入weixin即可。
接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“微信告警”,如下图所示:
这里需要注意这个“收件人”的设置,这个收件人就是在微信企业号后台中,通讯录下面的成员详情页面看到的账号,一定不要写错了。
最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:

这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:

在这个界面下,“默认操作步骤持续时间”就选择默认的1小时即可,默认标题和消息内容模板可配置如下:
默认标题:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
最后的那个“操作”,按照如下配置即可:

这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:

在这个界面下,默认标题和消息内容模板可配置如下:
默认标题:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
最后的那个“操作”,按照如下配置即可:

至此,微信告警整合zabbix,配置完成。
1.4、测试微信告警功能
可以模拟一个监控项故障,然后测试告警信息是否能通过zabbix发送给微信,这里我们模拟一个mysql故障的恢复,检查告警信息是否能通过zabbix发送给微信,可点击zabbix web下的“报表”,然后选择“动作日志”,查看告警信息发送日志,如下图所示:
这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的微信就能收到告警信息了,如下图所示:

这样,微信整合zabbix告警功能,成功实现。
二、Zabbix整合钉钉实现实时告警
2.1、关于钉钉机器人告警
钉钉类似于微信,但是偏向于办公方向,可以通过钉钉的群机器人功能,实现将告警信息通过机器人发送到钉钉群。
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警提醒通过自定义机器人聚合到钉钉群。
zabbix整合钉钉告警,相比微信,要简单很多,几分钟内即可完成配置,下面详细介绍如下。
2.2、添加钉钉机器人
关于钉钉的注册很简单,这里不再过多介绍。注册完成登录到钉钉后,先发起一个群聊,加入需要接收钉钉告警信息的人员,如下图所示:

然后,创建一个群聊,开始选择需要添加的人员,如下图所示:

群聊创建完成后,接着就可以添加机器人到群里面了。点击用户下拉菜单,如下图所示:
在这里选择“机器人管理”,然后进入下图所示界面:

这里选择自定义机器人,通过webhook接入自定义服务,接着,开始添加一个机器人,如下图所示:

输入机器人名字,并指定一个已经存在的钉钉群,点击完成,机器人添加完毕,接着进入下图界面:

这里是设置webhook,将这个webhook地址复制记录下来,后面会用到。机器人配置到此结束。
2.3、获取钉钉告警脚本
这里我们定义了一个python脚本,命名为dingding.py,内容如下:
# vim /usr/local/zabbix/alertscripts/dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=nwknfenfnfuflbufnoenwbjwek" #这个是webhook地址,修改为你的即可。
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
这里通过python定义了一个告警脚本,此脚本可从如下地址下载:
[root@iivey ~]#https://www.ixdba.net/zabbix/dingding.zip
这个脚本中用到了requests,requests是python的一个HTTP客户端库,跟urllib,urllib2类似,如果你的服务器没有安装requests,需要通过如下方法安装一下:
[root@zabbixserver ~]#yum install python-pip
[root@zabbixserver ~]#pip install requests
最后,将此脚本放到zabbix server的alertscripts目录下,我们这里是/usr/local/zabbix/share/zabbix/alertscripts,接着做一些可执行权限修改:
[root@zabbixserver alertscripts]# chmod 755 dingding.py
最后,修改zabbix server配置文件zabbix_server.conf,添加如下内容:
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
这样设置后,zabbix web端就可以自动获取到脚本。
2.4、zabbix web上配置钉钉告警
打开zabbix web,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:
这里有几个需要注意的,就是alert.message,这个是仅仅获取告警内容,另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为dingding.py,那么这里就填入dingding.py即可。
接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“钉钉告警”,如下图所示:

这里需要注意这个“收件人”的设置,这个收件人输入“all”即可,这样,钉钉群下面的成员都能收到告警信息了。
最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:

这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:

在这个界面下,“默认操作步骤持续时间”就选择默认的1小时即可,默认标题和消息内容模板可配置如下:
默认标题:
故障{TRIGGER.STATUS},服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
最后的“操作”细节就按照上图的选择即可。这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:
在这个界面下,默认标题和消息内容模板可配置如下:
默认标题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
最后的那个“操作”细节,按照上图的选择即可。
至此,钉钉告警整合zabbix配置完成。
2.5、测试钉钉告警功能
可以模拟一个监控项故障,然后测试告警信息是否能通过zabbix发送给钉钉群,这里我们模拟一个mysql故障的恢复,检查告警信息是否能通过zabbix发送给钉钉群,可点击zabbix web下的“报表”,然后选择“动作日志”,查看告警信息发送日志,如下图所示:

这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的钉钉就能收到告警信息了,如下图所示:

这样,钉钉整合zabbix告警功能,成功实现。
Zabbix通过与微信、钉钉整合实现实时告警的更多相关文章
- zabbix的搭建及操作(4)实现邮件,钉钉,微信报警
实现邮件报警 网页版邮箱中开启 POP3/SMTP/IMAP 生成授权码并记录 Server端安装配置邮件服务器 1.Yum安装邮件服务器 yum -y install mailx dos2unix ...
- 用python写一个预警机器人(支持微信和钉钉)
背景 线上的系统在运行中,发生故障时怎么及时的通过手机通知到相关人员?当然这是个很简单的需求,现有的方法有很多,例如: 如果我们用的云产品,那么一般都会有配套对应的监控预警功能,根据需要配置一下即可, ...
- zabbix报警-邮件-钉钉
安装zabbix的时候已经配置了zabbix_server的脚本目录 AlertScriptsPath=/opt/app/zabbix/script 所以把邮件.钉钉.微信相关的脚本都放在/opt/z ...
- CabloyJS一站式助力微信、企业微信、钉钉开发 - 钉钉篇
前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...
- CabloyJS一站式助力微信、企业微信、钉钉开发 - 企业微信篇
前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...
- CabloyJS一站式助力微信、企业微信、钉钉开发 - 微信篇
前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...
- 钉钉机器人zabbix报警
首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...
- zabbix系列之九——添加钉钉告警
一.添加钉钉机器人 1. 2. 复制webhook后面脚本用到:https://oapi.dingtalk.com/robot/send?access_token=36e69dd50bbcc54b7b ...
- zabbix钉钉报警
我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...
随机推荐
- FreeSql v0.11 几个实用功能说明
FreeSql 开源发布快一年了,立志成为 .Net 平台方便好用的 ORM,仓库地址:https://github.com/2881099/FreeSql 随着不断的迭代更新,越来越稳定,也越来越强 ...
- 【algo&ds】1.时间复杂度和空间复杂度分析
1.时间复杂度分析O(f(n)) 分析方法 只关注循环执行次数最多的一段代码 加法原则 乘法原则 高优先级原则 常见时间复杂度量级 多项式量级和非多项式量级.其中,非多项式量级只有两个:O(2^n) ...
- vue 封装方法
个我这个是局部引入方法,下次有需要全局在补上(全局:在main.js文件引入封装的方法js文件,然后用Vue.prototype) 一.新建一个js文件loading.js 二.编辑loading.j ...
- QKD 一些术语的含义
密钥率:每个信道使用的比特数. 系统开销:不能用来提取最终密钥的信号百分比. SNU:散粒噪声单元 RNG:随机数发生器 QRNG:量子随机数发生器 TRNG:真正的随机数生成器 PRNG:伪随机数发 ...
- Mongodb自动备份数据库并删除指定天数前的备份
1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/ ...
- InfluxDB 聚合函数实用案例
InfluxDB 聚合函数实用案例 文章大纲 InfluxDB 简介 InfluxDB是GO语言编写的分布式时间序列化数据库,非常适合对数据(跟随时间变化而变化的数据)的跟踪.监控和分析.在我们的项目 ...
- 1 数据 & 图表
瞎逼逼:虽然是统计专业,但学艺不精.大学受过的专业训练很少,妥妥学渣.因此工作后决定重新复习,阅读材料为贾俊平的<统计学>第7版.每周更新. 我不按照书里的逻辑顺序和所有知识点来写我的笔记 ...
- 标准库flag和cobra
package main import "flag" var b bool var q *bool func init(){ var b bool //方式一 flag.Type( ...
- 设计模式之美学习(九):业务开发常用的基于贫血模型的MVC架构违背OOP吗?
我们都知道,很多业务系统都是基于 MVC 三层架构来开发的.实际上,更确切点讲,这是一种基于贫血模型的 MVC 三层架构开发模式. 虽然这种开发模式已经成为标准的 Web 项目的开发模式,但它却违反了 ...
- Python 并发总结,多线程,多进程,异步IO
1 测量函数运行时间 import time def profile(func): def wrapper(*args, **kwargs): import time start = time.tim ...