zabbix 5.2 配置企业微信告警(采用python脚本)
centos 8 目前已经自带python 3.6.8版本
先安装必要组件
安装组件 requests
# pip3 install requests
# pip3 install--upgrade requests
所以,如果想要用以前的python2.X版本的脚本,你需要重新把脚本完善一遍,把所有的BUG和不支持的程序给弄掉
先看看python的路径
我修改完的脚本如下
#!/usr/bin/python3
#_*_coding:utf-8 _*_
#orignal author:火星小刘 Updated author: trippal
# Currently, the script only supports more than Python 3.4 versions
import requests,sys,json
import urllib3
import importlib
importlib.reload(sys)
urllib3.disable_warnings()
def GetTokenFromServer(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
print(r.json())
if r.json()['errcode'] != 0:
return False
else:
Token = r.json()['access_token']
file = open('/tmp/zabbix_wechat_config.json', 'w')
file.write(r.text)
file.close()
return Token
def SendMessage(User,Agentid,Subject,Content):
try:
file = open('/tmp/zabbix_wechat_config.json', 'r')
Token = json.load(file)['access_token']
file.close()
except:
Token = GetTokenFromServer(Corpid, Secret)
n = 0
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
"touser": "Zhanghp", # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid, # 企业号中的标签id,群发使用(推荐)
"toparty": 2, # 企业号中的部门id,群发时使用。
"msgtype": "text", # 消息类型。
"agentid": 1000002, # 企业号中的应用id。
"text": {
"content": Subject + '\n' + Content
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
while r.json()['errcode'] != 0 and n < 4:
n+=1
Token = GetTokenFromServer(Corpid, Secret)
if Token:
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
print(r.json())
return r.json()
if __name__ == '__main__':
User = sys.argv[1] # zabbix传过来的第一个参数
Subject = str(sys.argv[2]) # zabbix传过来的第二个参数
Content = str(sys.argv[3]) # zabbix传过来的第三个参数
Corpid = "ww5f71bcebb9edd7fe" # CorpID是企业号的标识
Secret = "wk0O22u1LB_vAmkdOqRzXZwKBEV2gGLcZzJa-rggPn4" # Secret是管理组凭证密钥
#Tagid = "1" # 通讯录标签ID
Agentid = "1000002" # 应用ID
Partyid = "2" # 部门ID
Status = SendMessage(User,Agentid,Subject,Content)
print(Status)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
原先的python2.x的脚本如下所示
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
#auther:火星小刘
import requests,sys,json
import urllib3
urllib3.disable_warnings()
reload(sys)
sys.setdefaultencoding('utf-8')
def GetTokenFromServer(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
print(r.json())
if r.json()['errcode'] != 0:
return False
else:
Token = r.json()['access_token']
file = open('/tmp/zabbix_wechat_config.json', 'w')
file.write(r.text)
file.close()
return Token
def SendMessage(User,Agentid,Subject,Content):
try:
file = open('/tmp/zabbix_wechat_config.json', 'r')
Token = json.load(file)['access_token']
file.close()
except:
Token = GetTokenFromServer(Corpid, Secret)
n = 0
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
"touser": "LiYanJie", # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid, # 企业号中的标签id,群发使用(推荐)
"toparty": 2, # 企业号中的部门id,群发时使用。
"msgtype": "text", # 消息类型。
"agentid": 1000002, # 企业号中的应用id。
"text": {
"content": Subject + '\n' + Content
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False)
while r.json()['errcode'] != 0 and n < 4:
n+=1
Token = GetTokenFromServer(Corpid, Secret)
if Token:
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False)
print(r.json())
return r.json()
if __name__ == '__main__':
User = sys.argv[1] # zabbix传过来的第一个参数
Subject = str(sys.argv[2]) # zabbix传过来的第二个参数
Content = str(sys.argv[3]) # zabbix传过来的第三个参数
Corpid = "ww986f52f27xxxxxxx" # CorpID是企业号的标识
Secret = "Sinht6K7VBaJmjuZDaoOnCoyovcLHxxxxxxxxxxxxxx" # Secret是管理组凭证密钥
#Tagid = "1" # 通讯录标签ID
Agentid = "1000002" # 应用ID
Partyid = "2" # 部门ID
Status = SendMessage(User,Agentid,Subject,Content)
print Status
你如果强行在新版本的centos8或者python版本3.4以上的系统运行的话,会出现以下错误
第一个错误是因为python3版本的print的标准格式是 print(xxxx) , 而不再是print xxxx
并且NameError: name 'reload' is not defined 问题
对于 Python 2.X:
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
对于<= python 3.3:
import imp
imp.reload(sys)
注意:
1. Python 3 与 Python 2 有很大的区别,其中Python 3 系统默认使用的就是utf-8编码。
2. 所以,对于使用的是Python 3 的情况,就不需要sys.setdefaultencoding("utf-8")这段代码。
3. 最重要的是,Python 3 的 sys 库里面已经没有 setdefaultencoding() 函数了。
import importlib,sys
import lib.reload(sys)
首选,创建企业微信
接着测试一下
如果成功,则企业微信会出现如下提示
接着在zabbix监控后台
说明:这里收件人对应企业微信号中的应用ID