Zabbix企业微信报警推送脚本
脚本如下
#!/usr/bin/env python3
import json,requests,sys,datetime,os
# 日志路径
Log_Path='/tmp/History.log'
# access_token路径
access_token_path='/tmp/access_token'
# 日志文件
Logfile=open(Log_Path,'a',encoding="utf-8")
# 企业ID
corpid=''
# 应用ID
agentid=1000002
# 应用密匙
corpsecret=''
# 脚本接收参数
text=sys.argv[1]
# 发送信息函数
def Send_Messge(corpid,corpsecret,agentid,text):
# 检测网络状态
Network_status=Network_Test()
if Network_status==0:
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 网络通信正常\n')
else:
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 网络通信失败\n')
try:
# 获取文件信息
access_token_file=os.stat("access_token")
# 获取文件修改时间
File_mtime=access_token_file.st_mtime
# 判断access_token有效时间
Exp_Time=datetime.datetime.fromtimestamp(File_mtime)+datetime.timedelta(hours=2)
# 如果当前时间小于有效时间,则直接在文件获取access_token
if datetime.datetime.now()<Exp_Time:
access_token=open(access_token_path,'r',encoding='utf-8').read()
else:
# 如何当前时间大于文件修改时间,则执行获取函数重新获取
access_token=Get_Access_Token()
except:
# 当无法读取临时文件,则创建新的token及文件
access_token=Get_Access_Token()
# 通过API发送信息至企业微信
Put_Url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+access_token
data={'touser': '@all', 'msgtype': 'text', 'agentid': agentid, 'text': {'content': text}, 'safe': 0}
Response_Code=requests.post(Put_Url,json.dumps(data))
if Response_Code.status_code==200:
return 0
else:
return 1
#网络检测函数,通过函数来检测本地同企业微信接口的通信状态,正常返回0,异常返回1
def Network_Test():
try:
url_obj=requests.get('https://qyapi.weixin.qq.com/')
return 0
except:
return 1
# 通过API获取access_token
def Get_Access_Token():
Get_Access_Token_Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret
access_token = json.loads(requests.get(Get_Access_Token_Url).text)['access_token']
# 将access_token写入临时文件
access_token_file = open(access_token_path, 'w', encoding="utf-8")
access_token_file.write(access_token)
return access_token
# 执行发送信息函数
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' ----------开始发送信息--------\n')
Logfile.write(text)
Res=Send_Messge(corpid,corpsecret,agentid,text)
if Res==0:
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 信息发送成功\n')
else:
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 信息发送失败\n')
Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' ----------结束信息发送--------\n')
注意事项
在使用Linux时,报警脚本路径需要在/tmp目录下,其它目录测试没有写入权限,导致脚本异常。