天天看点

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

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

现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。

前面介绍了zabbix的邮件报警的部署过程,这里继续说下zabbix的微信报警环境的部署。

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

接下来详细记录如下:

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

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

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

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

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

注册地址:

https://qy.weixin.qq.com/

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

如下:填写用户信息登陆

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

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

扫描二维码

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

点击”系统管理组“设置管理员

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

 邮箱验证方式添加

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

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

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

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

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

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

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

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

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

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

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

设置微信脚本如下:在alertscripts路径下编写脚本

[root@Zabbix-server alertscripts]# pwd

/usr/local/zabbix/alertscripts

需要调用微信接口,那么如何调用微信接口呢?

调用微信接口需要一个调用接口的凭证:access_token

通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟。

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

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

 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

<code>#!/bin/bash</code>

<code>#########################################################################</code>

<code># File Name: wechat.sh</code>

<code># Author: shaonbean</code>

<code># Email: [email protected]</code>

<code># Created Time: Sun 24 Jul 2016 05:48:14 AM CST</code>

<code># Functions: send messages to wechat app</code>

<code># set variables</code>

<code>CropID=</code><code>'wx76c41a935c66acf9'</code>

<code>Secret=</code><code>'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'</code>

<code>GURL=</code><code>"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&amp;corpsecret=$Secret"</code>

<code>#get acccess_token</code>

