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通过与微信、钉钉整合实现实时告警的更多相关文章

  1. zabbix的搭建及操作(4)实现邮件,钉钉,微信报警

    实现邮件报警 网页版邮箱中开启 POP3/SMTP/IMAP 生成授权码并记录 Server端安装配置邮件服务器 1.Yum安装邮件服务器 yum -y install mailx dos2unix ...

  2. 用python写一个预警机器人(支持微信和钉钉)

    背景 线上的系统在运行中,发生故障时怎么及时的通过手机通知到相关人员?当然这是个很简单的需求,现有的方法有很多,例如: 如果我们用的云产品,那么一般都会有配套对应的监控预警功能,根据需要配置一下即可, ...

  3. zabbix报警-邮件-钉钉

    安装zabbix的时候已经配置了zabbix_server的脚本目录 AlertScriptsPath=/opt/app/zabbix/script 所以把邮件.钉钉.微信相关的脚本都放在/opt/z ...

  4. CabloyJS一站式助力微信、企业微信、钉钉开发 - 钉钉篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  5. CabloyJS一站式助力微信、企业微信、钉钉开发 - 企业微信篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  6. CabloyJS一站式助力微信、企业微信、钉钉开发 - 微信篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  7. 钉钉机器人zabbix报警

    首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...

  8. zabbix系列之九——添加钉钉告警

    一.添加钉钉机器人 1. 2. 复制webhook后面脚本用到:https://oapi.dingtalk.com/robot/send?access_token=36e69dd50bbcc54b7b ...

  9. zabbix钉钉报警

    我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...

随机推荐

  1. 使用 Zephir 轻松构建 PHP 扩展

    简介: 通过 PHP 扩展, 我们可以在 php 代码中使用一些特定的方法(大部分的 php 扩展都是用 C 写的). 比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接 ...

  2. 【Error】Maven Dependency 下载失败问题

    原文 前言 在使用Maven私服Sonatype Nexus的时候,经常会出现依赖包找不到的问题. 此时通过浏览器去私服页面查看,发现依赖包坐标是存在的,对应的文件(比如jar文件). 或者私服上面也 ...

  3. pat 1008 Elevator(20 分)

    1008 Elevator(20 分) The highest building in our city has only one elevator. A request list is made u ...

  4. ZeroC ICE的远程调用框架 AMD

    继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD.(本篇需要重写) 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stu ...

  5. SQLite性能 - 它不是内存数据库,不要对IN-MEMORY望文生意。

    SQLite创建的数据库有一种模式IN-MEMORY,但是它并不表示SQLite就成了一个内存数据库.IN-MEMORY模式可以简单地理解为,本来创建的数据库文件是基于磁盘的,现在整个文件使用内存空间 ...

  6. Charles 笔记

    一. Charles工作原理 本质就是一个http抓包分析工具,在工作的时候将charles设置成代理服务器,所有网络请求都会经过Charles,这样就实现了网络封包的截取和分析. 主要功能 截取ht ...

  7. 学习记录:《C++设计模式——李建忠主讲》5.“对象性能”模式

    对象性能模式:面向对象很好地解决了抽象地问题,但是必不可免地要付出一定地代价.对于通常情况来讲,面向对象地成本大都可以忽略不计,但某些情况,面向对象所带来地成本必须谨慎处理. 典型模式:单件模式(Si ...

  8. 2C 还是 2B,跟找工作有什么关系?

    通常,我们会把公司的业务类型分成以下几种: 2C,to Customer,指面向个人客户的业务,即将公司的产品或服务销售给个人,通常做出购买决策的个人也是使用产品或服务的用户.举例说明,像 BAT 发 ...

  9. 关于Java中2.0-1.1!=0.9的问题

    关于Java中2.0-1.1!=0.9的问题 问题引出: 在<Java核心技术>中关于浮点数值计算部分提到,System.out.println(2.0-1.1)这条语句并不是想当然的0. ...

  10. C#Windows Forms (Demo.SYS)--xdd

    private void Show_background_picture()//随机更换背景 { ";//默认值 Random ran = new Random(); , );//返回一个1 ...