前言
每台主机每张图的rrd文件已经创建好了,并且定时每分钟添加从ZabbixAPI取得的监控数据到rrd文件。接下来就得进行图形展示了,在图形展示前需要将图形归类,不然请求一台主机的图形后还得扒开海量的监控图寻找相关的应用监控图(如nginx、php、redis等)。
我按要求分了两大类主机硬件类和应用信息类。主机类主要展示主与机器相关的监控图如网络、硬盘、CPU负载、内存等。应用信息大类又细分为Nginx_PHP、MySQL、Redis等。
实现
model
实现这些图形的分类第一步,数据库表的设计。
1 | from django.db import models, connection |
DrawGraphs
表用来存放每张图的所需的信息图形id(graphid)、每张图形包含的item的id和item的名字(itemid、itemname)。根据一个graphid时能够得到这张图形的所有itemid、itemname、unit(item的计数单位),itemid主要是用来冲rrd文件中取对应DS的数据(rrd文件中的DS名我是用的itemid),itemname主要显示图形下面布告牌最大值、最小值神马的,unit就是Y轴显示的单位了。
DrawTree
表主要用来存放图形的层叠导航信息的。遍历所有的图形,根据图形名的关键字将每幅图归档。classname字段存放每组的组名,硬件数据的组名取Zabbix的默认分组,应用数据的分组是我自定义的分组如Nginx_PHP、Redis、MySQL等分组。hostname字段对应主机名、hostid对应主机id、graphname对应图形名、graphid对应图形id,draw对应图形是否显示的标志位(1显示、0不显示),type代表图形的分类(0代表硬件信息、1代表Nginx_PHP、2代表MySQL以此类推)。
DrawDef
表用来存放自定义图形显示所需的信息。graphid字段为需要自定义显示图形的图形id,cols代表需要自定义图形的颜色代码每种颜色用分号隔开,types对应需要自定义的绘图方法如线性(LINE1、LINE2、LINE3)、区块(AREA)等。
view
更新DrawTree与跟新DrawGraphs记录是同时进行的(为了精简代码和逻辑),views相关的代码:
1 | def zabbixindex(request): |
template
该视图函数渲染的模板zabbixindex.html
写的比较简单:
1 | {% extends "base.html" %} |
从ZabbixAPI取图形的各种属性值,经过适当的分类操作后将分类数据在本地落地,然后取落地后的分类数据将硬件和业务信息分类展示出来。