Zabbix数据库表浅析

缘起

老大说zabbix图形展示没有cacti漂亮,将zabbix的图形插件ztree上面的展示图改成和cacti展现形式差不多的样子(其实就是稍微改了改ztree插件的php代码和css样式),效果如下:


图形很快就改好了,但是有个大的缺点就是图形没有按业务信息php,nginx,mysql......和硬件信息network,cpu,hdd...分类,都是混在一起的,不便于观察和查询。最后就开始重新写了个图形展现的模块,数据全部来自zabbix的数据库,死磕一段时间,基本把zabbix数据库数据结构弄清楚了。

数据表分析
hosts表

有这几个字段需要注意

  • hostid:每台主机唯一id标识
  • host:主机名
  • status:主机状态标识(为0则是你要找的主机,3表示的貌似是模板主机)

zabbix02

groups表

zabbix中所有组和组id
zabbix03

hosts_groups表

关联着上面的两张表,通过它可以由找到每个组的主机,或由主机id找到属于那个组。
zabbix04

items表

上面的三张表可以在主机和主机组之间来去自如。items表则记录着没台主机所有图形项目(比如一个网卡图,有流入和流出两根线,则这张图就有两个item)。
字段说明

  • itemid:是每个绘图项目唯一标识
  • hostid:每个主机的标识
  • name:每个item的名字
  • delay:数据采集间隔
  • history:历史数据保存时间
  • status:标识item的状态(0表示正常显示的item)
  • units:保存item的单位

zabbix05

graphs_items表

关联着每幅图的item和图形id,简单的说就是告诉我们每台主机有多少幅图及每幅图上有哪些item。
zabbix06

graphs表

关联着图形id和图形的名字,还有其它一些zabbix绘图参数
zabbix07

history

history_text,history_uint有着一样的字段,存储着不同类型item的历史数据,最终1小时或者1天等短时间的绘图数据都从其中获取。每条记录由itemid,clock(时间戳形式,精确到秒),value,ns构成。
zabbix08

trends_uint有有着同样的字段,储存着不同类型item的历史趋势数据,每隔一小时从历史数据中统计一次,并计算统计区间的平均值、最值。长时间区间的绘图数据的数据源。
zabbix09

最后还有坑

以上的这些表之间的关联关系弄明白后就可以绘图了,用zabbixapi也是可以画图的。但是,应用和硬件的图分不开(ztree用zabbixapi来绘图的)。我是用Highcharts这款插件绘图的,由于绘图方式已经脱离了zabbix图形组织方式,所以应用和硬件信息的图就比较容易分开了。
zabbix10
zabbix11
开发完成后用了一段时间发现Highcharts在前端绘图渲染时,如果单副图的数据过大(如3万左右的监控数据)会显示很慢,最后还是用RRDtool绘制的图形,RRDtool绘图不仅快而且美观,具体的效果可以参看 Zabbix与RRDtool绘图篇(6)_最终图形展示

----------------本文结束 感谢阅读----------------