缘起
老大说zabbix
图形展示没有cacti
漂亮,将zabbix
的图形插件ztree
上面的展示图改成和cacti
展现形式差不多的样子(其实就是稍微改了改ztree
插件的php
代码和css
样式),效果如下:
图形很快就改好了,但是有个大的缺点就是图形没有按业务信息php,nginx,mysql......
和硬件信息network,cpu,hdd...
分类,都是混在一起的,不便于观察和查询。最后就开始重新写了个图形展现的模块,数据全部来自zabbix的数据库,死磕一段时间,基本把zabbix
数据库数据结构弄清楚了。
数据表分析
hosts表
有这几个字段需要注意
- hostid:每台主机唯一id标识
- host:主机名
- status:主机状态标识(为0则是你要找的主机,3表示的貌似是模板主机)
groups表
hosts_groups表
关联着上面的两张表,通过它可以由找到每个组的主机,或由主机id找到属于那个组。
items表
上面的三张表可以在主机和主机组之间来去自如。items表则记录着没台主机所有图形项目(比如一个网卡图,有流入和流出两根线,则这张图就有两个item)。
字段说明
- itemid:是每个绘图项目唯一标识
- hostid:每个主机的标识
- name:每个item的名字
- delay:数据采集间隔
- history:历史数据保存时间
- status:标识item的状态(0表示正常显示的item)
- units:保存item的单位
graphs_items表
关联着每幅图的item和图形id,简单的说就是告诉我们每台主机有多少幅图及每幅图上有哪些item。
graphs表
关联着图形id和图形的名字,还有其它一些zabbix绘图参数
history
history_text,history_uint有着一样的字段,存储着不同类型item的历史数据,最终1小时或者1天等短时间的绘图数据都从其中获取。每条记录由itemid,clock(时间戳形式,精确到秒),value,ns构成。
trends
trends_uint有有着同样的字段,储存着不同类型item的历史趋势数据,每隔一小时从历史数据中统计一次,并计算统计区间的平均值、最值。长时间区间的绘图数据的数据源。
最后还有坑
以上的这些表之间的关联关系弄明白后就可以绘图了,用zabbixapi
也是可以画图的。但是,应用和硬件的图分不开(ztree用zabbixapi来绘图的)。我是用Highcharts
这款插件绘图的,由于绘图方式已经脱离了zabbix图形组织方式,所以应用和硬件信息的图就比较容易分开了。
开发完成后用了一段时间发现Highcharts在前端绘图渲染时,如果单副图的数据过大(如3万左右的监控数据)会显示很慢,最后还是用RRDtool绘制的图形,RRDtool绘图不仅快而且美观,具体的效果可以参看 Zabbix与RRDtool绘图篇(6)_最终图形展示。