我們?cè)诒O(jiān)控線上運(yùn)行的項(xiàng)目時(shí),一旦遇到異常,通常的做法會(huì)發(fā)郵件、短信至開發(fā)團(tuán)隊(duì)。
以郵件的方式來說,消息具有滯后性,不可能無時(shí)無刻的都盯著郵箱,盡管可以選擇郵箱客戶端,但總感覺郵件的方式敏感度不高。
以短信的方式來說,更多的可能會(huì)考慮到成本問題。短信都是需要付費(fèi)的,當(dāng)監(jiān)控場景增加或者接受報(bào)警人數(shù)增加時(shí),都會(huì)帶來成本的增加。
這里,推薦一個(gè)比較不錯(cuò)的解決方案 -- 企業(yè)微信。對(duì)于企業(yè)微信來說,優(yōu)點(diǎn)也很明顯,消息實(shí)時(shí)度強(qiáng),成本低,靈活性高,跨平臺(tái)。接入企業(yè)微信后,可以不修改代碼靈活增減被通知人員。
配置企業(yè)微信
-
注冊(cè)企業(yè)微信
個(gè)人也可以注冊(cè)企業(yè)微信,不提交企業(yè)資料可以,可以容納200個(gè)成員。如果團(tuán)隊(duì)不大的話,完全可以不提交企業(yè)資料。
-
創(chuàng)建應(yīng)用
創(chuàng)建一個(gè)應(yīng)用,服務(wù)于你自己的監(jiān)控報(bào)警。每一個(gè)應(yīng)用都包含以下功能。
監(jiān)控報(bào)警來說,只需要使用發(fā)送消息的功能。每個(gè)應(yīng)用都會(huì)自己的AgentId和Secret,后面調(diào)用API的時(shí)候需要用到。 -
添加成員
向剛才的創(chuàng)建的應(yīng)用中添加被通知人員。當(dāng)然前提是已經(jīng)加入該企業(yè)微信。
接入程序
企業(yè)微信的API,調(diào)用本質(zhì)上就是調(diào)用Http post請(qǐng)求,所以各個(gè)語言平臺(tái)都適用。具體說明可以參照文檔:API文檔。這里以python為例,實(shí)現(xiàn)的是企業(yè)微信的發(fā)送消息接口。
- 獲取
token
tokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
def get_token():
values = {'corpid': 'xxxxx', 'corpsecret': 'xxxxx'}
req = requests.post(tokenUrl, params=values)
data = json.loads(req.text)
return data["access_token"]
這里需要填寫企業(yè)微信的corpid和corpsecret。
- 發(fā)送消息
sendMsg = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="
def send_msg(msg):
url = sendMsg + get_token()
values = """{"touser" : "XXX" ,
"msgtype":"text",
"agentid":"XXX",
"text":{
"content": "%s"
},
"safe":"0"
}""" % msg
requests.post(url, values)
發(fā)送消息的時(shí)候需要配置touser和agentid。touser被通知用戶的賬戶,在企業(yè)通訊錄可以查看用戶的賬戶名,多個(gè)以|間隔。如果是所有用戶則直接填寫@all。agentid為應(yīng)用的agentid。
當(dāng)我在程序中中需要捕獲異常時(shí)或者監(jiān)控需要發(fā)送通知時(shí),直接調(diào)用send_msg就可以向我們發(fā)送通知了。
if __name__ == '__main__':
try:
1 / 0
except ZeroDivisionError, e:
send_msg(e.args[0])
寫完,怎么越看越像企業(yè)微信的軟文...... ㄟ( ▔, ▔ )ㄏ
