1. 程式人生 > 其它 >實現Zabbix+企業微信告警

實現Zabbix+企業微信告警

1. 註冊一個企業微信,獲取企業ID

2. 建立一個機器人

建立時需要選擇該小程式的可見範圍——哪些使用者可以看得到這個小程式,且能夠收到該小程式傳送的資訊。

建立完畢後,記錄如下的兩個值。

到此為止,已經獲取到三個值(企業id、agentid以及祕鑰)。後續伺服器上的指令碼就根據這三個值向小程式傳送告警資訊。

3. 編寫推送資訊的指令碼

在Zabbix伺服器上的指令碼路徑下建立指令碼檔案,預設路徑一般是/etc/zabbix/alertscripts/,請提前檢視zabbix配置檔案確認該路徑(AlertScriptsPath=/etc/zabbix/alertscripts)。

指令碼名稱:weixin.py

存放路徑:/etc/zabbix/alertscripts/

修改策略:將之前得到的三個值,分別填入corpidappsecret、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配置的正確性。