介绍
小编给大家分享一下Zabbix如何配置带图片报警功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>实现思路:强>
首先报警信息里要有itemid,这是前提,根据信息里传入的参数使用正则匹配到itemid构建一个会话会话,或者使用饼干来进行登录,根据itemid去请求图片,并将获取到的图片保存到本地,由于减价的图片链接需要被访问的到,我的Zabbix是在内网中,所以需要将图片传到图床或者传到一个具有公网IP的web服务器,我这里传到了我的个人服务器将报警信息转换成减价语法格式构造请求利用钉钉的webhook发送消息设置钉钉机器人
钉钉机器人需要进行安全设置,这里我定义了关键词“通知”,也就是说发送的消息中必须包含这个词
脚本实现由于需要将图片从本地拷到远端,免密需要提前配置好,脚本是用Zabbix用户执行,web服务器目录的安全策略最好设置一下
# !/usr/bin/python #,- *安康;编码:utf-8 - * - import 请求时间 import json、sys再保险、操作系统 zabbixserver_url =& # 39; http://192.168.99.200/index.php& # 39; #定义远端的web服务器地址,将图片复制到远端网络的目录下 pname_path=& # 39; http://47.103.15.51/dingding_pic/& # 39; #定义获取的图片地址 时间=testUrl “http://192.168.99.200/chart.php" 主机=& # 39;192.168.99.200& # 39; def get_itemid (): itemid才能=re.search (" # 39; ITEM ID: (\ d +) & # 39;, sys.argv [2]) .group (1) return itemid才能 def get_picture (itemid pname): #才能构建会话,或者可以一次构建之后使用饼干登录 时间=myRequests 才能;requests.Session () 尝试才能: ,,,loginHeaders =, { ,,,,,“Host":主机,,,,,,, ,,,,,“Accept":“text/html, application/xhtml + xml应用程序/xml; q=0.9,图像/webp图像/apng */*; q=0.8“, ,,,} ,,,#,构建登录所需的信息 ,,,playLoad =, { ,,,,,“name":,“Admin" ,,,,,“password":, & # 39; zabbix # 39; ,,,,,“autologin":,“1”, ,,,,,“enter":,“Sign in" ,,,} ,,,myRequests.post (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={ “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如何配置带图片报警功能