bug: Receiving errors from web server `Operation attempted on ended Span` from missing traces

用户通过 Helm chart 部署 Langfuse POC,发送 traces 初时成功,随后在 Web 实例(K8s)上持续出现 Operation attempted on ended Span 错误,且 traces 在 ClickHouse 或 S3 中丢失。同时,Jupyter not

bug: Receiving errors from web server `Operation attempted on ended Span` from missing traces

bug: Receiving errors from web server Operation attempted on ended Span from missing traces

快速结论:该报错通常出现在自托管 Langfuse 并启用 OpenTelemetry 自动检测时,因为 AWS SDK 的检测工具与 S3 存储后端签名计算产生冲突。优先排查是否开启了 AWS SDK 的 OpenTelemetry 自动检测,并尝试通过环境变量禁用它。

问题场景

用户通过 Helm chart 部署 Langfuse POC,发送 traces 初时成功,随后在 Web 实例(K8s)上持续出现 Operation attempted on ended Span 错误,且 traces 在 ClickHouse 或 S3 中丢失。同时,Jupyter notebook 中运行 Python SDK 示例时,OTLP trace 导出器报告 500 Internal Server Error。

报错原文

Cannot execute the operation on ended Span {traceId: 6a5fc5b174cdd98482ab5e10608ec92d, spanId: 48867f9cfe1bfd00} Error: Operation attempted on ended Span {traceId: 6a5fc5b174cdd98482ab5e10608ec92d, spanId: 48867f9cfe1bfd00}
    at  (.next/server/chunks/[root-of-the-server]__0c8vq8t._.js:2156:6109)
    at async Module.p [as handler] (.next/server/chunks/[root-of-the-server]__0c8vq8t._.js:2156:6659)

...SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
    at ProtocolLib.getErrorSchemaOrThrowBaseException (/app/node_modules/.pnpm/@aws-sdk+core@3.974.27/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js:68:67)
    at S3RestXmlProtocol.handleError (/app/node_modules/.pnpm/@aws-sdk+core@3.974.27/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js:1854:65)
    at S3RestXmlProtocol.deserializeResponse (/app/node_modules/.pnpm/@smithy+core@3.29.1/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js:356:24)

原因分析

可能原因:Langfuse 后端部署时启用了 OpenTelemetry 的 AWS SDK 自动检测(aws-sdk instrumentation),该检测会拦截并修改 AWS SDK 对 S3 的请求,导致请求签名与计算的签名不匹配(SignatureDoesNotMatch)。S3 请求失败后,Langfuse 后端尝试操作已结束的 Span 从而抛出 Operation attempted on ended Span 错误。禁用 AWS SDK 的 OpenTelemetry 检测即可解决。

环境排查

  • 确认部署方式:Helm chart(版本 langfuse-1.5.39),Langfuse 镜像版本 3.212.0
  • 确认 S3 存储后端已正确配置,且签名相关参数(如密钥、区域、端点)无误
  • 确认 OpenTelemetry 自动检测配置:是否启用了 aws-sdk instrumentation(通过 OTEL_NODE_DISABLED_INSTRUMENTATIONSOTEL_NODE_ENABLED_INSTRUMENTATIONS 环境变量)
  • 确认 Python SDK 版本:langfuse-python 4.14.0

解决步骤

  1. 排查 OpenTelemetry 检测配置:检查 Helm chart 的 values.yaml 或 deployment 环境变量中是否设置了 OTEL_NODE_DISABLED_INSTRUMENTATIONSOTEL_NODE_ENABLED_INSTRUMENTATIONS。如果在启用的 instrumentations 列表中包含 aws-sdk,则可能引起冲突。
  2. 禁用 AWS SDK 检测(可优先尝试):在 Helm chart 的 values.yaml 中添加以下环境变量,禁用 AWS SDK 的 OpenTelemetry 自动检测:
    langfuse:
      additionalEnv:
        - name: OTEL_NODE_DISABLED_INSTRUMENTATIONS
          value: aws-sdk
  3. 重新部署或升级 Helm chart:应用配置更改后,重启 Langfuse Web 实例(例如 helm upgradekubectl rollout restart)。
  4. 验证无其他冲突:如果问题依旧,可尝试进一步禁用在 aws-sdk 附近的其他检测(如 httpexpress),但 Issue 中仅确认 aws-sdk 是直接原因。

验证方法

重新发送测试 trace(例如通过 Python SDK 运行 client.chat.completions.create 示例),检查以下项:

  • Jupyter notebook 中不再出现 Transient error Internal Server ErrorFailed to export span batch 警告/错误
  • Langfuse Web 实例日志中不再出现 Operation attempted on ended Span 错误
  • Langfuse UI 中能够正常显示新发送的 trace
  • ClickHouse 或 S3 中能够查到对应 trace 数据

参考来源

langfuse/langfuse #15281

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14644

发表回复

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