zabbix发送带图片的微信告警
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,zabbix发送带有图片的微信告警2.1 实现思路2.2 准备环境脚本是使用python脚本,运行环境为python 2.7.5依赖库提前安装:requests2.3 ×××tid,secret这部分
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网科技公司排名
互联网科技公司的优势
互联网金融监管科技数据
金融科技还是互联网
互联网科技视频
艾特科技互联网
融势互联网科技
兼蜜互联网科技
丰台科技园 互联网公司
衡水科技产业互联网平台
蓝色互联网科技
中国航天科技大学国际工业互联网
互联网5g黑科技有哪些
广州市恰铎互联网科技有限公司
上海科技产业互联网平台
深圳无忧互联网科技
杭州融税互联网科技有限公司
网互联网络科技
互联网的黑科技实验室
互联网大会出现的黑科技
互联网与新科技
浩特互联网科技
互联网前沿科技
晓花互联网科技有限公司网址
特约风豹互联网科技为什么扣费
中天科技中国工业互联网
城市宝互联网科技有限公司
互联网科技新闻
银川新华互联网科技学校招聘
互联网 科技节活动 微视频大赛