Zabbix是一個非常強大的開源監控軟體,但是正常情況下我們隻會登到它提供的Web界面來檢視監控的資訊,不過Zabbix可以通過多種方式把告警資訊發送到指定人,常用的有郵件,短信報警方式,但是現在越來越多的企業開始使用Zabbix結合微信作為主要的告警方式,畢竟用郵件的話,看起來沒有那麼友善,下面來介紹一下怎麼将Zabbix發報警資訊給微信!
環境介紹:
系統:Centos7.3
zabbix:3.4.13
企業微信
一、企業微信注冊
這裡直接上企業微信官網直接注冊就行,注冊比較簡單,也不用像以前那樣提供營業執照什麼的了。
位址:http://work.weixin.qq.com/
二、配置企業微信
注冊好後在管理界面點選應用與小程式
建立好應用以後進入應用裡把這兩個值記錄下來
然後再點選上方的我的企業,把企業的ID也記錄一下
微信接口調用,測試一下接口有沒有問題
調用微信接口需要一個調用接口的憑證:access_token
通過CorpID和Secret可以獲得access_token
微信企業号接口調試位址: http://qydev.weixin.qq.com/debug
三、配置Python腳本(也可以用shell)
1、檢視Zabbix-server的腳本路徑在哪裡
打開zabbix-server的配置檔案,指定腳本存放路徑(這一步很重要,不做的話zabbix識别不到腳本)
[email protected]:~ # vim /etc/zabbix/zabbix_server.conf
2、下載下傳python微信腳本放置上面設定的腳本存放路徑
#安裝simplejson
#wget https://files.pythonhosted.org/packages/e3/24/c35fb1c1c315fc0fffe61ea00d3f88e85469004713dab488dee4f35b0aff/simplejson-3.16.0.tar.gz
#tar zxvf simplejson-3.16.0.tar.gz && cd simplejson-3.16.0
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/local/zabbix/alertscripts/
#chmod +x wechat.py && chown zabbix:zabbix wechat.py
3、修改wechat.py腳本 (要修改的部分隻有corpid,appsecret,agentid,還有日志路徑,把剛才截圖裡查詢的結果填進去即可)
[email protected]:~ # vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#date: 2018-11-12
#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/lib/zabbix/alertscripts','weixin.log'),
filemode = 'a') #指定一下日志的路徑
corpid='ww80b211239205218' # 企業ID
appsecret='F9gCNmbiSyB5cvaYwq6BII9egNNBNaOeyr4wOUk' #應用裡的Secret
agentid=1000002 #應用裡的AgentID
#擷取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)
4、測試腳本
[email protected]:~ # chmod +x /usr/lib/zabbix/alertscripts/wechat.py
[email protected]:~ # chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts/ #記得把這個檔案夾的屬主和屬組給到zabbix
這個使用者,不然可能zabbix調用不了這個腳本
[email protected]:/usr/lib/zabbix/alertscripts # ./wechat.py ZhangYouCheng abc 123456789
{"errcode":0,"errmsg":"ok","invaliduser":""}
參數1,:使用者名 參數2:主題 參數3:内容
使用者名:注意,這個腳本的參數1的使用者名必須是企業微信裡的賬号名字如下圖
檢視一下企業微信裡能不能收到腳本發來的資訊,如果能收到的話已經成功一半了!
ok,收到消息後隻需去Zabbix的web配置一下即可
四、Zabbix Web界面配置
1、配置報警媒介
管理—>報警媒介類型—>建立媒體類型
腳本參數:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2、配置使用者群組,建立監控使用者
在建立使用者之前先配置一下使用者和群組
管理—>使用者群組— Zabbix administrators (這個應該是系統自帶的群組,沒有的話再建立一個吧)
進去後選擇權限,依次選擇,把所有群組都勾選上
現在這個群組對所有的組都有讀寫權限了,現在去建立使用者
管理—>使用者—>建立使用者
建立一個接收zabbix報警的使用者
依次配置使用者、報警媒介、權限
報警媒介這一爛這樣配
權限的話給讀寫權限,一定是要讀寫權限,沒有讀寫權限很有可能沒有辦法發出去消息 !!!
配置完點更新
3、建立動作
配置—>動作—>建立動作
友善複制
預設标題:故障告警:{TRIGGER.STATUS}: {TRIGGER.NAME}
消息内容:告警主機:{HOST.NAME}
主機位址:{HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件代碼:{EVENT.ID}
預設标題:故障解除:{TRIGGER.STATUS}: {TRIGGER.NAME}
恢複主機:{HOST.NAME}
主機位址:{HOST.IP}
恢複時間:{EVENT.DATE} {EVENT.TIME}
恢複等級:{TRIGGER.SEVERITY}
恢複資訊:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件代碼:{EVENT.ID}
預設标題:Acknowledged: {TRIGGER.NAME}
消息内容:{USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message:
{ACK.MESSAGE}
Current problem status is {EVENT.STATUS}
配置完後儲存
去檢查一下
基本上配置完這三個以後就可以收到zabbix發來的消息了
能夠收到zabbix發來的報警了