Zabbix可以通過多種方式把告警信息發送到指定人,常用的有郵件,短信報警方式,但是越來越多的企業開始使用zabbix結合微信作為主要的告警方式,這樣可以及時有效的把告警信息推送到接收人,方便告警的及時處理。
關於郵件報警可以參考:Zabbix Web 郵件報警
一、微信企業號申請
第一步注冊
提示:這里簡單的說一下,微信企業號和微信公眾號是不一樣的!
到郵件查看郵件,繼續下一步
提示一下:注冊以后就不可以修改微信號類型
我們選擇注冊團隊
由於我已經注冊了,下一步就不繼續操作了
二、配置微信企業號
當我們設置完微信號的信息之后,請繼續跟我操作
我們點擊通訊錄-->創建子部門-->運維組
提示: 我們需要記錄運維組的ID,用於腳本接收報警
我們點擊運維-->添加成員
關於認證可以參考官方說明:
我們可以使用掃描二維碼認證或者邀請認證
我們點擊創建應用
選擇消息型
設置組合用戶,將運維整個組添加進去
設置完成之后如下圖所示!
提示:我們需要記錄應用ID,在接收郵件時會使用
設置權限,讓運維組有查看的選項。管理員可以不進行設置
需要確定管理員有權限使用應用發送消息,需要管理員的CorpID和Sercrt。(重要)
准備事項:
微信企業號
企業號已經被部門成員關注
企業號有一個可以發送消息的應用,一個授權管理員,可以使用應用給成員發送消息
需要得到的信息
成員賬號
組織部門ID
應用ID
CorpID和Secret
三、修改Zabbix.conf
[root@abcdocker ~]# grep alertscripts /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
我們設置zabbix默認腳本路徑,這樣在web端就可以獲取到腳本
四、設置python腳本
#安裝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
下載wechat.py腳本
git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
cp Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts/
cd /usr/lib/zabbix/alertscripts/
chmod +x wechat.py && chown zabbix:zabbix wechat.py
提示:這里需要修改py腳本
看注釋,這就不解釋了
[root@abcdocker ~]# cat /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/python
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys
import simplejson
reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
print gettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
print e.code
print e.read().decode("utf8")
sys.exit()
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,subject,content):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
send_values = {
"touser":user, #企業號中的用戶帳號,在zabbix用戶Media中配置,如果配置不正常,將按部門發送。
"toparty":"2", #企業號中的部門id。
"msgtype":"text", #消息類型。
"agentid":"2", #企業號中的應用id。
"text":{
"content":subject + '\n' + content
},
"safe":"0"
}
# send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
send_request = urllib2.Request(send_url, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':
user = str(sys.argv[1]) #zabbix傳過來的第一個參數
subject = str(sys.argv[2]) #zabbix傳過來的第二個參數
content = str(sys.argv[3]) #zabbix傳過來的第三個參數
corpid = '11111111111111' #CorpID是企業號的標識
corpsecret = '222222222222222222' #corpsecretSecret是管理組憑證密鑰
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
執行py腳本,進行測試
[root@abcdocker alertscripts]# ./wechat.py www www 123
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx6dadb9cc293b793e&corpsecret=JjesoeixbFt6dDur7_eXtamVBx2SjPBuXMQ0Jte3YLkz8l-VBnr0JvU12P0kvpGJ
{u'invaliduser': u'all user invalid', u'errcode': 0, u'errmsg': u'ok'}
五、zabbix web 界面配置
創建報警媒介
創建報警用戶
這里填寫運維組ID
設置報警動作
報警消息設置如下:
hostname: ({HOST.NAME}
Time:{EVENT.DATE} {EVENT.TIME}
level:{TRIGGER.SEVERITY}
message:{TRIGGER.NAME}
event:{ITEM.NAME}:{ITEM.VALUE}
url:www.abcdocker.com
恢復報警如下:
hostname: ({HOST.NAME}
Time:{EVENT.DATE} {EVENT.TIME}
level:{TRIGGER.SEVERITY}
message:{TRIGGER.NAME}
event:{ITEM.NAME}:{ITEM.VALUE}
url:www.abcdocker.com
報警配置如下
恢復配置如下
提示: 不要忘記先點小的add-->小的update-->Update
六、測試
為了驗證效果我們停掉zabbix-agent,進行查看報警
[root@abcdocker ~]# systemctl stop zabbix-agent
報警如下