1. 注冊一個企業微信,獲取企業ID
2. 創建一個機器人
創建時需要選擇該小程序的可見范圍——哪些用戶可以看得到這個小程序,且能夠收到該小程序發送的信息。
創建完畢后,記錄如下的兩個值。
到此為止,已經獲取到三個值(企業id、agentid以及秘鑰)。后續服務器上的腳本就根據這三個值向小程序發送告警信息。
3. 編寫推送信息的腳本
在Zabbix服務器上的腳本路徑下創建腳本文件,默認路徑一般是/etc/zabbix/alertscripts/,請提前查看zabbix配置文件確認該路徑(AlertScriptsPath=/etc/zabbix/alertscripts)。
腳本名稱:weixin.py
存放路徑:/etc/zabbix/alertscripts/
修改策略:將之前得到的三個值,分別填入corpid、appsecret、agentid;
腳本修改完畢后,一定要為其添加可執行權限!
#!/usr/bin/env python #-*- coding: utf-8 -*- #author: yanggd #date: 2018-04-20 #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('/tmp','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)
到此為止,可以測試該腳本是否能夠發送信息;
[root@test2 alertscripts]# ./weixin.py Cheng-Loto 'Title' 'test content'
可能會遇到如下報錯,通過圖上方式可解決:
4. 配置Zabbix
添加報警媒介:管理>報警媒介類型>創建媒體類型
添加接收對象:小程序可見對象的id,登錄到企業微信通訊錄查看。
5. 配置完畢,驗證
6. 其他
① zabbix中是在告警媒介中手工添加企業微信組中的用戶ID,如果需要應用到普羅米修斯中,普羅米修斯可以通過方法自動獲取,需要借助到企業微信的API:https://work.weixin.qq.com/api/doc/90000/90135/90200
通過如下py代碼可以獲取到該小程序中的所有成員id:
import requests req = requests.get('https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=xxoxxxxxtAw&department_id=1&fetch_child=1', timeout=30); req_jason = req.json(); list2 = req_jason.get('userlist'); for i in list2: print(i.get('userid'))
②若是消息只能在企業微信里接受,個人微信收不到信息。
在企業微信客戶端,個人主頁點擊設置 -> 新消息通知 -> “僅在企業微信中接收消息”,點進去把選項全部關掉。
③ 其他配置都正確,仍然收不到信息,檢查zabbix中有沒有啟用動作。具體去排查zabbix配置的正確性。