zabbix version:3.0.3
先申請一個微信企業號:https://qy.weixin.qq.com
申請步驟略
新增成員,添加成員後,會生成一個二維碼,掃描關注
創建應用(消息型應用),並給部門設置管理員(設置---權限管理--新建管理組):
要確認管理員能讀取通訊錄,可以使用應用發送消息
注意:這時需要管理員的CorpID和Secret
我們要準備這些東西:
一個微信企業號
企業號已經被部門成員關注
企業號裏有一個可以發消息的應用
一個授權管理員,可以使用該應用給成員發消息
我們要取到這些信息:
成員賬號
組織部門ID
應用ID
CropID
Secret
調用微信接口:
調用微信接口需要一個調用接口的憑證:access_token
通過 :CropID 、Secret才能獲取到access_token,但是獲取到的token有效期爲兩分鐘
http://qydev.weixin.qq.com/debug
Shell腳本
curl -s -G url 獲取 AccessToken
curl --data url 傳送憑證調用企業號接口
zabbix會傳遞三個參數給腳本,$1是消息接收賬號,$2報警標題,$3報警內容
把腳本放到zabbix告警腳本目錄下:
[root@localhost etc]# grep -i '^AlertScriptsPath' zabbix_server.conf AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts [root@CentOS etc]# cd /usr/local/zabbix/share/zabbix/alertscripts [root@CentOS alertscripts]# chmod 755 weixin.sh [root@CentOS alertscripts]# chown zabbix:zabbix weixin.sh
登錄zabbix webGUI:管理--報警媒介類型--創建媒介類型
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
這三個參數在zabbix3.0上必須加上,否則無法發送消息
管理--用戶--admin--報警媒介--添加:
創建Trigger和Action(略),發送選擇微信
然後觸發Action,然後調用微信發送消息:
默認信息:
【恢復】 http請求返回值正確
告警主機:{HOST.NAME}
主機IP: {HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件ID: {EVENT.ID}
觸發器URL: {TRIGGER.URL}
Item values:
1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}
微信腳本:
#!/bin/bash ###SCRIPT_NAME:weixin.sh### ###send message from weixin for zabbix monitor### ###wuhf### ###V1-2015-08-25### CropID='wx6df0114cc6117cf0' Secret='uLmErUwbzGqfWkG-pyILzo3h4p3teJZdQeMD4MITN6LoBl3ORUVpPnd9Q174mXP7' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 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=1 企業號中的應用id local UserID=$1 部門成員id,zabbix中定義的微信接收者 local PartyID=3 部門id,定義了範圍,組內成員都可接收到消息 local Msg=$(echo "$@" | cut -d" " -f3-) 過濾出zabbix中傳遞的第三個參數 printf '{\n' printf '\t"touser": "'"$User"\"",\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