Timezone inconsistency: Start Time column not converted to browser local time in v4 observations table

该报错通常是自托管 Langfuse 时,ClickHouse 等基础设施组件未运行在 UTC 时区,导致 v4 observations 表格中的 Start Time 列未正确转换到浏览器本地时区(表现为相差固定小时数,如 UTC+8 地区恰好慢 8 小时)。优先排查 ClickHouse 的服

快速结论:该报错通常是自托管 Langfuse 时,ClickHouse 等基础设施组件未运行在 UTC 时区,导致 v4 observations 表格中的 Start Time 列未正确转换到浏览器本地时区(表现为相差固定小时数,如 UTC+8 地区恰好慢 8 小时)。优先排查 ClickHouse 的服务器时区设置。

适用环境:Langfuse v4.9.0(自托管 Helm Chart 部署,dual-write 迁移模式),浏览器时区 Asia/Shanghai(UTC+8);由于该 Issue 最后被标记为 unconfirmed,实际环境适用范围较广,可参考本文排查。

最快修复方案:确认服务端所有组件(尤其是 ClickHouse 和 PostgreSQL)均运行在 UTC 时区。Issue 中用户将 ClickHouse 时区改为 UTC 后,时间显示即恢复正常。这是目前唯一被用户确认有效的处理方式。

注意事项:该方案是基于用户反馈的“环境排查”结果,Issue 本身被标记为 unconfirmed,且官方建议将所有服务端组件统一为 UTC;如果问题在时区全部为 UTC 后仍复现,应重新打开 Issue 并提供复现步骤。

问题场景

在自托管 Langfuse 环境中,从 v3.225.2 升级到 v4.9.0,并在 Helm Chart 中启用了 LANGFUSE_MIGRATION_V4_WRITE_MODE=dual 后,打开 Traces / Observations 页面时,表格中的 “Start Time” 列显示的时间与实际请求时间或图表统计时间相差固定小时数(如 UTC+8 地区慢 8 小时),而同一页面上的图表时间戳显示正常。

报错原文

Timezone inconsistency: Start Time column not converted to browser local time in v4 observations table

原因分析

可能原因:Langfuse 后端默认假设所有服务端组件(ClickHouse、PostgreSQL 等)均运行在 UTC 时区。当 ClickHouse 或 PostgreSQL 的服务器时区被设置为非 UTC(例如 Asia/Shanghai),或者容器时区通过 TZ 环境变量被覆盖时,后端在查询或渲染表格数据时可能对时间进行了错误的解释,导致表格列缺少 UTC→本地时区的转换;而图表或统计组件可能使用不同的时间处理逻辑(如前端格式化),因此显示正常。

另一个可能原因:表格组件(Table Renderer)在 dual-write 模式下读取旧版 v3 数据时,使用了不同的时间解析路径,导致时间未按浏览器本地时区转换。

环境排查

  • 确认 ClickHouse 时区:执行 SELECT timezone(),结果应为 UTC
  • 确认 PostgreSQL 时区:执行 SHOW timezone,结果应为 UTC
  • 检查 Helm Chart 中是否设置了 TZ 环境变量(如 Asia/Shanghai),应将其移除或改为 UTC
  • 检查所有容器(包括 worker、web 服务)的系统时区设置。
  • 确认浏览器时区为预期值(如 Asia/Shanghai),前端应正常转换,无需额外调整。

解决步骤

  1. 进入 ClickHouse 容器,执行 SELECT timezone() 检查当前时区。
  2. 如果 ClickHouse 时区不是 UTC,修改 ClickHouse 配置(例如删除或注释掉 <timezone> 配置项,或在启动参数中指定 --timezone=UTC),然后重启 ClickHouse 服务。
  3. 进入 PostgreSQL 容器,执行 SHOW timezone,如果不是 UTC,修改 PostgreSQL 配置文件(如 postgresql.conf 中的 timezone 参数)或通过 SET timezone = 'UTC' 进行修正。
  4. 检查 Helm Chart 的 additionalEnv 配置,移除或修改 TZ 环境变量(如设置为 UTC),使所有服务端组件运行在 UTC 时区。
  5. 清理浏览器缓存(或强制刷新),重新加载 Langfuse UI,检查 Traces / Observations 表格中的 Start Time 列是否已与本地时间一致。

验证方法

重新打开 Traces 或 Observations 页面,确认 “Start Time” 列显示的时间与浏览器本地时间一致,且与同一页面的图表/统计时间戳匹配。如果之前相差 8 小时(Asia/Shanghai 场景),修复后应不再出现该偏差。

参考来源

langfuse/langfuse #16024

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20578

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注