2018年04月26日 15:37:38python
閱讀數:619web
微信做爲平常使用最頻繁的工具,所以但願將微信接入zabbix報警。json
1.申請微信企業號
申請後,請在「個人企業」頁面下記錄企業號的CorpID
2.添加通信錄
部門添加完成後,根據實際狀況添加子部門或相關成員,以下:
3.建立應用
在「企業應用」頁面建立應用
c#
注意: 可見範圍必定要添加須要收到報警的人員或部門,不然zabbix報警信息沒法推送到相關人員。api
建立完成以下:
微信
至此,微信企業號的配置完成。app
一.微信報警腳本
默認將腳本放到/usr/local/zabbix/share/zabbix/alertscripts便可,因爲我在腳本中打印日誌,所以請添加權限。工具
#!/usr/bin/env python #-*- coding: utf-8 -*- #author: yanggd #date: 2018-04-20 #comment: zabbix接入微信報警腳本 import requests import sys import os import json import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s', datefmt = '%a, %d %b %Y %H:%M:%S', filename = os.path.join('/usr/local/zabbix/share/zabbix/alertscripts','weixin.log'), filemode = 'a') corpid='wwbbaxxxxxx' appsecret='m2HUZXUxxxxxxxxxx' agentid=1000004 #獲取accesstoken token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] #發送消息 msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken touser=sys.argv[1] subject=sys.argv[2] #toparty='3|4|5|6' message=sys.argv[3] params={ "touser": touser, # "toparty": toparty, "msgtype": "text", "agentid": agentid, "text": { "content": message }, "safe":0 } req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
#添加權限 chmod +x weixin.py touch weixin.log chown zabbix.zabbix weixin.log
企業號開發文檔請官方文檔企業微信API:
開始開發
發送應用消息post
腳本說明:
1.corpid、appsecret、agentid就是咱們須要從企業號和應用中獲取到的信息,其中.corpid、appsecret用於獲取accesstoken,agentid用於往應用發送消息
2.因爲zabbix會往腳本中傳入3個參數,分別爲sendto(收件人)、subject(報警主題)、message(報警信息)。這3個參數須要在zabbix中配置,咱們下面會講到。測試
此腳本中咱們沒有接受subject參數,而是直接使用sendto及message參數。
另經測試添加toparty部門變量後,發現報警信息會重複發送,所以在此註釋掉。
具體的報警發送信息,咱們經過腳本打印在日誌weixin.log中。
2、zabbix配置
1.報警媒介類型
zabbix3.4版本要添加這三個參數,用於發給weixin.py。
2.添加動做
事件源選擇「觸發器」,而後「建立動做」
(1)動做
注意:計算方式」與/或」,當維護狀態非在維護 and 任意一個模板項有問題時,會觸發此動做。
(2)操做
「默認信息」就是發送到weixin.py腳本的message
「操做」能夠定義此動做發送的接收人或接受組
#方便拷貝 Problem started at {EVENT.TIME} on {EVENT.DATE} Problem name: {TRIGGER.NAME} Host: {HOST.NAME} Severity: {TRIGGER.SEVERITY} Problem description: {ITEM.NAME}:{ITEM.VALUE} {TRIGGER.URL}
(3)恢復操做
此操做就是故障恢復時發送恢復報警信息。
#方便拷貝 Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE} Problem name: {TRIGGER.NAME} Host: {HOST.NAME} Severity: {TRIGGER.SEVERITY} Problem description: {ITEM.NAME}:{ITEM.VALUE} {TRIGGER.URL}
(4)確認操做
此操做就是監控人員在zabbix網頁中確認問題並關閉問題後發送的確認信息,這也是3.4版本和某些低版本不一樣的地方。
#方便拷貝 {USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message: {ACK.MESSAGE} Current problem status is {EVENT.STATUS}
3.給用戶添加報警媒介
管理–用戶,選擇屬於web_admin組中的一個用戶,而後選擇「報警媒介」-「添加」
注意:收件人爲企業號-通信錄中成員帳號,是成員的惟一標識。
3、測試
當上面的幾步操做完成後,咱們先對腳本進行測試。
#最好使用zabbix用戶測試,來排除權限問題 python weixin.py opt test test #opt爲消息接收帳號
執行完成後,企業號就會收到測試信息,而後再中止某一服務,經過zabbix報警查看微信是否能接收到信息。
weixin.py腳本經過zabbix報警使用的是zabbix用戶,所以請確認腳本及日誌是否具備權限。
微信報警信息以下:
第一條是報警信息
第二條是故障恢復信息