5 TimescaleDB 设置

概述

Zabbix支持TimescaleDB,这是一种基于PostgreSQL的数据库解决方案,能够自动将数据按时间分片存储,从而在大规模场景下实现更快的性能表现。

当前Zabbix proxy暂不支持TimescaleDB

本页说明可用于创建TimescaleDB数据库或从现有PostgreSQL表迁移至TimescaleDB。

配置

我们假设TimescaleDB扩展已安装在数据库服务器上(安装说明参见Timescale documentation)。

还需要通过执行以下命令为特定数据库启用TimescaleDB扩展:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

执行此命令需要数据库管理员权限。

如果使用非'public'的数据库模式,需在上述命令中添加SCHEMA子句。例如:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix

然后运行postgresql/timescaledb.sql脚本。对于新安装,必须在创建常规PostgreSQL数据库并初始化模式/数据后运行该脚本(参见database creation):

cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

在TimescaleDB版本2.9.0及更高版本上运行timescaledb.sql脚本时,请忽略有关未遵循最佳实践的警告信息。尽管出现此警告,配置仍将成功完成。

现有历史数据和趋势数据的迁移可能耗时较长。在迁移期间,Zabbix server和前端必须停止运行。

timescaledb.sql脚本设置以下管家参数:

  • 覆盖监控项历史数据保留周期
  • 覆盖监控项趋势数据保留周期

要为历史和趋势使用分区管家功能,必须同时启用这两个选项。也可以单独启用历史或趋势的覆盖功能。

对于PostgreSQL版本10.2或更高版本,以及TimescaleDB版本1.5或更高版本,timescaledb.sql脚本会设置两个额外参数:

  • 启用压缩功能
  • 压缩超过7天的记录

要成功通过管家清理压缩数据,必须同时启用覆盖监控项历史周期覆盖监控项趋势周期选项。 如果覆盖功能被禁用且表中存在压缩块,管家将不会从这些表中删除数据,并且会在管理界面的 管家服务System information部分显示关于配置错误的警告信息。

所有这些参数都可在安装后通过管理常规数据清理进行修改。

建议运行TimescaleDB提供的timescaledb-tune工具来优化postgresql.conf中的PostgreSQL配置参数。

TimescaleDB压缩

从Zabbix 5.0版本开始,针对PostgreSQL 10.2及以上版本和TimescaleDB 1.5及以上版本,支持对TimescaleDB管理的所有Zabbix表进行原生TimescaleDB压缩。在升级或迁移至TimescaleDB过程中,对大表的初始压缩可能需要较长时间。

请注意压缩功能仅在"timescale" Timescale社区许可证下支持,而不支持"apache" Apache 2.0许可证。从Zabbix 6.0.7开始,Zabbix会检测是否支持压缩。若不支持,将在Zabbix server日志中记录警告信息,且用户无法在前端启用压缩。

建议用户在使用压缩功能前,先通过Timescale documentation了解压缩相关内容。

需注意压缩功能存在以下限制:

  • 不允许对压缩块进行修改(插入、删除、更新)
  • 不允许对压缩表进行模式变更

压缩设置可在Zabbix前端的管理常规Housekeeping部分的历史和趋势数据压缩区块中进行调整。

参数 默认值 说明
Enable compression 启用 勾选或取消复选框不会立即激活/停用压缩。由于压缩由Housekeeper处理,变更将在最多2倍HousekeepingFrequency小时后生效(设置在zabbix_server.conf

禁用压缩后,落入压缩周期的新块将不会被压缩。但所有先前压缩的数据仍保持压缩状态。要解压先前压缩的块,请遵循Timescale documentation中的说明。

从支持TimescaleDB的旧版Zabbix升级时,压缩默认不会启用。
Compress records older than 7天 此参数不能小于7天。

由于压缩块的不可变性,所有晚于此值的延迟数据(如因proxy延迟的数据)将被丢弃。