分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署

简介:

Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式。

现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
前面介绍了zabbix的邮件报警的部署过程,这里继续说下zabbix的微信报警环境的部署。

废话不多说了,下面记录了微信报警的操作过程:

接下来详细记录如下:

1)微信企业号的申请过程

2)微信企业号登陆后的相关设置

3)zabbix结合微信报警脚本设置

 

------------------------------------------------------------------------------------------------------------------
一、微信企业号的申请过程(现在企业号已经升级为企业微信)

注册地址:
https://qy.weixin.qq.com/

 

 

 

 

 

 

如下:填写用户信息登陆

扫面二维码,完成身份验证

 

 

 

 

扫描二维码

 

 

 

------------------------------------------------------------------------------------------------------------------
二、微信企业号登陆后的相关设置

首次登陆,查看通讯录-组织架构,可以直接添加成员,也可以添加子部门,然后在子部门里新增成员

 

点击“修改部门”会查看到部门ID号,后面微信脚本里会用到!

 

可以将成员添加到子部门中

 

账号是不同于微信号,最好是字母加数字

 

成员添加成功后,别忘了后面要关注本企业号

 

 

 

接着”设置“企业号Logo,这个一定要设置,不然后面发信息会报错,算是一个BUG吧.

注意:设置里面的”进入认证系统“,认证是需要收费的,所以这里不进行认证。忽略这个设置。

注意:添加的用户一定要扫描下面”设置“->”企业号信息“里的二维码,关注这个企业号

 

接着到”应用中心”里创建一个应用

 

记住这个monit-test应用的ID号,后面微信脚本里会用到

 

最后,需要进行“设置”->“权限管理”的操作,新建一个管理组

 

留下下面的CorpID和Secret,后面的微信脚本里会用到!

由于上面monit-manager管理组没有设置管理员,接下来还要设置一个管理员!
点击”系统管理组“设置管理员

 

 

 邮箱验证方式添加

 

登陆上面的管理员邮箱,按照邮件提示进行密码登陆设置

 

 先扫描二维码进行绑定,然后设置密码

 

 

这样,以后登陆这个企业号,要先使用这个管理员的微信进行扫描,扫描后在微信里的企业小助手里确认登陆,然后再进行用户名和密码登陆。

 

 

 

 

 

 登陆后,发现系统管理员已经设置成功了。

 

 

-----------------------------------------------------------------------------------------------------
二、接下来进行zabbix的微信配置

 

设置微信脚本如下:在alertscripts路径下编写脚本
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts


需要调用微信接口,那么如何调用微信接口呢?
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟。

微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug

打开上面url,使用上面monitops企业号的monit-manager管理组的CorpID和Secret号获得调用接口凭证access_token,如下:

 

 

 

 zabbix发送微信报警的脚本可以用Shell脚本或python脚本,二者任选其一(推荐python脚本)

(一)Shell脚本调用
使用:
curl -s -G url 获取 AccessToken
使用:
curl --data url 传送凭证调用企业号接口

zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容

