摘自abcdocker網站
原文地址:https://www.abcdocker.com/abcdocker/2472
Zabbix可以通過多種方式把告警信息發送到指定人,常用的有郵件,短信報警方式,但是越來越多的企業開始使用zabbix結合微信作為主要的告警方式,這樣可以及時有效的把告警信息推送到接收人,方便告警的及時處理。
微信工作號發送機制可以參考,http://wuhf2015.blog.51cto.com/8213008/1688614
寫的很詳細,但我好像有步驟錯誤沒有成功
一、微信企業號申請
第一步注冊
提示:這里簡單的說一下,微信企業號和微信公眾號是不一樣的!
到郵件查看郵件,繼續下一步
提示一下:注冊以后就不可以修改微信號類型
我們選擇注冊團隊
由於我已經注冊了,下一步就不繼續操作了
二、配置微信企業號
當我們設置完微信號的信息之后,請繼續跟我操作
我們點擊通訊錄-->創建子部門-->運維組
提示: 我們需要記錄運維組的ID,用於腳本接收報警
我們點擊運維-->添加成員
關於認證可以參考官方說明:
我們可以使用掃描二維碼認證或者邀請認證
我們點擊創建應用
選擇消息型
設置組合用戶,將運維整個組添加進去
設置完成之后如下圖所示!
提示:我們需要記錄應用ID,在接收郵件時會使用
設置權限,讓運維組有查看的選項。管理員可以不進行設置
需要確定管理員有權限使用應用發送消息,需要管理員的CorpID和Sercrt。(重要)
准備事項:
微信企業號
企業號已經被部門成員關注
企業號有一個可以發送消息的應用,一個授權管理員,可以使用應用給成員發送消息
需要得到的信息
成員賬號
組織部門ID
應用ID
CorpID和Secret
三、修改Zabbix.conf
# grep alertscripts /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr/lib/zabbix/alertscripts 我們設置zabbix默認腳本路徑,這樣在web端就可以獲取到腳本
四、設置python腳本
#安裝simplejson
#wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz #tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2 #python setup.py build #python setup.py install
下載wechat.py腳本
#git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git #cp Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts/ #cd /usr/lib/zabbix/alertscripts/ #chmod +x wechat.py && chown zabbix:zabbix wechat.py
提示:這里需要修改py腳本
看注釋,這就不解釋了
1 [root@localhost ~]# cat /usr/lib/zabbix/alertscripts/wechat.py 2 #!/usr/bin/python 3 #_*_coding:utf-8 _*_ 4 import urllib,urllib2 5 import json 6 import sys 7 import simplejson 8 reload(sys) 9 sys.setdefaultencoding('utf-8') 10 def gettoken(corpid,corpsecret): 11 gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret 12 print gettoken_url 13 try: 14 token_file = urllib2.urlopen(gettoken_url) 15 except urllib2.HTTPError as e: 16 print e.code 17 print e.read().decode("utf8") 18 sys.exit() 19 token_data = token_file.read().decode('utf-8') 20 token_json = json.loads(token_data) 21 token_json.keys() 22 token = token_json['access_token'] 23 return token 24 def senddata(access_token,user,subject,content): 25 send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token 26 send_values = { 27 "touser":user, #企業號中的用戶帳號,在zabbix用戶Media中配置,如果配置不正常,將按部門發送。 28 "toparty":"2", #企業號中的部門id。 29 "msgtype":"text", #消息類型。 30 "agentid":"2", #企業號中的應用id。 31 "text":{ 32 "content":subject + '\n' + content 33 }, 34 "safe":"0" 35 } 36 # send_data = json.dumps(send_values, ensure_ascii=False) 37 send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8') 38 send_request = urllib2.Request(send_url, send_data) 39 response = json.loads(urllib2.urlopen(send_request).read()) 40 print str(response) 41 if __name__ == '__main__': 42 user = str(sys.argv[1]) #zabbix傳過來的第一個參數 43 subject = str(sys.argv[2]) #zabbix傳過來的第二個參數 44 content = str(sys.argv[3]) #zabbix傳過來的第三個參數 45 corpid = '11111111111111' #CorpID是企業號的標識 46 corpsecret = '222222222222222222' #corpsecretSecret是管理組憑證密鑰 47 accesstoken = gettoken(corpid,corpsecret) 48 senddata(accesstoken,user,subject,content)
執行py腳本,進行測試
[root@localhost alertscripts]# ./wechat.py www www 123 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx6dadb9cc293b793e&corpsecret=JjesoeixbFt6dDur7_eXtamVBx2SjPBuXMQ0Jte3YLkz8l-VBnr0JvU12P0kvpGJ {u'invaliduser': u'all user invalid', u'errcode': 0, u'errmsg': u'ok'}
這里我公司沒有部門id,我直接設置了1(貌似不影響)
五、zabbix web 界面配置
創建報警媒介
創建報警用戶
這里填寫運維組ID
設置報警動作
報警消息設置如下:
hostname: ({HOST.NAME}
Time:{EVENT.DATE} {EVENT.TIME}
level:{TRIGGER.SEVERITY}
message:{TRIGGER.NAME}
event:{ITEM.NAME}:{ITEM.VALUE}
url:www.abcdocker.com
恢復報警如下:
hostname: ({HOST.NAME}
Time:{EVENT.DATE} {EVENT.TIME}
level:{TRIGGER.SEVERITY}
message:{TRIGGER.NAME}
event:{ITEM.NAME}:{ITEM.VALUE}
url:www.abcdocker.com
報警配置如下
恢復配置如下
提示: 不要忘記先點小的add-->小的update-->Update
六、測試
為了驗證效果我們停掉zabbix-agent,進行查看報警
[root@abcdocker ~]# systemctl stop zabbix-agent
報警如下