6 TimescaleDB 配置

概览

Zabbix 支持 TimescaleDB,这是一种基于 PostgreSQL 的数据库解决方案,可自动将数据分割为基于时间的块,以支持大规模下的更快性能。

目前,Zabbix proxy 不支持 TimescaleDB。

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

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

配置

先决条件:在数据库服务器上安装了支持版本的TimescaleDB扩展。有关安装说明,请参阅Timescale文档)。

通过执行以下命令启用特定数据库的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/schema.sql脚本。 对于新安装,必须在使用初始模式/数据创建常规PostgreSQL数据库后运行脚本(参见数据库创建)。

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

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

现有历史记录、趋势和审计日志数据的迁移可能需要很长时间。 Zabbix服务器和前端在迁移期间必须关闭。

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

  • 覆写监控项历史周期
  • 覆写监控项趋势周期

为了使用历史记录和趋势的分区式管家,必须启用这两个选项。也可以单独启用覆写,仅用于历史记录或仅用于趋势。

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

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

仅当同时启用 覆盖监控项历史周期覆盖监控项趋势周期 选项时才能使用压缩。 如果覆盖被禁用并且表具有压缩块,管家将不会从这些表中删除数据,并且有关不正确配置的警告将显示在 管家 和 [系统信息] (/manual/web_interface/frontend_sections/reports/status_of_zabbix) 部分。

安装后,所有这些参数都可以在 管理通用管家 中更改。

您可能需要运行 TimescaleDB 提供的 timescaledb-tune 工具来优化 postgresql.conf 中的 PostgreSQL 配置参数。

升级TimescaleDB架构

在将Zabbix升级到包含新的TimescaleDB hypertables的版本时,Zabbix服务器不会自动配置这些hypertables(例如,从Zabbix 6.4升级到7.0.3时,因为7.0.0和7.0.2版本引入了新的hypertables)。

要配置新的TimescaleDB hypertables,请遵循以下步骤:

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

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

TimescaleDB压缩

TimescaleDB原生压缩支持所有Zabbix表格,这些表格是TimescaleDB hypertables。在升级或迁移至TimescaleDB期间,大型表格的初始压缩可能需要大量时间。

请注意,压缩在"timescale" Timescale Community许可证下得到支持,而在"apache" Apache 2.0许可证下不支持。如果Zabbix检测到不支持压缩,则会在Zabbix server日志中写入警告消息,用户无法在前端启用压缩。

建议用户在使用压缩前,熟悉Timescale文档中的压缩相关内容。

请注意,压缩施加了某些限制,具体如下:

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

可以在Zabbix前端的AdministrationHousekeeping部分的历史记录、趋势和审核日志压缩块中更改压缩设置。

参数 默认值 注释
启用压缩 启用 勾选或取消勾选复选框不会立即激活/停用压缩。因为压缩由Housekeeper处理,更改将在最多2倍HousekeepingFrequency小时后生效(在zabbix_server.conf中设置)

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

从支持TimescaleDB的Zabbix旧版本升级时,默认不会启用压缩。
压缩超过以下时间的记录 7天 此参数不能少于7天。

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

为了提高趋势更新性能,您可能需要将trendstrends_uint表格的"chunk_time_interval"从30天降低至7天或更少,具体取决于使用趋势的监控项数量。此设置的目的是遵循TimescaleDB的最佳实践,确保块大小保持在系统可用资源范围内。