7 TimescaleDB 设置
概述
Zabbix 支持 TimescaleDB,这是一种基于 PostgreSQL 的数据库解决方案,可自动按时间将数据分区为多个块,从而在大规模场景下提供更快的性能。
目前,Zabbix proxy 不支持 TimescaleDB。
本页中的说明可用于以下场景:
- 创建 TimescaleDB 数据库,或将现有 PostgreSQL 表迁移到 TimescaleDB(请参见配置)。
- 在升级 Zabbix 时升级现有 TimescaleDB 数据库架构(请参见升级 TimescaleDB 架构)。
配置
前提条件:数据库服务器上已安装受支持版本的 TimescaleDB 扩展。 安装说明请参见 TimescaleDB documentation。
在安装 TimescaleDB 之前,请先从官方 PostgreSQL 仓库安装受支持的 PostgreSQL 版本。
通过执行以下命令,为指定数据库启用 TimescaleDB 扩展:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
运行此命令需要数据库管理员权限。
如果您使用的数据库 schema 不是“public”,则需要在上述命令中添加 SCHEMA 子句。
例如:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix
然后运行 postgresql/timescaledb/schema.sql 脚本。
对于全新安装,必须在使用初始 schema/数据创建常规 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 脚本会设置以下 housekeeping 参数:
- 覆盖监控项历史记录保留期
- 覆盖监控项趋势记录保留期
要对历史数据和趋势数据使用分区 housekeeping,必须同时启用这两个选项。 也可以单独启用覆盖,例如仅对历史数据或仅对趋势数据启用。
对于 PostgreSQL 和 TimescaleDB,postgresql/timescaledb/schema.sql 脚本还会设置另外两个参数:
- 启用压缩
- 压缩 7 天前的记录
要使 housekeeper 成功删除压缩数据,必须同时启用 覆盖监控项历史数据保留期 和 覆盖监控项趋势数据保留期 选项。
如果未启用覆盖且表中存在压缩块,housekeeper 将不会删除这些表中的数据,并且会在 Housekeeping 和 System information 部分显示有关配置不正确的警告。
所有这些参数都可以在安装完成后于 Administration > Housekeeping 中更改。
您可能需要运行 TimescaleDB 提供的 timescaledb-tune 工具,以优化 postgresql.conf 中的 PostgreSQL 配置参数。
升级 TimescaleDB schema
当将 Zabbix 升级到包含新的 TimescaleDB hypertable 的版本时,Zabbix 服务器不会自动配置这些 hypertable(例如,从 Zabbix 6.4 升级到 8.0 时,由于 7.0.0 和 7.0.2 版本引入了新的 hypertable)。
要配置新的 TimescaleDB hypertable,请按以下步骤操作:
- 启动 Zabbix 服务器;这将升级现有数据库。
- 检查服务器日志文件,确认数据库升级已完成;完成后,停止 Zabbix 服务器。
请注意,如果服务器尝试为不是 hypertable 的表启用压缩,则会记录一条警告。 - 运行
postgresql/timescaledb/schema.sql脚本;这将配置新的 TimescaleDB hypertable。
请注意,自 Zabbix 7.0.0 起,该脚本的位置和名称已从postgresql/timescaledb.sql更改为postgresql/timescaledb/schema.sql。
在 TimescaleDB 2.9.0 及更高版本上运行 schema.sql 脚本时,如果出现提示未遵循最佳实践的警告消息,请忽略。
无论是否出现此警告,配置都将成功完成。
TimescaleDB 压缩
所有属于 TimescaleDB hypertable 的 Zabbix 表都支持原生 TimescaleDB 压缩。 在升级到 TimescaleDB 或迁移到 TimescaleDB 期间,大型表的初始压缩可能会花费较长时间。
请注意,压缩功能在 “timescale” Timescale Community 许可证下受支持,而在 “apache” Apache 2.0 许可证下不受支持。 如果 Zabbix 检测到不支持压缩,则会在 Zabbix 服务器日志中写入一条警告消息,并且用户无法在前端中启用压缩。
建议用户在使用压缩之前,先通过 TimescaleDB documentation 了解压缩功能。
请注意,压缩会带来一些限制,具体包括:
- 不允许修改已压缩的 chunk(插入、删除、更新)
- 不允许对已压缩的表进行 schema 更改。
可以在 Zabbix 前端的 Administration > Housekeeping 部分中的 History, trends and audit log compression 区块更改压缩设置。
| Parameter | Default | Comments |
|---|---|---|
| Enable compression | Enabled | 选中或取消选中该复选框不会立即启用/禁用压缩。由于压缩由 Housekeeper 处理,更改最多会在 2 倍 HousekeepingFrequency 小时内生效(在 zabbix_server.conf 中设置)禁用压缩后,落入压缩周期的新 chunk 将不会被压缩。但是,所有先前已压缩的数据将保持压缩状态。要解压之前已压缩的 chunk,请按照 TimescaleDB documentation 中的说明操作。 从较旧的支持 TimescaleDB 的 Zabbix 版本升级时,默认不会启用压缩。 |
| Compress records older than | 7d | 该参数不能小于 7 天。 由于已压缩 chunk 的不可变性,所有早于该值的延迟数据(例如由 proxy 延迟的数据)都将被丢弃。 |
:::note
为了获得更好的趋势更新性能,你可能需要根据使用 trends 的监控项数量,将 trends 和 trends_uint 表的 “chunk_time_interval” 从 30 天降低到 7 天或更短。
此设置的目的是遵循 TimescaleDB 的最佳实践,并确保 chunk 大小保持在系统可用资源范围内。
:::