zabbix报警推送至企业微信脚本

复制代码
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_

import requests,sys,json,logging,time                                      # 导入requests模块用于发送HTTP请求,sys模块用于获取命令行参数,json模块用于处理JSON格式数据 日志模块时间模块
import urllib3                                                             # 导入urllib3模块用于禁用SSL证书验证
urllib3.disable_warnings()                                                 # 禁用SSL证书验证,避免HTTPS请求出现证书验证错误

reload(sys)                                                                # 重新加载sys模块,解决默认编码问题
sys.setdefaultencoding('utf-8')                                            # 设置默认编码为UTF-8,避免中文字符编码错误

####这个位置配置测试增加log日志信息和日期

logfile = 'log.txt'

def write_log(log):
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
log_with_time = { 'timestamp': timestamp, 'log': log }
with open(logfile, 'a') as f:
f.write(json.dumps(log_with_time) + '\n')

##############################

这个测试配置只增加log

#def write_log(log):
# with open('/tmp/zabbix_wechat.log', 'a') as f:
# f.write(json.dumps(log) + '\n')

# 构造获取访问令牌的函数,输入企业号标识Corpid和管理组凭证密钥Secret,返回访问令牌Token

def GetTokenFromServer(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"                      # 构造获取访问令牌的API请求URL
Data = {                                                                  # 构造API请求参数
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)                        # 发送HTTP GET请求     
write_log(r.json())                                            # 输出API响应结果
if r.json()['errcode'] != 0:                                      # 判断获取令牌是否成功
return False                                                               # 如果获取失败则返回False 
else:
Token = r.json()['access_token']                                           # 提取访问令牌
file = open('/tmp/zabbix_wechat_config.json', 'w')                         # 创建/tmp/zabbix_wechat_config.json文件
file.write(r.text)                                                         # 将API响应写入文件
file.close()                                                               # 关闭文件
return Token                                                               # 返回访问令牌

# 构造发送消息的函数,输入接收人User、应用ID Agentid、消息主题Subject和消息内容Content,返回发送状态

def SendMessage(User,Agentid,Subject,Content):
try:
file = open('/tmp/zabbix_wechat_config.json', 'r')                         # 以只读方式打开/tmp/zabbix_wechat_config.json文件
Token = json.load(file)['access_token']                                    # 从文件中读取访问令牌
file.close()                                                               # 关闭文件
except:
Token = GetTokenFromServer(Corpid, Secret)                                 # 如果文件读取失败则重新获取访问令牌

n = 0                                                                      # 计数器n用于判断重发次数

# 构造发送消息API的请求URL和请求数据

Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
"touser": "******",                       # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid,                          # 企业号中的标签id,群发使用(推荐)
"toparty": 2,                             # 企业号中的部门id,群发时使用。
"msgtype": "text",                        # 消息类型。
"agentid": 1000003,                       # 企业号中的应用id。
"text": {
"content": Subject + '\n' + Content                                      # 消息内容,由主题和内容拼接构成
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False)    # 发送HTTP POST请求
write_log(r.json())
while r.json()['errcode'] != 0 and n < 4:                                # 如果发送失败,则尝试重新获取访问令牌并重发消息,最多尝试3次
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)
write_log(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传过来的第三个参数

write_log('User: %s, Subject: %s, Content: %s' % (User, Subject, Content))

Corpid = "****************"                                              # CorpID是企业号的标识
Secret = "****************************"                                  # Secret是管理组凭证密钥
#Tagid = "*"                                                             # 通讯录标签ID
Agentid = "*******"                                                      # 应用ID
Partyid = "*"                                                            # 部门ID

Status = SendMessage(User,Agentid,Subject,Content)                       # 调用发送消息函数,获取发送状态
write_log(str(Status))                                                   # 输出发送状态
复制代码

 

 

发现微信官方有自带的机器人,可以解决企业微信无法直接配置可信ip的问题
操作步骤
1. 登录微信对话开放平台,注册一个机器人
2. 点击发布管理-应用绑定-企业微信,会获得三个参数,复制下来
3. 登录企业微信管理后台,点击接收消息-设置API接收,将三个参数对应的填进去,然后点击保存,提示保存成功后就可以配置可信ip啦
如果只需要配置可信ip,到这里就可以了,以下步骤配置如何使用这个机器人进行聊天
4. 点击对话配置-预置技能,启用想要的技能
5. 点击发布管理-上线发布,发布一个版本

 

posted @   日光倾城-  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示