zabbix发送带图片的微信告警
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,zabbix发送带有图片的微信告警2.1 实现思路2.2 准备环境脚本是使用python脚本,运行环境为python 2.7.5依赖库提前安装:requests2.3 ×××tid,secret这部分
千家信息网最后更新 2025年12月02日zabbix发送带图片的微信告警
zabbix发送带有图片的微信告警
2.1 实现思路
2.2 准备环境
- 脚本是使用python脚本,运行环境为python 2.7.5
- 依赖库提前安装:requests
2.3 ×××tid,secret
这部分内容,可以查看前面不带图的文章有详细描述
2.4 脚本实现
#!/usr/bin/python#coding=utf-8_author__ = 'zhangdongdong'import requests, jsonimport urllib3import smtplib,sys,os,time,re,requestsfrom email.mime.image import MIMEImageif sys.getdefaultencoding() != 'utf-8': reload(sys) sys.setdefaultencoding('utf-8')urllib3.disable_warnings()class WechatImage(object): # 根据企业微信api接口文档,定义一个类,使用mpnews类型,https://qydev.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E7%B1%BB%E5%9E%8B%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F def get_token(self, corpid, secret): # 获取token url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" data = {"corpid": corpid, "corpsecret": secret} r = requests.get(url=url, params=data, verify=False) token = r.json()['access_token'] return token def get_image_url(self, token, path): # 上传临时素材图片,然后返回media_id url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=image" % token data = {"media": open(path, 'rb')} r = requests.post(url=url, files=data) dict_data = r.json() return dict_data['media_id'] def get_messages( self,subject,content,path): #定义mpnews类型中的参数字典 data = '' messages = {} body = {} content_html=text_to_html(content) token = self.get_token(corpid, secret) image = self.get_image_url(token, path) content_html += "
" % (token, image) body["title"] = subject body['digest'] = content body['content'] = content_html body['thumb_media_id'] = image data = [] data.append(body) messages['articles'] = data return messages def send_news_message(self, corpid, secret,to_user, agentid,path): #定义发送mpnews类型的数据 token = self.get_token(corpid, secret) messages = self.get_messages( subject, content,path) url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % token data = {"toparty": to_user, # 企业号中的用户帐号 "agentid": agentid, # 企业号中的应用id "msgtype": "mpnews", "mpnews": messages, "safe": "0"} headers = {'content-type': 'application/json'} data_dict = json.dumps(data, ensure_ascii=False).encode('utf-8') r = requests.post(url=url, headers=headers, data=data_dict) return r.textdef text_to_html(text): #将邮件内容text字段转换成HTML格式 d=text.splitlines() #将邮件内容以每行作为一个列表元素存储在列表中 html_text='' for i in d: i='' + i + '
' html_text+=i + '\n' #为列表的每个元素后加上html的换行标签 return html_textdef get_itemid(): #获取报警的itemid itemid=re.search(r'监控ID:(\d+)',sys.argv[3]).group(1) return itemiddef get_graph(itemid): #获取报警的图表并保存 session=requests.Session() #创建一个session会话 try: loginheaders={ "Host":host, "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" } #定义请求消息头 payload = { "name":user, "password":password, "autologin":"1", "enter":"Sign in", } #定义传入的data login=session.post(url=loginurl,headers=loginheaders,data=payload) #进行登录 graph_params={ "from" :"now-10m", "to" : "now", "itemids" : itemid, "width" : "290", #图片的高宽参数 "height" : "40", } #定义获取图片的参数 graph_req=session.get(url=graph_url,params=graph_params) #发送get请求获取图片数据 time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime()) graph_name='baojing_'+time_tag+'.png' #用报警时间来作为图片名进行保存 graph_name = os.path.join(graph_path, graph_name) #使用绝对路径保存图片 with open(graph_name,'wb') as f: f.write(graph_req.content) #将获取到的图片数据写入到文件中去 return graph_name except Exception as e: print(e) return Falseif __name__ == '__main__': user='Admin' #定义zabbix用户名 password='zabbix' #定义zabbix用户i密 graph_path='/usr/lib/zabbix/alertscripts/graph/' #定义图片存储路径,图片需要定时清理 graph_url='http://192.168.73.133/chart.php' #定义图表的url loginurl="http://192.168.73.133/index.php" #定义登录的url host='192.168.73.133' itemid=get_itemid() path =get_graph(itemid) to_user = str(sys.argv[1]) subject = str(sys.argv[2]) content = str(sys.argv[3]) corpid= "xxxxx" secret = "xxxxxxx" agentid = "1000002" wechat_img = WechatImage() wechat_img.send_news_message(corpid, secret,to_user, agentid, path)2.5 定义报警媒介类型
打开zabbix监控web,在管理菜单中选择报警媒介类型,创建媒体类型,选择脚本,填写刚才编写的微信带图脚本名称zabbix_weixin_pic.py,脚本参数,最后添加
打开管理中的用户,点击需要设置邮件告警的用户,然后在报警媒介中添加报警媒介,在弹框中选择刚才定义的类型,然后填写企业微信中创建的部门id,最后添加
2.6 定义告警动作
- 点击配置菜单中的动作,创建动作,然后根据图片进行填写
操作默认标题 Zabbix告警:副务器:{HOSTNAME}发生: {TRIGGER.NAME}故障!监控ID:{ITEM.ID}告警主机:{HOST.NAME}告警主机:{HOST.IP}告警时间:{EVENT.DATE} {EVENT.TIME}告警等级:{TRIGGER.SEVERITY}告警信息: {TRIGGER.NAME}告警项目:{TRIGGER.KEY}问题详情:{ITEM.NAME}:{ITEM.VALUE}当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}事件ID:{EVENT.ID}恢复操作Zabbix告警:副务器:{HOST.NAME}发生: {TRIGGER.NAME}已恢复!监控ID:{ITEM.ID}告警主机:{HOST.NAME}告警主机:{HOST.IP}告警时间:{EVENT.DATE} {EVENT.TIME}告警等级:{TRIGGER.SEVERITY}告警信息: {TRIGGER.NAME}告警项目:{TRIGGER.KEY}问题详情:{ITEM.NAME}:{ITEM.VALUE}当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}事件ID:{EVENT.ID}
2.7 测试效果
可以手动触发一个报警测试效果,手机上就可以收到带图的报警了,点击消息之后的页面也可以看到历史的图片
欢×××陈师傅"
图片
报警
类型
脚本
用户
主机
企业
参数
媒介
监控
内容
动作
数据
时间
邮件
选择
事件
信息
元素
图表
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
aix重启需要关闭数据库吗
宁波永发集团软件开发
php数据库修改数据库函数
服务器网络安全责任书
网络安全联系机制
黑客是网络安全专业吗
思科网络技术内容
服务器管理架构
底片数据库
软件开发公司需要做哪些vi
讯闪5.0管理服务器
23条网络安全小知识
imp导入数据库无法打开文件
软件开发类求职意向
软件开发目标分析
如何理解网络安全和信息化的关系
小皮面板打开数据库
济宁共享陪护床软件开发
网络安全基础第5版答案
微信小程序数据库指引
在关系数据库中定义的逻辑结构
阿里数据库在成都吗
软件开发数据功能
军工常用数据库
方舟手游服务器PVP推荐
怎么只复制非隐藏数据库
软件开发行业有没有淡旺季
管理软件开发前途
感想的作文关于网络安全
武汉软件开发培训哪个好