簡介python
微信做爲平常使用最頻繁的工具,所以但願將微信接入zabbix報警。web
微信企業號json
1.申請微信企業號
申請後,請在「個人企業」頁面下記錄企業號的CorpID
2.添加通信錄
部門添加完成後,根據實際狀況添加子部門或相關成員,以下:
3.建立應用
在「企業應用」頁面建立應用 api
注意: 可見範圍必定要添加須要收到報警的人員或部門,不然zabbix報警信息沒法推送到相關人員。微信
建立完成以下: app
至此,微信企業號的配置完成。工具
zabbix server端配置post
一.微信報警腳本
默認將腳本放到/usr/local/zabbix/share/zabbix/alertscripts便可,因爲我在腳本中打印日誌,所以請添加權限。測試
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: yanggd
#date: 2018-04-20
#comment: zabbix接入微信報警腳本url
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/local/zabbix/share/zabbix/alertscripts','weixin.log'),
filemode = 'a')
corpid='wwbbaxxxxxx'
appsecret='m2HUZXUxxxxxxxxxx'
agentid=1000004
#獲取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)
#添加權限
chmod +x weixin.py
touch weixin.log
chown zabbix.zabbix weixin.log
企業號開發文檔請官方文檔企業微信API:
開始開發
發送應用消息
腳本說明:
1.corpid、appsecret、agentid就是咱們須要從企業號和應用中獲取到的信息,其中.corpid、appsecret用於獲取accesstoken,agentid用於往應用發送消息
2.因爲zabbix會往腳本中傳入3個參數,分別爲sendto(收件人)、subject(報警主題)、message(報警信息)。這3個參數須要在zabbix中配置,咱們下面會講到。
此腳本中咱們沒有接受subject參數,而是直接使用sendto及message參數。
另經測試添加toparty部門變量後,發現報警信息會重複發送,所以在此註釋掉。
具體的報警發送信息,咱們經過腳本打印在日誌weixin.log中。
2、zabbix配置
1.報警媒介類型
zabbix3.4版本要添加這三個參數,用於發給weixin.py。
2.添加動做
事件源選擇「觸發器」,而後「建立動做」
(1)動做
注意:計算方式」與/或」,當維護狀態非在維護 and 任意一個模板項有問題時,會觸發此動做。
(2)操做
「默認信息」就是發送到weixin.py腳本的message
「操做」能夠定義此動做發送的接收人或接受組
#方便拷貝
Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {TRIGGER.NAME}
Host: {HOST.NAME}
Severity: {TRIGGER.SEVERITY}
Problem description: {ITEM.NAME}:{ITEM.VALUE}
{TRIGGER.URL}
(3)恢復操做
此操做就是故障恢復時發送恢復報警信息。
#方便拷貝
Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
Problem name: {TRIGGER.NAME}
Host: {HOST.NAME}
Severity: {TRIGGER.SEVERITY}
Problem description: {ITEM.NAME}:{ITEM.VALUE}
{TRIGGER.URL}
(4)確認操做
此操做就是監控人員在zabbix網頁中確認問題並關閉問題後發送的確認信息,這也是3.4版本和某些低版本不一樣的地方。
#方便拷貝
{USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message:
{ACK.MESSAGE}
Current problem status is {EVENT.STATUS}
3.給用戶添加報警媒介
管理–用戶,選擇屬於web_admin組中的一個用戶,而後選擇「報警媒介」-「添加」
注意:收件人爲企業號-通信錄中成員帳號,是成員的惟一標識。
3、測試
當上面的幾步操做完成後,咱們先對腳本進行測試。
#最好使用zabbix用戶測試,來排除權限問題
python weixin.py opt test test
#opt爲消息接收帳號
執行完成後,企業號就會收到測試信息,而後再中止某一服務,經過zabbix報警查看微信是否能接收到信息。
weixin.py腳本經過zabbix報警使用的是zabbix用戶,所以請確認腳本及日誌是否具備權限。
微信報警信息以下: 第一條是報警信息 第二條是故障恢復信息