實現zabbix通過微信報警的方式也是通過腳本來實現,與郵件報警不同的是,腳本調用的微信的相關接口的獲取相對復雜一點
1、申請一個微信公眾號(企業號)
申請方法不多說,如果已申請請忽略
2、在微信企業號上新建應用
上傳應用logo,填寫應用名稱,應用介紹等
應用創建完之后查看並啟用應用,同時會生成應用的AgentId以及Secret,這個在后面步驟會有用
3、接口調用測試
點擊:API文檔——>開發者工具——>接口調試工具,找不到就直接點這個地址
http://work.weixin.qq.com/api/devtools/devtool.php
corpid為創建的企業號生成的corpid
Corpsecret就是在第2步中創建的應用所生成的Secret,填入后點擊檢查問題,生成請求地址和返回結果,確認無誤后進行下一步
4、關於腳本
腳本的存放目錄為/usr/lib/zabbix/alertscripts,腳本內容不做過多說明,需要了解含義請自行百度,腳本內容如下
[root@zabbix alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
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('/tmp','weixin.log'),
filemode = 'a')
corpid='微信企業號corpid'
appsecret='應用的Secret'
agentid=應用的id
#獲取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[2] + "\n\n" +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)
腳本中需要填寫微信企業號corpid,應用的Secret以及應用的id,腳本中還定義了日志文件為/tmp/weixin.log
腳本編寫完成之后需要為腳本添加執行權限
[root@zabbix alertscripts]# chmod +x weixin.py
腳本后面內容中的一些參數touser,toparty,msgtype,agentid,content,safe是微信企業號中定義的參數名稱,說明文檔見騰訊企業號開發者文檔https://work.weixin.qq.com/api/doc
目前微信企業號中的部門成員賬號也就是我們使用的touser參數是部門成員的賬號,這個賬號在早起階段是成員的微信號碼,但是目前我們需要使用的賬號微信官方自動生成為成員名字的拼音縮寫,可以在微信企業號后台通訊錄——>部門——>成員詳情找到
另外需要說明的是,微信企業號應用的訪問頻率是有限制的,這一點同樣也可以在開發者文檔中找到
5、web界面新增報警媒介類型
名稱自定義即可,類型選擇腳本,腳本名稱為所寫的腳本的名稱weixin.py,腳本的三個參數都是zabbix內置變量,分別為:報警收件人:{ALERT.SENDTO},報警標題:{ALERT.SUBJECT},報警內容:{ALERT.MESSAGE},添加完報警媒介類型后勾選啟用
6、配置用戶報警媒介信息
配置需要收到微信報警的用戶的信息,添加報警媒介,選擇上面創建的微信報警,收件人填寫上面所說的部門成員的賬號,由於是通過微信公眾號發送的微信提醒,如果需要為多個用戶例如微信企業號中所有用戶發送報警,這里收件人的信息就填寫為@all
7、測試
命令行測試腳本能否成功執行
[root@zabbix alertscripts]# ./weixin.py har452330261 "測試" 'test'
測試參數為三個,分別為部門成員賬號,報警標題,報警內容
測試的時候如果出現錯誤提示缺少requests,解決方法為使用pip進行安裝:pip install smtplib
測試后會在微信企業號中收到我們創建的應用所發出的消息
同時在zabbix服務器的后台也生成了微信報警的日志文件/tmp/weixin.log,如果測試不成功可以通過日志來進行查錯
命令行測試完成后,如果想要通過zabbix進行觸發報警,還需要做的就是將上面生成的日志文件的所屬修改為zabbix用戶且具有寫權限
[root@zabbix alertscripts]# ll /tmp/weixin.log
-rwxr-xr-x 1 zabbix zabbix 35329 6月 13 07:47 /tmp/weixin.log
到這里微信報警就算大功告成了,接下來就可以愉快的通過zabbix進行觸發微信報警了,報警成功觸發后可以通過zabbix面板的報表——>動作日志查看
收到的報警提示如下
附加內容:
1、微信報警基於微信企業號,通常情況下我們收到微信企業號的消息需要下載微信企業號的客戶端,如何不下載又能收到消息呢(也就是直接在自己的微信收到消息呢)?
解決辦法為:進入微信企業號后台——>連接微信——>微工作台——>邀請關注,后台會給所擁有的微信企業號生成一個二維碼,拿出手機,微信掃碼關注,以后報警的消息就能直接在微信收到了
2、新添加的用戶收到微信報警的步驟:
微信企業號通訊錄相應部門中添加成員
微信企業號微工作台邀請成員關注
zabbix服務端web界面添加用戶,設置用戶的微信報警媒介(收件人所在部門的相應成員賬號)
3、微信企業號具有很多功能以及開發者工具,有興趣或者相關開發人員可以細細研究
博主原創文章,轉載請務必注明出處