Zabbix 容量规则

作为开源的企业级监控平台,Zabbix 有着先天的优势:

1、长期由官方提供免费的技术支持服务(亦可购买收费的高级服务

2、完全开源(如有自主的技术力量,可扩展性非常强)

3、可实现全栈级监控(从底层硬件、网络、存储,到虚拟化层、操作系统、中间件,以及最上层的应用和 API)

本文主要探讨 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% 的冗余量。