51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

赞(3)
未经允许不得转载:工具盒子 » Zabbix企业微信报警推送脚本