[root@Zabbix-server alertscripts]# cat weixin.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#########################################################################
# File Name: wechat.sh
# Author: shaonbean
# Email: shaonbean@qq.com
# Created Time: Sun 24 Jul 2016 05:48:14 AM CST
#########################################################################
# Functions: send messages to wechat app
# set variables
CropID= 'wx76c41a935c66acf9'
Secret= 'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
GURL= "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#get acccess_token
Gtoken=$( /usr/bin/curl  -s -G $GURL |  awk  -F\"  '{print $4}' )
PURL= "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#
function  body() {
local  int AppID=1
local  UserID= "test001"      
local  PartyID=3
local  Msg=$( echo  "$@"  cut  -d " "  -f3-)
printf  '{\n'
printf  '\t"touser": "' "$UserID "\"" ,\n"
printf  '\t"toparty": "' "$PartyID "\"" ,\n"
printf  '\t"msgtype": "text",\n'
printf  '\t"agentid": "' " $AppID  "\"" ,\n"
printf  '\t"text": {\n'
printf  '\t\t"content": "' "$Msg "\"" \n"
printf  '\t},\n'
printf  '\t"safe":"0"\n'
printf  '}\n'
}
/usr/bin/curl  --data-ascii  "$(body $! $2 $3)"  $PURL

注意:
上面脚本中标注的几处:
CorpID和Secret分别是上面企业公众号的管理组monit-manager的ID
UseID:用户账号。这里只需要填写一个账号即可。zabbix的web界面里发信是按照应用ID,只要关注这个微信企业号内的用户都会收到报警邮件。
AppID:应用ID
PartyID:部门ID号

-----------------------------------------

为什么要这样写脚本?

      因为微信企业号开放的端口有固定的格式限制

      企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

-----------------------------------------------------------------------------------------------------------------------

将weixin.sh脚本放入zabbix默认执行路径alertscripts下,权限一定要设置成zabbix进程的启动用户!
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts
[root@Zabbix-server alertscripts]# chown zabbix.zabbix /usr/local/zabbix/alertscripts/weixin.sh
[root@Zabbix-server alertscripts]# chmod 755 /usr/local/zabbix/alertscripts/weixin.sh

 

手动测试脚本能否正常发信,测试的账号由于在脚本里已经写明(test001),观察到微信能正常收到测试信息:
[root@Zabbix-server alertscripts]# ./weixin.sh  test heiheihei
{"errcode":0,"errmsg":"ok"}
[root@Zabbix-server alertscripts]# ./weixin.sh  test hahaha
{"errcode":0,"errmsg":"ok"}

 

 

-------------------------------------
python脚本调用

安装simplejson    (也可以直接下载,地址:https://pan.baidu.com/s/1o8dHQIY    提取密码:yd72)
[root@Zabbix-server src]# pwd
/usr/local/src
[root@Zabbix-server src]#
[root@Zabbix-server src]# wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
[root@Zabbix-server src]# tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
[root@Zabbix-server src]# python setup.py build
[root@Zabbix-server src]# python setup.py install
*********************************************************************************
注意:在上面build和install过程中,如果出现下面的WARNING提示,不用管,不影响结果!
WARNING: The C extension could not be compiled, speedups are not enabled.
Plain-Python installation succeeded.
*********************************************************************************

下载wechat.py脚本
[root@Zabbix-server src]# git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
[root@Zabbix-server src]# cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
[root@Zabbix-server src]# cd /usr/local/zabbix/alertscripts/
[root@Zabbix-server alertscripts]# chmod 755 wechat.py 
[root@Zabbix-server alertscripts]# chown zabbix:zabbix wechat.py
[root@Zabbix-server alertscripts]# mv wechat.py weixin.py

修改weixin.py脚本
[root@Zabbix-server alertscripts]# cat weixin.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/python
#_*_coding:utf-8 _*_
 
  
import  urllib,urllib2
import  json
import  sys
import  simplejson
 
reload (sys)
sys.setdefaultencoding( 'utf-8' )
 
 
def  gettoken(corpid,corpsecret):
     gettoken_url  =  'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='  +  corpid  +  '&corpsecret='  +  corpsecret
     print   gettoken_url
     try :
         token_file  =  urllib2.urlopen(gettoken_url)
     except  urllib2.HTTPError as e:
         print  e.code
         print  e.read().decode( "utf8" )
         sys.exit()
     token_data  =  token_file.read().decode( 'utf-8' )
     token_json  =  json.loads(token_data)
     token_json.keys()
     token  =  token_json[ 'access_token' ]
     return  token
  
  
  
def  senddata(access_token,user,subject,content):
  
     send_url  =  'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='  +  access_token
     send_values  =  {
         "touser" : "test001" ,
         "toparty" : "3" ,
         "msgtype" : "text" ,
         "agentid" : "1" ,
         "text" :{
             "content" :subject  +  '\n'  +  content
            },
         "safe" : "0"
         }
#    send_data = json.dumps(send_values, ensure_ascii=False)
     send_data  =  simplejson.dumps(send_values, ensure_ascii = False ).encode( 'utf-8' )
     send_request  =  urllib2.Request(send_url, send_data)
     response  =  json.loads(urllib2.urlopen(send_request).read())
     print  str (response)
  
  
if  __name__  = =  '__main__' :
     user  =  str (sys.argv[ 1 ])
     subject  =  str (sys.argv[ 2 ])
     content  =  str (sys.argv[ 3 ])
     
     corpid  =   'wx76c41a935c66acf9'
     corpsecret  =  'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
     accesstoken  =  gettoken(corpid,corpsecret)
     senddata(accesstoken,user,subject,content)

上面脚本中涉及了微信企业号中的用户(任意一个即可,如上的test001),应用ID,部门ID,corpid和secret

 

修改weixin.py脚本权限
[root@Zabbix-server alertscripts]# chown zabbix.zabbxix weixin.py
[root@Zabbix-server alertscripts]# chmod 755 weixin.py

 

手动测试weixin.py脚本,可以使用用户账号或应用ID去测试,观察微信是否能收到信息:
[root@Zabbix-server alertscripts]# ./weixin.py test001 test hahaha
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}
[root@Zabbix-server alertscripts]# ./weixin.py 1 test zabbix-微信报警
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}

 

 

