1. 首页 > 快讯

Python助力高效Zabbix监控数据自动化

这篇文章给大家聊聊关于Python助力高效Zabbix监控数据自动化,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

[[400033]]

在日常运维中,当遇到每天邮件发出当天监控服务器状态等类似需求时,你还是每天下午快下班的时候打开Zabbix截图发送邮件.日复一日。手工处理?如果是这样,这篇文章将解放你的双手。

文档说明

一、自动获取zabbix监控图保存至本地

首先获取zabbix的auth ID,通过zabbix API获取主机id、graph ID等信息。打印出auth ID后保存。那么你需要使用:

#获取authkeyZABBIX_URL='https://www.zabbix.cn'Zabbix_USERNAME='用户'Zabbix_PASSWORD='密码'url='{}/api_jsonrpc.php'.format(Zabbix_URL)header={'Content-Type':'application/json' }#authuserandpassworddata={'jsonrpc':'2.0','method':'user.login','params':{'user':ZABBIX_USERNAME,'password':ZABBIX_PASSWORD},'id':1,}#由于API收到的是json字符串,所以需要转换value=json.dumps(data).encode('utf-8')#包装请求req=request.Request(url, headers=header,data=value) #验证并获取AuthIDtry:#打开打包好的urlresult=request.urlopen(req) exceptExceptionase:print('AuthFailed,PleaseCheckYourNameAndPassword:',e)else:response=result.read()#上面获取到的是bytes类型数据,所以需要解码并转换成字符串page=response.decode('utf-8')#将这个json字符串转换成python字典page=json.loads(page)result.close()print('AuthSuccessful.TheAuthIDIs:{}'.format (page.get('result'))) 变量hostname为需要查询的主机名。可以通过主机名查询主机ID。当然,你也可以使用输入功能进行交互,实现动态查询。

#获取hostiddata={'jsonrpc':'2.0','method':'host.get','params':{'output':['hostid','host'],'selectInterfaces':['interfaceid' ,'ip']},'auth':'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',#这里auth的值为上面获取到的auth'id':2}r=requests.post(url,headers=header,data=json.dumps(data ))hostname=abc123withopen(hostname_txt,'r')asf:tmp_list=[x.strip('\n')forxinf.readlines()]forhostnameintmp_list:ifr.json().get('结果'):foriinr.json()[ '结果']:ifi['host']==hostname:hostids=i['hostid'] 使用主机ID查询图ID并保存到本地;

value传入的值,from和to两个键,决定获取监控图的监控周期。本例中设置为1个月;

'profileIdx': 值中的'web.graphics.filter'是zabbix 5.0 API的新功能。如果不传入,则获取的监控周期为1小时,且不可更改。

#获取graphid列表和字典类ZabbixGraph(object):def__init__(self,url,name,password):self.url=urlself.namenameself.passwordpassword #初始化时生成cookies cookiejar=http.cookiejar.CookieJar()#cookiejar=cookielib.CookieJar ( )urlOpener=urllib.request.build_opener(u rllib.request.HTTPCookieProcessor(cookiejar))#urlOpener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))values={'n ame':self.name,'密码':self.password,'自动登录':1,'输入':'登录'}data=parse.urlencode(values).encode('utf -8')#data=urllib.urlencode(values)request=urllib.request.Request(url,data)try:urlOpener.open(request,timeout=10)self.urlOp ener=urlOpener exceptValueError:print('网页打开失败')defGetGraph (自我,网址,值,p_w_picpath_dir):keyvalues.keys()打印(值)#显示底部值中传入的值if'graphid'notinkey:print('请确认是否输入graphid')sys.exit(1)#下面的if为给定的默认值if'period'notinkey:#获取一天的数据默认情况下。单位为秒value['period']=2626560if'stime'notinkey:#默认为当前时间起始values['stime']=datetime.datetime.now().strftime('%Y%m%d% H%M%S') if '宽度'n otinkey:values['width']=800if'height'notinkey:values['height']=200data=parse.urlencode(values).encode('utf-8')#data=ur llib.urlencode(values)request=urllib.request.Request(url,data)url=self.urlOpener.open(request)p_w_picpath=url.read()p_w_picpath name='%s/%s.png'%(p_w_picpath_dir,values['主机名']+'_images'+values['name'])f=open(p_w_picpathname,'wb+')f.write(p_w_picpath )f.close()graph_id_data={'jsonrpc':'2.0','方法':'graph.get','params':{'输出':'扩展','hostids':hostids ,'sortfield':'name'},'auth':'XXXXXXXXXXXXXXXXXXXXXXXXXXX','id':1}graph_data=requests.post(url,headers=header,data=json.dumps(graph_id_data))graph_list_x=[]graph_dict_name={}ifgraph_data.json().get('结果'):foriingraph_data.json()['resu lt']:graph_id=i['graphid']graph_name_x=i['name']graph_name=graph_name_x.replace('/','_')graph_dict_name[graph_id]=graph_na megraph_list_x.append(graph_id)#=============================================================#此网址适用于获取图片。请注意,饼图的URL 与此URL 不同。请仔细观察! gr_url='https://www.zabbix.cn/chart2.php'#登录网址indexURL='https://www.zabbix.cn/index.php'username='user'password'password'#图片存储目录p_w_picpath_dir='/picture' #参数图片的字典至少传入graphid。 forkey,valueingraph_dict_name.items():values={'graphid':key,'name':value,'主机名':主机名,'宽度':800,'高度':200,'来自'3 3360'now-30d','to':'now','profileIdx':'web.graphics.filter'}b=ZabbixGraph(indexURL,用户名,密码)b.GetGraph(gr_url,values,p_w_picpath_dir)

