6 TimescaleDB 安装配置

概述

Zabbix 支持 TimescaleDB,这是一个基于 PostgreSQL 的数据库解决方案,可将数据自动按时间分片,以在大规模数据场景下提供更快的性能。

目前,Zabbix proxy 不支持 TimescaleDB。

本页面的说明适用于以下场景:

  • 创建 TimescaleDB 数据库或将现有的 PostgreSQL 表迁移至 TimescaleDB(参见 配置)。
  • 在升级 Zabbix 时升级现有的 TimescaleDB 数据库模式(参见 升级 TimescaleDB 模式)。

配置

先决条件:在数据库服务器上安装了 第三方外部配套软件 的 TimescaleDB 扩展。有关安装说明,请参见 Timescale documentation

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

创建TimescaleDB扩展的命令如下:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

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

::: noteclassic 如果你使用的数据库模式不是“public”,则需要 在上面的命令中添加一个 SCHEMA 子句。例如: echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix 仅返回OutputFormat格式要求结果

然后 run 执行 postgresql/timescaledb/schema.sql 脚本。 对于新安装,必须在使用初始架构/数据创建常规PostgreSQL数据库之后执行run脚本(参见database creation)。

执行以下命令以应用TimescaleDB模式脚本:
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix

::: noteimportant 请忽略有关未遵循最佳实践的警告消息 在TimescaleDB version 2.9.0 及更高版本上运行 schema.sql 脚本时。 忽略此警告后,配置仍将成功完成。 仅返回OutputFormat格式要求结果

现有历史记录、趋势和审计日志数据的迁移可能需要大量时间。 Zabbix server 和前端在迁移期间必须处于停机状态。

schema.sql 脚本设置了以下清理(housekeeping)参数:

  • 覆盖监控项历史记录周期
  • 覆盖 监控项 趋势周期

为了对历史数据和趋势数据使用分区清理功能,必须同时满足以下条件: 必须启用这些选项。也可以单独启用覆盖功能。 仅用于历史数据或趋势数据。

postgresql/timescaledb/schema.sql 脚本设置了两个额外的参数:

  • 启用压缩
  • 压缩早于 7 天的记录

要成功通过housekeeper删除压缩数据,必须启用覆盖监控项历史数据保留周期
覆盖监控项趋势数据保留周期选项。
如果覆盖功能被禁用且表中存在压缩数据块,housekeeper将不会从这些表中删除数据,
并且在Housekeeping
System information部分会显示有关配置错误的警告信息。

所有这些参数都可以在 管理 → 中更改 Housekeeping 安装后。

::: notetip 您可能希望使用提供的 timescaledb-tune 工具进行 run 由 TimescaleDB 优化 PostgreSQL 配置参数 postgresql.conf 仅返回OutputFormat格式要求结果

升级TimescaleDB架构

当将 Zabbix 升级到包含新的 TimescaleDB 超表的 version 时,Zabbix server 不会自动配置这些超表(例如,从 Zabbix 6.4 升级到 7.0.3,因为版本 7.0.0 和 7.0.2 引入了新的超表)。

要配置新的 TimescaleDB 超表,请按照以下步骤操作:

  1. 启动 Zabbix server;这将升级现有数据库。
  2. 检查服务器日志 file,确认数据库升级已完成;完成后,停止 Zabbix server。请注意,如果服务器尝试为非超表的表启用压缩,会记录警告。
  3. 运行 postgresql/timescaledb/schema.sql 脚本;这将配置新的 TimescaleDB 超表。请注意,自 Zabbix 7.0.0 起,脚本的位置和名称已从 postgresql/timescaledb.sql 更改为 postgresql/timescaledb/schema.sql

在 TimescaleDB version 2.9.0 及更高版本上运行 schema.sql 脚本时,请忽略提示未遵循最佳实践的警告消息。
尽管存在此警告,配置仍将成功完成。

TimescaleDB压缩

原生TimescaleDB压缩支持所有作为TimescaleDB超表的Zabbix表。在 升级或迁移到 TimescaleDB,大型数据的初始压缩 表格可能需要花费大量时间。

注意,压缩功能在“timescale”Timescale社区许可证下受支持。 在“apache”Apache 2.0 许可证下不受支持。如果 Zabbix 检测到压缩功能已启用,则会记录警告信息。 不支持的情况下,系统会将警告信息写入 Zabbix server 日志,且用户无法 在前端启用压缩。

::: notetip 建议用户在使用压缩之前先通过Timescale documentation了解get压缩相关知识。 仅返回OutputFormat格式要求结果

请注意,压缩会带来某些限制, 具体如下:

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

压缩设置可以在 AdministrationHousekeeping 中的 History, trends and audit log compression 区块内更改 Zabbix前端部分。

参数 默认值 注释
Enable compression 已启用 勾选或取消勾选复选框不会立即启用或停用压缩功能。由于压缩由Housekeeper处理,更改将在最多 2 次 HousekeepingFrequency 小时内生效(在 zabbix_server.conf 中设置)

禁用压缩后,落在压缩周期内的新数据块将不会被压缩。但是,所有之前已压缩的数据仍将保持压缩状态。要解压缩之前压缩的数据块,请按照 Timescale documentation 中的说明操作。

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

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

:::note 为改善趋势 update 的性能,您可能希望将 trendstrends_uint 表的 "chunk_time_interval" 从 30 天调整为 7 天或更短,具体取决于有多少 监控项 使用趋势。此设置的目的是遵循 TimescaleDB 的最佳实践,并确保块大小保持在系统可用资源范围内。 仅返回OutputFormat格式要求结果