Zabbix企业微信报警推送脚本

image

脚本如下

#!/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目录下,其它目录测试没有写入权限,导致脚本异常。

2021年7月26日10:39:56

点赞