Sentry迁移至新K8s集群后出现Clickhouse DB::Exception报错求助
问题根因
三类报错均由Sentry版本升级+Clickhouse跨版本迁移兼容性问题导致:
- Sentry 20.12.1内置Clickhouse版本为20.x分支,Sentry 21.5.1默认绑定Clickhouse为21.3+分支,两个大版本默认压缩算法、网络传输协议、字段长度限制存在差异,直接跨版本恢复备份数据会触发
Data compressed with different methods报错。 Too large string size报错是由于新集群Clickhouse默认max_string_size参数阈值低于Sentry存储事件字段的实际需求,旧数据中的长字段超出默认限制。Empty query报错是新旧Sentry版本对应的Clickhouse表结构存在新增字段、索引变更,备份恢复后未对齐表结构,导致Sentry生成的查询语句无法正常执行。
解决方案
- 优先对齐Clickhouse版本:确认旧集群Sentry绑定的Clickhouse具体版本,新集群先部署同版本Clickhouse完成数据恢复,后续再跟随Sentry官方升级流程逐步迭代Clickhouse版本,避免跨大版本直接迁移数据。
- 统一配置参数:在Clickhouse的
config.xml中新增如下配置,对齐旧版本的压缩策略与字段长度限制:
<!-- 放大字符串最大长度限制到10M,适配Sentry事件存储需求 --> <max_string_size>10485760</max_string_size> <!-- 统一压缩算法为旧版本默认的lz4 --> <compression> <case> <min_part_size>10485760</min_part_size> <min_part_size_ratio>0.01</min_part_size_ratio> <method>lz4</method> </case> </compression>
- 对齐Sentry表结构:数据恢复完成后执行
sentry upgrade命令,自动补全PostgreSQL与Clickhouse中新增的字段、索引,修复查询语句不兼容问题。 - 强制重压缩异常数据:如果仍存在压缩算法相关报错,对异常表执行
OPTIMIZE TABLE [对应表名] FINAL,强制使用当前配置重新压缩所有存量数据。 - 验证恢复:执行查询验证Clickhouse访问正常后,重启Sentry的snuba、worker服务即可。
内容的提问来源于stack exchange,提问作者nopTBeuH
相关产品推荐
相关产品推荐

