天天看點

分布式監控系統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,如需轉載請自行聯系原作者