Infisical 审计日志达到数亿行导致查询变慢时,如何切换 ClickHouse 存储?
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
自托管 Infisical 部署运行一段时间后,默认存储在 PostgreSQL 中的审计日志表可能增长到数亿行,查询性能随之下降。Infisical 文档明确说明:当审计日志表增长到上亿行(hundreds of millions of rows)时,应考虑配置 ClickHouse 作为审计日志的存储后端。官方建议这条路径仅适用于审计日志达到 3 亿行以上的部署,并且只针对自托管(self-hosted)环境。
按 ClickHouse setup 指南 操作,配置完成后审计日志的写入和读取都会从 PostgreSQL 切换到 ClickHouse,无需额外开关。
切换前需要准备什么
文档列出的前置条件:
- 一个正在运行的 ClickHouse 实例(安装方式参考 ClickHouse 官方安装文档,项目文档未提供具体安装命令);
- 在 ClickHouse 中为审计日志创建一个数据库;
- Infisical 后端到 ClickHouse 实例之间的网络连通性。
另外注意一个前提:启用 ClickHouse 是硬切换(hard cutover)。一旦生效,所有审计日志读取立即路由到 ClickHouse,应用不再查询 PostgreSQL 中的审计日志。尚未迁移到 ClickHouse 的历史数据在 UI 中将不可见——数据并没有从 PostgreSQL 删除,只是启用 ClickHouse 期间应用不会读它。因此已有大量历史日志的部署,必须先完成历史数据搬迁再切换。
配置 CLICKHOUSE_URL 完成切换
在 Infisical 后端配置中设置CLICKHOUSE_URL环境变量:
CLICKHOUSE_URL=http(s)://username:password@host:port/database文档给出的示例:
CLICKHOUSE_URL=http://infisical:mypassword@clickhouse.internal:8123/audit_logs其中username、password、host、port、database替换为你自己的 ClickHouse 凭据、地址和前置条件中创建的数据库名。http(s)表示协议按实际实例选择。
设置该 URL 后,ClickHouse 审计日志写入默认就是启用状态,不需要再配置其他变量。首次启动时,Infisical 会自动创建 ClickHouse 中的审计日志表(默认表名audit_logs),如果表已存在则跳过。
可选:调整表名、表引擎和插入参数
如果默认值不满足需求,可按 环境变量参考 中的 ClickHouse 章节调整以下变量:
CLICKHOUSE_AUDIT_LOG_ENABLED:控制是否向 ClickHouse 写入审计日志,设置CLICKHOUSE_URL后默认即为true;CLICKHOUSE_AUDIT_LOG_TABLE_NAME:审计日志表名,默认audit_logs。例如改为:CLICKHOUSE_AUDIT_LOG_TABLE_NAME=custom_audit_logsCLICKHOUSE_AUDIT_LOG_ENGINE:建表时使用的 ClickHouse 引擎,默认ReplacingMergeTree。文档示例中还给出了 Replicated 集群场景的写法:SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}');CLICKHOUSE_AUDIT_LOG_INSERT_SETTINGS:以 JSON 字符串形式的插入设置,默认为{"async_insert":1,"wait_for_async_insert":0,"date_time_input_format":"best_effort"};DISABLE_POSTGRES_AUDIT_LOG_STORAGE:默认false。设为true后审计日志不再写入 PostgreSQL,但仍会写入已配置的 ClickHouse 和审计日志流(audit log streams)。
已有部署的迁移步骤
文档给出三阶段迁移策略:
- 阶段 1 — 迁移历史数据(推荐):切换前,先把 PostgreSQL 中已有的审计日志批量导入 ClickHouse,避免切换后出现历史日志在 UI 中不可见的缺口。
- 阶段 2 — 启用 ClickHouse:设置
CLICKHOUSE_URL。此后新审计日志写入 ClickHouse,所有查询只从 ClickHouse 读取,PostgreSQL 的审计日志写入自动停止。 - 阶段 3 — 清理(可选):确认 ClickHouse 运行正常后,再清理 PostgreSQL 中的旧审计日志数据。
写入路径方面,文档说明:事件先进入 Redis stream 排队,由后台 worker 每 5 秒批量插入一次 ClickHouse;读取也自动路由到 ClickHouse。也就是说切换不需要改任何业务代码或路由配置,配置生效即完成。
验证切换是否生效
按文档给出的验证方法:
- 在 Infisical 中执行一个会记录审计日志的操作,例如读取一个 secret;
- 直接查询 ClickHouse,确认对应表中正在插入新行。
如果 ClickHouse 中能看到新写入的行,说明集成工作正常。注意文档没有给出固定的验证 SQL 或预期行数,用你常用的查询方式检查表中新增行即可。
限制与边界
- 该方案面向自托管、审计日志量级达到 3 亿行以上的部署;文档没有承诺对更小规模部署的性能收益,不建议为小规模部署引入额外组件。
- 切换是硬切换:未先迁移的历史数据在 UI 中不可见(数据仍保留在 PostgreSQL,应用只是不读它),这是文档中最需要提前规划的点。
- 审计日志本身是付费功能,自托管使用需要企业许可,详见 审计日志概述。
- 完整变量清单(插入设置、表引擎、禁用 PostgreSQL 存储等)以 环境变量的 ClickHouse (optional) 章节 为准。
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考