一、註冊微信企業號
因爲訂閱號的發送數量有限,很多時候超額發送之後會無法發送,現在我們申請企業號,因爲企業號可以無限制的發送報警信息。
打開註冊地址https://qy.weixin.qq.com/。
1、填寫賬號密碼信息
2、郵箱激活
3、選擇企業號
4、填寫相關信息,註冊成功
二、配置企業號
1、通訊錄添加企業成員
我們要提前把成員信息添加進組織部門,必填項+手機號或者微信號,這樣別人掃描二維碼的時候才能成功關注企業號。
注意:這裏有兩個我們要用到信息,一個組織部門的ID,一個部門成員的賬號(賬號是自己手動指定的,不同於微信號,最好是字母加數字)
查看部門id,修改部門即可看到。
在部門添加新成員。
人員爲掃描之前是?,掃描添加之後就正常了。
2、應用中心創建應用
我們要在這裏創建應用,因爲要通過應用發送消息給部門成員,可以創建多個,不同的業務通過不同的應用發送出去,我這裏創建的是運維部,這裏要記住一個值,應用ID,後面的發送腳本會用到。
3、給部門設置管理組
設置--->功能設置---->權限管理---->新建管理組,按照相應的信息設定好應用權限以及通訊錄權限,裏面的CorpID和Secret是我們後面腳本需要的。
三、調用微信接口
調用微信接口需要一個調用接口的憑證:access_token,通過CropID 、Secret才能獲取到access_token,但是獲取到的token有效期爲兩分鐘。
微信企業號接口調試工具傳送門:http://qydev.weixin.qq.com/debug。
微信接口消息類型及格式。
http://qydev.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E7%B1%BB%E5%9E%8B%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F
1、編輯微信Python腳本
# cat /usr/local/zabbix/alertscripts/yunwei.py
#!/usr/bin/python #coding:utf-8 import urllib2 import json import sys def getMsg(zabbix_msg): reload(sys) sys.setdefaultencoding('utf8') msg = ' '.join(zabbix_msg) msg = msg.split('#') mes="\n".join(msg) return "\n".join(msg) if __name__ == '__main__': #微信公衆號上應用的CropID和Secret CropID='wx8d46d36104988993' Secret='QCjzy2lH2ZB7MUG6uowChyChPssfsf6EB0X0QjofRRt0JePGezTVR4saIw3Ezznh' #獲取access_token GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (CropID,Secret) result=urllib2.urlopen(urllib2.Request(GURL)).read() dict_result = json.loads(result) dict_result.keys() Gtoken = dict_result['access_token'] #生成通過post請求發送消息的url PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % (Gtoken) AppID=4 #企業號中的應用id # UserID=2 #部門成員id,zabbix中定義的微信接收者 PartyID=2 #部門id,定義了範圍,組內成員都可接收到消息 #生成post請求信息 post_data = {} news = {} articles = {} articles['description'] = getMsg(sys.argv[3:]) articles['title'] = getMsg(sys.argv[2:3]) news['articles'] = [articles] #post_data['touser'] = UserID post_data['toparty'] = PartyID post_data['msgtype'] = 'news' post_data['agentid'] = AppID post_data['news'] = news #post_data['safe'] = '0' #由於字典格式不能被識別,需要轉換成json然後在作post請求 #注:如果要發送的消息內容有中文的話,第三個參數一點要設爲False json_post_data = json.dumps(post_data,False,False) #通過urllib2.urlopen()方法發送post請求 request_post = urllib2.urlopen(PURL, json_post_data) #read()方法查看請求的返回結果 print request_post.read()
2、配置腳本權限
chown zabbix.zabbix /usr/local/zabbix/alertscripts/yunwei.py chmod +x /usr/local/zabbix/alertscripts/yunwei.py
3、測試腳本
由腳本可以看出,我們不但可以使用zabbix報警,也可以使用任何shell報警。
[root@monitor alertscripts]# python /usr/local/zabbix/alertscripts/yunwei.py test {"errcode":0,"errmsg":"ok"}
可以看到可以正常的調用接口,我們接着配置zabbix。
四、配置Zabbix
1、創建媒介
2、給用戶增加媒介
3、創建觸發器
====================================================== 服務器:{HOST.NAME}發生: {TRIGGER.NAME}故障! { 告警主機:{HOST.NAME} 告警地址:{HOST.IP} 告警時間:{EVENT.DATE} {EVENT.TIME} 告警等級:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 監控項目:{ITEM.NAME} 當前狀態:{TRIGGER.STATUS} 持續時間:{EVENT.AGE} 事件ID:{EVENT.ID} 監控取值:{ITEM.LASTVALUE} } ===================================================== 服務器:{HOST.NAME}: {TRIGGER.NAME}已恢復! { 告警主機:{HOST.NAME} 告警地址:{HOST.IP} 告警時間:{EVENT.DATE} {EVENT.TIME} 恢復時間:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME} 告警等級:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 監控項目:{ITEM.NAME} 當前狀態:{TRIGGER.STATUS} 持續時間:{EVENT.AGE} 事件ID:{EVENT.ID} 監控取值:{ITEM.LASTVALUE} } ====================================================
Send only to選擇我們設定的媒介。
3、測試
附錄:Shell腳本
1、編輯微信Shell腳本
上面是Python的腳本,下面我貼一下Shell的腳本,其他的配置信息都是一樣的,使用其中一個就可以了。
# cat /usr/local/zabbix/alertscripts/yunwei.sh
#!/bin/bash ######################################################################### # File Name: yunwei_bash.sh # Author: wzlinux # Email: [email protected] # Created Time: 2017.4.17 ######################################################################### # Functions: send messages to wechat app # set variables CropID='wx8d46d36104988993' Secret='QCjzy2lH2ZB7MUG6uowChyChPsOQwsdf0X0QjofRRt0JePGezTVR4saIw3Ezznh' 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=4 #企業號中的應用id #local UserID="eric" #部門成員id,zabbix中定義的微信接收者 local PartyID=2 #部門id,定義了範圍,組內成員都可接收到消息 local Msg=$(echo "$@" | cut -d" " -f3-) #過濾出zabbix傳遞的第三個參數 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 $1 $2 $3)" $PURL
chown zabbix.zabbix /usr/local/zabbix/alertscripts/yunwei.sh chmod +x /usr/local/zabbix/alertscripts/yunwei.sh
5、測試
# bash yunwei.sh test Hello.World!
{"errcode":0,"errmsg":"ok"}
這裏我不再進行截圖了,我這邊測試是通過的