为什么要二次开发zabbix的图形展示这块,并不是吃饱了没事干,其实写第一个运维平台的时候是用PHP组织数据送到WEB端然后由 Highcharts渲染而成,具体效果可以参看运维平台开发的第一个版本,效果还令人满意,重要的是将服务器的硬件监控图形和业务监控图形分开了。

再次开发zabbix的图形展示这块主要是想用RRDtool将其做的更好,zabbix的报警是很优秀的。图形展示可能就不能和报警的功能相媲美了,可能原因有下:

1、数据量太大,MySQL数据库扛不住。如果zabbix的采样间隔是1分钟,一张图上有24item(24条线,比如CPU的负载图)。历史数 据保存7天,数据库光这张图就得有241920条数据。没错这就是一个CPU的负载图保存7天历史记录所需的数据库空间,且不包括保存1年或2年的趋势数 据(zabbix的趋势数据1小时运算保存一次)。可能有点明白nagios只做报警不做数据图形展示(三方插件可以,底层用的是RRDtool)

2、即使优化数据库,分库分表神马的。第一代价有点大,第二如果存放监控数据的库达到500GB时怎么办,查询速度肯定是个瓶颈,当然是土豪用SSD做RAID的大概不用考虑这些问题。

怎么干

思路其实很清晰的:

第一步:从Zabbix的数据库取数据,调用Zabbix的api可以很容易的取到一个主机所有图形及图形items的数据。
第二步:用RRDtool绘图工具,将每台主机的每幅图单独存放为一个数据库文件。
第三部:参照cacti的颜色方案,定义不同监控项的颜色模板和绘图类型的模板
第四部:用RRDtool将图形按指定的模板在Django上面展现出来(没错,我这次写的运维平台后端用的是Django)

说的倒是很简单,还有很多轮子要造。路漫漫其修远兮,吾将上下求索!

本系列文章摘自于小马博客