实现思路:
-
<李>首先报警信息里要有itemid,这是前提,根据信息里传入的参数使用正则匹配到itemid李>
<李>构建一个会话会话,或者使用饼干来进行登录,根据itemid去请求图片,并将获取到的图片保存到本地,由于减价的图片链接需要被访问的到,我的zabbix是在内网中,所以需要将图片传到图床或者传到一个具有公网IP的web服务器,我这里传到了我的个人服务器李>
<李>将报警信息转换成减价语法格式李>
<李>构造请求利用钉钉的webhook发送消息李>
设置钉钉机器人
-
<李>钉钉机器人需要进行安全设置,这里我定义了关键词“通知”,也就是说发送的消息中必须包含这个词李>
脚本实现
-
<李>由于需要将图片从本地拷到远端,免密需要提前配置好,脚本是用zabbix用户执行,Web服务器目录的安全策略最好设置一下李>
<代码> # !/usr/bin/python # - * -编码:utf - 8 - * 导入请求,时间 进口json、sys再保险、操作系统 zabbixserver_url=' http://192.168.99.200/index.php ' #定义远端的web服务器地址,将图片复制到远端网络的目录下 pname_path=' http://47.103.15.51/dingding_pic/' #定义获取的图片地址 testUrl=" http://192.168.99.200/chart.php " 主机=' 192.168.99.200 ' def get_itemid (): itemid=再保险。搜索(r 'ITEM ID: (\ d +) ', sys.argv [2]) .group (1) 返回itemid def get_picture (itemid pname): #构建会话,或者可以一次构建之后使用饼干登录 myRequests=requests.Session () 试一试: loginHeaders={ “主机”:主机, “接受”:“text/html、application/xhtml + xml应用程序/xml; q=0.9,图像/webp图像/apng */*; q=0.8 " } #构建登录所需的信息 playLoad={ “名称”:“Admin”, “密码”:“zabbix”, “autologin”:“1”, “输入”:“签到”, } myRequests。帖子(url=zabbixserver_url头=loginHeaders, data=https://www.yisu.com/zixun/playLoad) testUrlplayLoad={“从”:“now-10m”, “”:“现在”, “itemid”: itemid, “宽度”:“700”, } testGraph=myRequests.get (url=testUrl params=testUrlplayLoad) IMAGEPATH=os.path。加入(“/usr/lib/zabbix/alertscripts/dingding_pic/', pname) #将获取到的图片数据写入到文件中去 张开(IMAGEPATH wb) f: f.write (testGraph.content) 操作系统。系统(“sudo scp % s root@47.103.15.51:/usr/share/nginx/html/dingding_pic”% IMAGEPATH) pname_url=pname_path + pname 返回pname_url 除了例外e: 打印(e) 返回假 #构造发送消息的请求 def send_msg (pname_url info3): 头={“内容类型”:“application/json; charset=utf - 8”} 打印(info3) data=https://www.yisu.com/zixun/{“msgtype”:“减价”, “减价”:{ “标题”:info1, “文本”:“# #通知:\ n”+ info3 +”!(截图)(% s) \ n”% (pname_url) }, “在”:{ “atMobiles”:提醒, “isAtAll”:假的, }, } r=requests.post (url=webhook_url json=数据,标题=标题) 打印(r.text) #对报警信息进行格式化 def info_text (): new_text=" " x=info2.split (“\ n”) 因为我在x: 如果re.search(项ID, str(我)): 通过 其他: new_text +=?”+ str (i) + (“\ n”) print(类型(new_text)) 返回new_text if __name__==癬_main__”: #将报警信息写入日志 操作系统。系统(“回声你好祝辞祝辞/tmp/syslog.md”) pname=str (int (time.time ())) + . png” info1=str (sys.argv [1]) info2=str (sys.argv [2]) info3=info_text () 张开(“/tmp/syslog.md”,“一个”)f: f.write (info1) f.write (info2) f.close () 提醒=[] webhook_url=' https://oapi.dingtalk.com/robot/send?access_token=771ded387e6be652c51a2b6c83cade4e048e3da4fdfe128f1db6b124b87df18a ' itemid=get_itemid () pname_url=get_picture (itemid pname) 打印(pname_url) send_msg (pname_url info3)Zabbix配置钉钉的带图片报的警