zabbix发送带图片的微信告警
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,zabbix发送带有图片的微信告警2.1 实现思路2.2 准备环境脚本是使用python脚本,运行环境为python 2.7.5依赖库提前安装:requests2.3 ×××tid,secret这部分
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
设备网络安全
网络安全最新刑法
2020年网络安全小动画
长沙民政职业技术学院软件开发线
高寻真源软件开发工资
网络安全和安防的区别
网络安全态势感知系统怎么做
网络安全保卫支队技术主管
for循环里访问数据库
一般日本的软件开发工程师多少钱
南昌闻微互联网科技
服务器修改ipv6后无法访问
服务器上怎么显示地址
分类建立安全风险数据库
pc软件开发 语言
四川科技职业学院互联网校服
软件开发什么系统好做
同时连接两个数据库
辽宁省网络安全宣传周活动本溪
php 服务器优化
软件工程的软件开发用
大公司数据库安全吗
虹口区推广网络安全诚信为本
电大服务器虚拟化管理
数据库怎么设置sa登录
数据库原理课题
qt软件开发外包
替换mysql数据库
审计署网络安全审计
韶关软件开发地址