Zabbix可以通過多種方式把告警信息發送到指定人,常用的有郵件,短信報警方式,但是越來越多的企業開始使用zabbix結合微信作為主要的告警方式,這樣可以及時有效的把告警信息推送到接收人,方便告警的及時處理。
1、注冊企業微信
注冊地址: https://work.weixin.qq.com
2、配置企業微信
2.1 創建部門
2.2 添加成員
也可通過二維碼邀請成員
記住成員賬號
3. 創建應用
填寫完信息記住應用(AgentId、Secret后面會用到)
4、配置監控腳本
准備事項:微信企業號
企業號已經被部門成員關注
企業號有一個可以發送消息的應用,一個授權管理員,可以使用應用給成員發送消息
需要得到的信息:
- 成員賬號
- 組織部門ID
- 應用ID
- CorpID和Secret
4.1 修改zabbix_agentd
[root@wain ~]# grep alertscripts /etc/zabbix/zabbix_server.conf # AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/usr/lib/zabbix/alertscripts
4.2 安裝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
4.3、配置監控腳本
vi /usr/lib/zabbix/alertscripts/wechat.py
修改腳本里企業號中相關參數信息
#!/usr/bin/python2.7 #_*_coding:utf-8 _*_ # 源地址:https://github.com/X-Mars/Zabbix-Alert-WeChat import requests,sys,json reload(sys) sys.setdefaultencoding('utf-8') def GetTokenFromServer(Corpid,Secret): Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" Data = { "corpid":Corpid, "corpsecret":Secret } r = requests.get(url=Url,params=Data,verify=False) print(r.json()) if r.json()['errcode'] != 0: return False else: Token = r.json()['access_token'] file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'w') file.write(r.text) file.close() return Token def SendMessage(User,Agentid,Subject,Content): try: file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'r') Token = json.load(file)['access_token'] file.close() except: Token = GetTokenFromServer(Corpid, Secret) n = 0 Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token Data = { "touser":'FangJian', # 企業號中的用戶帳號,在zabbix用戶Media中配置,如果配置不正常,將按部門發送。 #"totag": '1', # 企業號中的標簽id,群發使用(推薦) "toparty": "1", # 企業號中的部門id,群發時使用。 "msgtype": "text", # 消息類型。 "agentid":"1000002", # 企業號中的應用id。 "text": { "content": Subject + 'n' + Content }, "safe": "0" } r = requests.post(url=Url,data=json.dumps(Data),verify=False) while r.json()['errcode'] != 0 and n < 4: n+=1 Token = GetTokenFromServer(Corpid, Secret) if Token: Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token r = requests.post(url=Url,data=json.dumps(Data),verify=False) print(r.json()) return r.json() if __name__ == '__main__': # zabbix傳過來的第一個參數 User = sys.argv[1] # zabbix傳過來的第二個參數 Subject = str(sys.argv[2]) # zabbix傳過來的第三個參數 Content = str(sys.argv[3]) # CorpID是企業號的標識 Corpid = "wwc06ac2ef58e8169d" # Secret是管理組憑證密鑰 Secret = "hCj2VwvvNp4scE1qpeBMYUbAFDy_5NaiKH5E8g1Kk6w" # 通訊錄標簽ID #Tagid = "1" # 應用ID Agentid = "1" # 部門ID #Partyid = "1" Status = SendMessage(User,Agentid,Subject,Content) print Status
4.4 報警測試
./wechat.py 1 報警測試 error
至此代表服務器端已配置就緒
5、 zabbix web界面配置
5.1 配置報警媒介
5.2 創建報警用戶(我這以管理用戶Admin)
5.3 配置用戶報警媒介(選擇剛才創建的wechat)
5.4 創建動作
5.5 設置報警消息
故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
5.6 恢復報警
恢復{TRIGGER.STATUS}, 服務器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
到此當某台設備ICMP宕機時,便會發出微信告警信息。(ICMP相關設置需要先做好,否則不會自動告警)