接着开始登陆zabbix,添加报警设置(跟邮件报警的配置差不多)

1)创建报警媒介(这里我选用python脚本:weixin.py,如果选用shell脚本,就改换weixin.sh。其他设置都不变!

注意下面要填写的脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

 

2)创建用户weixin(密码一栏可以选择跟之前的超级管理员zabbix一样的密码;用户类型也可以设置成超级管理员)

 

这里最好使用微信企业号的应用ID,这样发的报警信息,在企业号内的用户都能收到。或者添加任意一个用户账号(比如test-001),切不可添加多条,否则就会收到重复信息。

 

 

 3)创建动作

 

注意严格下面的微信发送格式:
上面的默认接收人填写:{TRIGGER.STATUS}: {TRIGGER.NAME}

默认信息和恢复信息要填写一样的内容,如下:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME} 
告警等级:{TRIGGER.SEVERITY} 
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}

 

如下,在“条件”里可自主选择添加“主机”和“模板”(具体可参考上一篇的“zabbix邮件报警”的此步设置)

 

下面的“操作”(具体说明可参考上一篇的“zabbix邮件报警”的此步设置)。
下面设置的报警信息只发送给weixin用户就行了,没有发生给用户组。

 注意:“操作”底部的“条件“做如下设置(时间已确认=非确认),这个别忘了!

 

这样,就顺利创建了一个名为“weixin”的动作

 

 

测试,将其中一台被监控机器(192.168.1.25)的zabbix-agent服务关掉,观察微信是否能正常收到报警信息:
经测试,报警信息(3次)和恢复后的信息(1次),微信都能正常收到。

 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
要追加用户的微信监控,只需要将用户添加到相关应用关联到的对应部门里即可!其他配置都不需要动。

 

 

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/5995875.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
监控 关系型数据库 Linux
|
2月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
53 0
|
3月前
|
人工智能 弹性计算 PyTorch
【Hello AI】安装和使用AIACC-ACSpeed-分布式训练场景的通信优化库
AIACC-ACSpeed专注于分布式训练场景的通信优化库,通过模块化的解耦优化设计,实现了分布式训练在兼容性、适用性和性能加速等方面的升级。本文为您介绍安装和使用AIACC-ACSpeed v1.1.0的方法。
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)(下)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
30 0
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)(上)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
67 0
|
4月前
|
编译器 定位技术 开发工具
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法
|
4月前
|
存储 NoSQL 关系型数据库
基于内存的分布式NoSQL数据库Redis(一)介绍与安装
基于内存的分布式NoSQL数据库Redis(一)介绍与安装
173 0
|
4月前
|
存储 监控
Zabbix【问题 01】软件包 zabbix-release-6.2-3.el7.noarch (比 zabbix-release-5.0-1.el7.noarch 还要新) 已经安装
Zabbix【问题 01】软件包 zabbix-release-6.2-3.el7.noarch (比 zabbix-release-5.0-1.el7.noarch 还要新) 已经安装
57 0
|
4月前
|
监控 前端开发 应用服务中间件
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
413 0
|
4月前
|
Prometheus Cloud Native Linux
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)
Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)
66 0

热门文章

最新文章

推荐镜像

更多