谈谈Zabbix的容量规划
Shawn Cai
作为开源的企业级监控平台,Zabbix有着先天的优势:
1、长期由官方提供免费的技术支持服务(亦可购买收费的高级服务)
2、完全开源(如有自主的技术力量,可扩展性非常强)
3、可实现全栈级监控(从底层硬件、网络、存储,到虚拟化层、操作系统、中间件,以及最上层的应用和API)
同样的,由于其是开源产品,同时Zabbix在中国的推广刚刚起步,实际部署中会遇到很多“坑”。
本文主要探讨Zabbix部署前的容量规划。
CPU
根据监控参数及选择的数据库引擎,Zabbix,特别是Zabbix数据库,可能需要大量的CPU资源
内存和磁盘
Zabbix主要是基于Linux系统的软件,因此不需要占用过多的内存和磁盘。刚开始使用Zabbix,建议128MB物理内存和256MB可用磁盘空间。
然而, 具体需要的内存大小和磁盘空间要根据主机数量和监控参数而定。如果你计划对监控的参数进行长期保存,你应该考虑至少在数据库中预留几个GB的空间,以用来保留历史数据。 每个Zabbix的守护进程需要与数据库服务器建立多个连接。分配给连接的内存数量,取决于数据库引擎的配置。
当然,你使用的内存越多,你的数据库和Zabbix工作得越快!
数据库容量
Zabbix配置数据需要保留固定的磁盘空间,而且这个空间不会随着Zabbix系统的扩容不会增长太多。
Zabbix数据库容量主要依赖于下列这些参数,这些参数也决定了存储历史数据所需要的空间:
每秒处理值的数量
(Number of processed values per second)
这个参数是指每秒种Zabbix server收到的新值数量的平均数。比如,如果我们有3000个监控项(item),监控周期是60s,经计算所得,每秒处理值的数量为3000/60 = 50.
这意味着每秒钟有50个新值写入Zabbix数据库。
历史数据的回收清理设置
(History-Housekeeper)
Zabbix会在一个固定周期内保存收到的值。正常情况下保留数周或者数月。每一个新收到的值会占用一定数量的磁盘空间以存放数据和索引。
所以,如果我们每秒钟收到50个值,且希望保留30天的历史数据,值的总数将大约在 (30*24*3600)* 50 = 129,600,000,即大约130M个值。
根据所使用的数据库引擎,以及收到值的类型【浮点(floats),整型(integers),字符串(strings),日志文件(log files)等】,单个值的磁盘使用量从40字节到数百个字节不等。一般而言,数值型(Numeric)的监控项占用大约90字节。 按之前的例子, 这意味着130M个值需要占用 130M * 90 bytes = 10.9GB 的磁盘空间。
文本(text)/日志(log)类型的监控项值的大小无法准确地预测,但你可以按每个值大约500字节来计算。
趋势数据的回收清理设置
(Trends-Housekeeper)
Zabbix为trends表中的每个监控项的值,保留一组数据:一个小时的最大值/最小值/平均值/数量。这些数据用于趋势图表和历史图表的展现。用户无法自定义这一小时的保留周期。
根据数据库的类型,Zabbix数据库需要为每组值总共占用约90字节的空间。 如果你需要保留趋势数据5年,那么3000个监控项值,每年需要 3000*24*365* 90 = 2.2GB 的空间 , 即5年需要 11GB 的空间。
事件数据的回收清理设置
(Events-Housekeeper)
每个Zabbix事件需要大约170字节的磁盘空间。很难估计Zabbix每天生成的事件数量。最糟糕的情况下,我们可能需要假设Zabbix每秒会生成一个事件。
这意味着,如果我们需要保留3年的事件,需要3*365*24*3600* 170 = 15GB的磁盘空间。
下面列出了用于计算Zabbix系统所需磁盘空间的计算公式:
范围所需磁盘空间的计算公式 (单位:字节)
Zabbix配置文件固定大小。一般10MB或更少。
历史(History)days*(items/refresh rate)*24*3600*bytes
items : 监控项数量
days : 保留历史数据的天数
refresh rate : 监控项平均轮询时间
bytes : 保留单个值所需要占用的字节数,依赖于数据库引擎,一般大约90字节。
趋势(Trends)days*(items/3600)*24*3600*bytes
items : 监控项数量
days : 保留趋势数据的天数
bytes : 保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,一般大约90字节。
事件(Events)days*events*24*3600*bytes
events : 每秒事件数。最糟糕的情况下,每秒一(1)个事件。
days : 保留事件数据的天数
bytes : 保留单个事件所需要占用的字节数,依赖于数据库引擎,一般大约90字节。
根据现实环境中使用的MySQL后端数据库的统计,数值型(Numeric)监控项的值平均占用约90个字节,事件(Events)平均占用约170个字节。
因此,所需要的磁盘总空间按下列方法计算:
配置(Configuration) + 历史(History) + 趋势(Trends) + 事件(Events)
安装完Zabbix,磁盘空间不会立即被分配。数据库大小根据回收清理(housekeeper)设置,在某些时间点增长或停止增长。
根据上述公式,可计算出Zabbix需要使用的空间。同时,考虑到后续的扩容,建议预留至少20%的冗余量。