<code>Gtoken=$(</code><code>/usr/bin/curl</code> <code>-s -G $GURL | </code><code>awk</code> <code>-F\" </code><code>'{print $4}'</code><code>)</code>

<code>PURL=</code><code>"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"</code>

<code>#</code>

<code>function</code> <code>body() {</code>

<code>local</code> <code>int AppID=1</code>

<code>local</code> <code>UserID=</code><code>"test001"</code>      

<code>local</code> <code>PartyID=3</code>

<code>local</code> <code>Msg=$(</code><code>echo</code> <code>"$@"</code> <code>| </code><code>cut</code> <code>-d</code><code>" "</code> <code>-f3-)</code>

<code>printf</code> <code>'{\n'</code>

<code>printf</code> <code>'\t"touser": "'</code><code>"$UserID</code><code>"\""</code><code>,\n"</code>

<code>printf</code> <code>'\t"toparty": "'</code><code>"$PartyID</code><code>"\""</code><code>,\n"</code>

<code>printf</code> <code>'\t"msgtype": "text",\n'</code>

<code>printf</code> <code>'\t"agentid": "'</code><code>" $AppID </code><code>"\""</code><code>,\n"</code>

<code>printf</code> <code>'\t"text": {\n'</code>

<code>printf</code> <code>'\t\t"content": "'</code><code>"$Msg</code><code>"\""</code><code>\n"</code>

<code>printf</code> <code>'\t},\n'</code>

<code>printf</code> <code>'\t"safe":"0"\n'</code>

<code>printf</code> <code>'}\n'</code>

<code>}</code>

<code>/usr/bin/curl</code> <code>--data-ascii </code><code>"$(body $! $2 $3)"</code> <code>$PURL</code>

注意:

上面脚本中标注的几处:

CorpID和Secret分别是上面企业公众号的管理组monit-manager的ID

UseID:用户账号。这里只需要填写一个账号即可。zabbix的web界面里发信是按照应用ID,只要关注这个微信企业号内的用户都会收到报警邮件。

AppID:应用ID

PartyID:部门ID号

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

为什么要这样写脚本?

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

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

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

将weixin.sh脚本放入zabbix默认执行路径alertscripts下,权限一定要设置成zabbix进程的启动用户!

[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

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

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

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 &amp;&amp; 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

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

<code>#!/usr/bin/python</code>

<code>#_*_coding:utf-8 _*_</code>

<code> </code> 

<code>import</code> <code>urllib,urllib2</code>

<code>import</code> <code>json</code>

<code>import</code> <code>sys</code>

<code>import</code> <code>simplejson</code>

<code>reload</code><code>(sys)</code>

<code>sys.setdefaultencoding(</code><code>'utf-8'</code><code>)</code>

<code>def</code> <code>gettoken(corpid,corpsecret):</code>

<code>    </code><code>gettoken_url </code><code>=</code> <code>'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='</code> <code>+</code> <code>corpid </code><code>+</code> <code>'&amp;corpsecret='</code> <code>+</code> <code>corpsecret</code>

<code>    </code><code>print</code>  <code>gettoken_url</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>token_file </code><code>=</code> <code>urllib2.urlopen(gettoken_url)</code>

<code>    </code><code>except</code> <code>urllib2.HTTPError as e:</code>

<code>        </code><code>print</code> <code>e.code</code>

<code>        </code><code>print</code> <code>e.read().decode(</code><code>"utf8"</code><code>)</code>

<code>        </code><code>sys.exit()</code>

<code>    </code><code>token_data </code><code>=</code> <code>token_file.read().decode(</code><code>'utf-8'</code><code>)</code>

<code>    </code><code>token_json </code><code>=</code> <code>json.loads(token_data)</code>

<code>    </code><code>token_json.keys()</code>

<code>    </code><code>token </code><code>=</code> <code>token_json[</code><code>'access_token'</code><code>]</code>

<code>    </code><code>return</code> <code>token</code>

<code>def</code> <code>senddata(access_token,user,subject,content):</code>

<code>    </code><code>send_url </code><code>=</code> <code>'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='</code> <code>+</code> <code>access_token</code>

<code>    </code><code>send_values </code><code>=</code> <code>{</code>

<code>        </code><code>"touser"</code><code>:</code><code>"test001"</code><code>,</code>

<code>        </code><code>"toparty"</code><code>:</code><code>"3"</code><code>,</code>

<code>        </code><code>"msgtype"</code><code>:</code><code>"text"</code><code>,</code>

<code>        </code><code>"agentid"</code><code>:</code><code>"1"</code><code>,</code>

<code>        </code><code>"text"</code><code>:{</code>

<code>            </code><code>"content"</code><code>:subject </code><code>+</code> <code>'\n'</code> <code>+</code> <code>content</code>

<code>           </code><code>},</code>

<code>        </code><code>"safe"</code><code>:</code><code>"0"</code>

<code>        </code><code>}</code>

<code>#    send_data = json.dumps(send_values, ensure_ascii=False)</code>

<code>    </code><code>send_data </code><code>=</code> <code>simplejson.dumps(send_values, ensure_ascii</code><code>=</code><code>False</code><code>).encode(</code><code>'utf-8'</code><code>)</code>

<code>    </code><code>send_request </code><code>=</code> <code>urllib2.Request(send_url, send_data)</code>

<code>    </code><code>response </code><code>=</code> <code>json.loads(urllib2.urlopen(send_request).read())</code>

<code>    </code><code>print</code> <code>str</code><code>(response)</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>user </code><code>=</code> <code>str</code><code>(sys.argv[</code><code>1</code><code>])</code>

<code>    </code><code>subject </code><code>=</code> <code>str</code><code>(sys.argv[</code><code>2</code><code>])</code>

<code>    </code><code>content </code><code>=</code> <code>str</code><code>(sys.argv[</code><code>3</code><code>])</code>

<code>    </code> 

<code>    </code><code>corpid </code><code>=</code>  <code>'wx76c41a935c66acf9'</code>

<code>    </code><code>corpsecret </code><code>=</code> <code>'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'</code>

<code>    </code><code>accesstoken </code><code>=</code> <code>gettoken(corpid,corpsecret)</code>

<code>    </code><code>senddata(accesstoken,user,subject,content)</code>

上面脚本中涉及了微信企业号中的用户(任意一个即可,如上的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&amp;corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs

{u'errcode': 0, u'errmsg': u'ok'}

[root@Zabbix-server alertscripts]# ./weixin.py 1 test zabbix-微信报警

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

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

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

注意下面要填写的脚本参数:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

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

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

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

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

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

 3)创建动作

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

注意严格下面的微信发送格式:

上面的默认接收人填写:{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-3.0.3-完整安装记录(6)-微信报警部署
分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署

下面的“操作”(具体说明可参考上一篇的“zabbix邮件报警”的此步设置)。

下面设置的报警信息只发送给weixin用户就行了,没有发生给用户组。

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

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

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

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

测试,将其中一台被监控机器(192.168.1.25)的zabbix-agent服务关掉,观察微信是否能正常收到报警信息:

经测试,报警信息(3次)和恢复后的信息(1次),微信都能正常收到。

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

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/5995875.html,如需转载请自行联系原作者