二、将图片编辑到word,并根据graph name命名

写字:

fromdocximportDocumentfromdocx.sharedimportInchesimportosfromPILimportImage#要插入的图片所在文件夹pwd=os.getcwd()fold='图片'fold_DS=fold+'/'+'.DS_Store'word=pwd+'/'+'word文档'try:os. mkdir( pwd+'/'+fold,755) except:print('目录已存在!无需创建') #os.walk(fold) 没有返回值,所以这显然没有结果,是错误的#pics=list (os.walk(fold)[3])##pics.pop()#print(pics)#pics是图片的名称#root是字符串类型,dirs和pics是列表类型try:os.remove(fold_DS) except:print ('no.DS_Store 文件' )forroot,dirs,picsinos.walk(fold):doc=文档()foriinrange(0,len(pics)):filepath=root+'/'+str(pics[i])string=str( pics[i].strip( '.png'))#print(string)try:doc.add_paragraph(string)doc.add_picture(filepath,width=Inches(6),height=Inches(3)) exceptException:pic_tmp=Image.open( filepath)#如果格式有问题,只需使用save将其转换为默认的jpg格式pic_tmp.save(pic_tmp)#将处理后的图片放入Document变量doc doc.add_picture(filepath,width=Inches(6) ),height=Inches(3))#将Document变量doc保存到指定路径的docx文件中doc.save(word)#输出保存成功标记print('pic',string,'successivelyadded.')

三、python模块

本次使用的模块,运行前检查主机是否安装了本次执行所需的模块。

一般需要单独安装四个模块:urllib3、requests、Pillow、python-docx。

importjsonimportrequestsfromurllibimportrequest,parsefromurllib.requestimporturlopenimportsysimportdatetimeimporturllib.requestimporthttp.cookiejarimportosimportsslfromdocximportDocumentfromdocx.sharedimportInches

四、注意事项

如果部分同学的zabbix使用https访问方式,需要在代理中跳过证书验证。

ssl._create_default_https_context=ssl._create_unverified_context

获取到的镜像打开时提示文件已损坏。使用另一个代码编辑器打开它并查看代码。发现登录失败。您需要检查登录账号和方式是否正确。

用户评论

落花忆梦

这篇文章终于满足我了!我想要把每天去查看Zabbix监控地图的时间都省下来。

    有6位网友表示赞同!

爱到伤肺i

自动获取监控图片太方便了,尤其是在需要快速展示数据的时候。

    有20位网友表示赞同!

◆残留德花瓣

Python代码写的怎么样?能不能分享一下开源出来让我们一起学习?

    有17位网友表示赞同!

←极§速

51CTO上的文章越来越实用!这个Python脚本应该能够帮很多朋友解决了痛点。

    有10位网友表示赞同!

温柔腔

想了解一下如何根据指定的主机和监控指标来获取图像呢?

    有14位网友表示赞同!

柠夏初开

有没有人用过这个脚本,能不能分享一下使用心得经验?

    有5位网友表示赞同!

伪心

现在好多监控平台都提供了API接口,是不是可以直接调用获得图片了呢?

    有5位网友表示赞同!

古巷青灯

希望这个Python脚本能够支持多种主流的监控平台,这样就更方便了。

    有18位网友表示赞同!

一个人的荒凉

学习python主要是为了自动化一些工作任务,这篇文章正好给到了一些实践的经验。

    有11位网友表示赞同!

裸睡の鱼

对于入门学习Python的人来说,这篇文章会不会太艰深了?

    有9位网友表示赞同!

剑已封鞘

如果能将监控图片自动邮件发送给我就好了!

    有19位网友表示赞同!

半梦半醒半疯癫

这个Python脚本实现起来难度大吗?有没有详细的教程可以参考?

    有19位网友表示赞同!

雨后彩虹

在文章里提到的主机是指哪些类型的服务器呢?

    有12位网友表示赞同!

墨染殇雪

学习一下Python获取 Zabbix 监控图,感觉可以提升我的运维效率!

    有17位网友表示赞同!

ゞ香草可樂ゞ草莓布丁

这个脚本的功能太棒了,解放双手真是太舒服了。希望文章中能加入更多实际的应用案例。

    有16位网友表示赞同!

优雅的叶子

对 Python 就不是很熟悉,希望能看到更详细的代码讲解和示例。

    有11位网友表示赞同!

有恃无恐

对于一些没有接触过Python的同学,能不能附上一些基礎知识介绍?

    有17位网友表示赞同!

弃我者亡

这个脚本是否可以通过图形化界面操作,不用写代码就可以使用?

    有12位网友表示赞同!

冷眼旁观i

有没有考虑将监控图片保存到指定的目录或者数据库中呢?

    有8位网友表示赞同!

娇眉恨

希望以后的文章能涉及到更多关于Python与Zabbix的结合案例。

    有10位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/6870.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666