Zabbix能夠經過多種方式把告警信息發送到指定人,經常使用的有郵件,短信報警方式。php
如今因爲微信使用的普遍度,愈來愈多的企業開始使用zabbix結合微信做爲主要的告警方式,這樣能夠及時有效的把告警信息推送到接收人,方便告警的及時處理。
前面介紹了zabbix的郵件報警的部署過程,這裏繼續說下zabbix的微信報警環境的部署。python
廢話很少說了,下面記錄了微信報警的操做過程:git
接下來詳細記錄以下:github
1)微信企業號的申請過程web
2)微信企業號登錄後的相關設置shell
3)zabbix結合微信報警腳本設置json
------------------------------------------------------------------------------------------------------------------
1、微信企業號的申請過程(如今企業號已經升級爲企業微信):api
註冊地址:
https://qy.weixin.qq.com/bash
以下:填寫用戶信息登錄微信
掃面二維碼,完成身份驗證
掃描二維碼
------------------------------------------------------------------------------------------------------------------
2、微信企業號登錄後的相關設置
首次登錄,查看通信錄-組織架構,能夠直接添加成員,也能夠添加子部門,而後在子部門裏新增成員
點擊「修改部門」會查看到部門ID號,後面微信腳本里會用到!
能夠將成員添加到子部門中
帳號是不一樣於微信號,最好是字母加數字
成員添加成功後,別忘了後面要關注本企業號
接着」設置「企業號Logo,這個必定要設置,否則後面發信息會報錯,算是一個BUG吧.
注意:設置裏面的」進入認證系統「,認證是須要收費的,因此這裏不進行認證。忽略這個設置。
注意:添加的用戶必定要掃描下面」設置「->」企業號信息「裏的二維碼,關注這個企業號
接着到」應用中心」裏建立一個應用
記住這個monit-test應用的ID號,後面微信腳本里會用到
最後,須要進行「設置」->「權限管理」的操做,新建一個管理組
留下下面的CorpID和Secret,後面的微信腳本里會用到!
因爲上面monit-manager管理組沒有設置管理員,接下來還要設置一個管理員!
點擊」系統管理組「設置管理員
郵箱驗證方式添加
登錄上面的管理員郵箱,按照郵件提示進行密碼登錄設置
先掃描二維碼進行綁定,而後設置密碼
這樣,之後登錄這個企業號,要先使用這個管理員的微信進行掃描,掃描後在微信裏的企業小助手裏確認登錄,而後再進行用戶名和密碼登錄。
登錄後,發現系統管理員已經設置成功了。
-----------------------------------------------------------------------------------------------------
2、接下來進行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
#!/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
#!/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次),微信都能正常收到。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++要追加用戶的微信監控,只須要將用戶添加到相關應用關聯到的對應部門裏便可!其餘配置都不須要動。