Final migration & trace I/O backfill report · 2026-08-31

Langfuse open-design
数据迁移与 Trace I/O 补齐
最终报告

Langfuse Cloud 数据经 R2 安全快照迁移至 self-hosted Langfuse。原迁移完成后发现 trace-level input/output 未随 observation 数据呈现,后续已通过独立全量流水线补齐并完成尾部修复。

迁移与 Trace I/O 补齐均已完成 Cloud → R2 → Self-hosted 2,312,866 Traces 全部有终态 报告时间均为北京时间
Traces
2,312,866
迁移范围内的唯一 Trace
Observations
49,747,793
Span / Event / Generation 等观测记录
源数据逻辑体积
903.8 GB
R2 压缩后 141.5 GB
最终收口
08-31
原迁移 08-24 完成;Trace I/O 于 08-31 收口

迁移范围

源项目和目标项目固定;未跨项目、未扩大时间范围

数据覆盖时间

开始
2026-05-01 08:00:00
结束
2026-08-05 00:43:00
覆盖时长
95 天 16 小时 43 分钟
迁移路径
Langfuse Cloud → Cloudflare R2 → Self-hosted Langfuse

业务对象

49.75 M

观测记录,归属于 2.31 M 条 Trace;另迁移 Scores、Datasets、Dataset Items 与 Runs。

数据量汇总

十进制单位:1 GB = 10⁹ bytes

传输与存储体积

压缩比 / 体积下降6.39× / 84.3%

已验证业务对象

唯一 Trace2,312,866
Observation 记录49,747,793
Scores(已迁移 / 源清单)6,141 / 6,362
Datasets3
Dataset Items564
Dataset Runs / Run Items1 / 3

完整迁移与修复过程

原迁移于 08-24 通过验证;后续 Trace I/O 补齐于 08-31 收口

数据快照
从 Cloud 读取固定时间范围,压缩写入 R2;逐对象记录数量、大小与 SHA-256,支持断点续传。
6天 20小时08-05 00:54 → 08-11 21:42
全量导入
从 R2 流式写入 self-hosted Langfuse;使用稳定 ID 映射、持久化进度与失败后安全恢复。
7天 12小时08-11 11:01 → 08-18 23:20
缺口审计与补齐
发现目标端曾因 ClickHouse 磁盘耗尽丢弃异步任务;精确识别并仅重放确认缺失的 4,517,839 条记录。
2天 15小时08-18 23:20 → 08-21 14:39
最终验证
核验 Observation 持久化、Score 完整字段、Dataset 资源、时间边界样本、幂等性与源快照闭合。
2天 21小时08-21 14:39 → 08-24 11:49
Trace I/O 问题确认
原报告完成后,人工抽查发现 self-hosted Trace 列表与详情缺少 trace-level input/output;observations、scores 和关联关系仍在,修复范围固定为 2,312,866 条 Trace。
问题定界08-24 · 原报告后
Canary 与写入安全门
以小批量 export → import → readback 验证原 timestamp、稳定 ID 映射、I/O 与保护字段;只补空值,目标非空冲突禁止覆盖。
3 / 3 durable生产启动前
Trace I/O 全量流水线
按 Export → Import → Verify → Import2 → Verify2 运行;R2 sidecar 不可覆盖,SQLite checkpoint 支持恢复,全量 Verify 核验每条 sidecar Trace 的 I/O 与保护字段。
2,297 / 2,29708-24 → 08-30
尾部修补与最终收口
修复 1 条列表导出遗漏及 11 条合法 0/false 被 ingestion truthy 逻辑忽略的问题;延迟 exact readback 全部通过,47 条源端不存在与 28 条 name-only limitation 明确登记。
12 / 12 durable08-31 · 最终完成

迁移验证结果

完成判定不依赖“请求已接收”,而依赖目标端可读、可核对的最终状态

导入范围完整

通过
49,747,793 / 49,747,793

全部导出记录均进入完成态,无待处理数据、无未决写入。

export/manifest.json + import/stream_checkpoint.json

已识别缺口全部补齐

通过
4,517,839 / 4,517,839

生产 ClickHouse 最终查询:全部可见;0 条仅原始行、0 条缺失、0 条未知、0 个查询错误。

post-replay-verification/disposition.json

字段与关联关系

通过
2 轮 · 381 条 · 28 Traces

对固定边界样本核验 ID、Trace、Parent、时间戳、类型与源 metadata;差异 0,验证过程写入 0。

final-audit/t0_overlap_report.json

Scores 与 Dataset 资源

通过
6,141 Scores · 571 Resources

逐条读取并进行语义核验:0 待确认、0 缺口、0 字段不一致;571 个 Dataset 相关资源全部可读。

score_repair_verify_report.json + resource_verify_report.json

重试与重复写入安全

通过
23,296 / 23,296 唯一请求

补发目标 ID 唯一、请求指纹唯一、待处理 0;一次可恢复失败后从安全进度继续并正常结束。

final-audit/observation_final_gates_report.json

最终完成门

通过
MIGRATION AUDIT PASSED

原迁移的项目身份、Observation、Score、Dataset 资源、源快照边界、时间边界和幂等性全部闭合。

final-audit/final_eag_report.json · 2026-08-24 11:49:48

Trace I/O 固定集合闭合

通过
2,312,866 / 2,312,866

2,312,818 条 sidecar Trace 全部 terminal;另有 1 条列表遗漏已补齐,47 条源 Trace 不存在已明确 disposition。普通 gap、冲突与待处理均为 0。

trace-io-pipeline/pipeline.sqlite3 + trace-io-tail-repair/tail.sqlite3

Trace I/O 尾部修补

通过
12 / 12 durable

1 条 export omission 与 11 条 falsy I/O 均已修复;延迟 exact readback:11/11 I/O 匹配、11/11 protected hash 不变。

repair_trace_io_tail.py + delayed exact readback · 2026-08-31

已登记边界

以下项目已明确处理方式,不是待执行任务

1
221 条 Score 未迁移

它们引用的 Trace 不在本次固定数据范围内。为避免制造错误关联,保留为明确的不支持项;其余 6,141 条全部通过核验。

2
52 条重复 Observation ID 按首个版本保留

源数据中出现同一 ID 对应多个业务版本。目标端单一 ID 无法同时表达多个版本,因此按时间顺序保留首个版本并留有审计记录。

3
部分 Score 审计属性无法由公开 API 还原

源创建时间以及 2 条人工标注的原作者身份无法由目标端公开 API 指定;Score 值、名称、类型、配置、注释和 metadata 已核验。

4
Cloud 的少量派生展示字段会动态变化

重复读取时对象身份和版本均稳定,变化仅发生在系统动态生成的附件/制品摘要字段。迁移以不可变 R2 快照为准,不代表数据缺失。

5
47 条 Trace 的源端权威记录已不存在

它们在 ID map 和 observation root 中有历史证据,但两轮 source exact 读取均不存在。为避免从 observation 伪造 trace-level I/O,明确登记为 source_trace_unavailable。

6
28 条已落库 Trace 保留目标端非空 name

Langfuse 对已 ingestion Trace 的 name 不能可靠更新;这些记录的 I/O 和所有非 name 验收门均通过,登记为 name-only limitation,不影响 input/output 可见性。

结论:迁移及 Trace I/O 修复全部完成

固定范围的数据已从 Langfuse Cloud 安全转移到 self-hosted Langfuse;原迁移持久化缺口与后续发现的 trace-level input/output 缺失均已处理。当前无 pending、inflight、普通 verification gap、目标冲突或需要继续补发的数据。

FINAL
VERIFIED