跳转到主要内容

由客户端时钟而非网关标记时间戳的链路追踪时间线

阅读需 1 分钟Tian PanTian Pan

你打开了一个运行缓慢的对话追踪。模型调用竟然在用户点击发送前的 800 毫秒就开始了。你责怪了用户的笔记本电脑,关闭了标签页,继续处理其他事情。

这不仅仅是一个用户的时钟出了问题。这涉及大约三分之一的流量,而且每一个跨越客户端边界的调试会话都在读取一个根本不存在的时间线。浏览器时钟是用户可设置的,经常不同步,偶尔甚至会偏差好几天。大多数可观测性技术栈附带的检测 SDK 会使用设备报告的任何时间来标记客户端 span,通过 traceparent ID 将它们与同步服务器时钟标记的服务器 span 链接成一棵树,然后将结果交给你的值班工程师,就好像这两半具有可比性一样。它们并不具有可比性。

这里的 bug 并不是说某些时钟会漂移。Bug 在于分布式系统的基本原理——时钟会撒谎、排序需要显式同步、权威时间源是你控制的那个——在被引入 AI 可观测性技术栈时,却没有带上相应的警示。单进程追踪教会了一代工程师像对待绝对真理一样阅读火焰图。当 span 来自同一个进程时,这确实是真理。但当第一个 span 源自不受控的浏览器时,火焰图就变成了一个包装成事实的假设。

这种失败模式是继承的,而非发明的

对话式 AI 系统跨越的信任边界比追踪模式最初设计的系统要多。一个典型的用户回合通常涉及浏览器、边缘工作节点或 CDN、API 网关、模型提供商、向量存储、几个内部工具以及数据库。每一个都属于不同的管理域。浏览器的时钟归用户所有。提供商的时钟归提供商所有。你的网关是这条路径中你唯一可以权威信任的时钟。

标准的检测模式会在每一层发出一个带有 start_timeend_time 的 span,取自该层恰好拥有的任何时钟。浏览器中的 OpenTelemetry JavaScript SDK 使用 performance.now() 作为单调时间源来计算持续时间,但将其锚定到 Date.now() 以获取墙上时钟时间戳,这意味着该锚点与用户的系统时钟一样错误。设备休眠一夜后,锚点不会刷新,时间戳继续漂移;SDK 仓库中有一个长期存在的问题记录,记录了出现在数小时或数天前的 span。

大多数后端提供的后期修复——重新调整子 span 到父 span 窗口内的时钟偏移调整——被 Jaeger 维护者自己称为“被认为是有害的”。调整器假设父 span 和子 span 具有相似的持续时间,这对于紧凑的 RPC 是成立的,但对于 LLM 生成几乎从未成立。它通过悄悄改写时间戳隐藏了潜在问题。它依赖于未记录的主机标识标签,并在标签缺失时退而补偿几乎所有的 span。值班工程师在阅读清理后的追踪时,已经丢失了时钟最初出错的信号。

对话式追踪让问题变得更糟

LLM 工作负载的三个特点使得这种失败模式比传统的请求-响应追踪更严重。

Span 足够长,使得偏移变得至关重要。 一个正常的 RPC 追踪由亚毫秒级的网络跳转主导,其中 50 毫秒的客户端时钟漂移只是舍入误差。一个智能体回合则由多秒钟的 LLM 调用主导,随后是每个以百毫秒计的工具调用。在 4 秒的模型调用中,客户端标记的“用户点击发送” span 中 50 毫秒的漂移是看不见的,但当你试图在相同粒度下推论首标记(time-to-first-token)延迟时,它就变成了一个调试泥潭。

因果关系很难仅从结构中读取。 在同步 RPC 树中,父子关系由调用图强制执行:父节点必须在子节点之前开始,子节点必须在父节点之前结束。智能体追踪经常违反这一点。一个与模型生成并行启动的投机性工具调用与用户 span 没有清晰的父子关系。对话中的第二个助手回复是上一个回合的子节点,但在追踪中却是它的兄弟节点。时钟偏移调整算法所依赖的结构性支撑并不存在。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 11 分钟

你的网关在 LLM 调用与工具执行之间丢失的 traceparent 请求头

生产环境中的 LLM 智能体技术栈经常在模型调用与工具执行之间丢失 W3C traceparent 请求头,导致原本连贯的用户交互逻辑碎裂成一堆“孤儿追踪”森林 —— 本文将揭示泄漏发生的环节以及如何修复它。

insider
observability
阅读需 11 分钟

在智能体交接处中断的分布式链路追踪

你的 Span 树在智能体相互调用之前一直非常清晰 —— 但就在 Bug 发生的地方,追踪突然中断了。本文将探讨为什么智能体交接会破坏链路上下文,以及如何确保上下文在交接中得以延续。

observability
ai-agents
阅读需 10 分钟

审计追踪的不匹配:当用户、智能体和工具各有各的日志时

智能体技术栈生成的四种日志往往无法对齐。解决方案并非增加更多日志,而是在用户操作边界生成的事务 ID、统一的审计记录,以及根据合规需求(而非子系统)确定的保留周期。

insider
ai-agents
阅读需 11 分钟

难以调试的庞大 Agent 追踪:当记录了一切却读不懂任何内容时

记录完整的 Agent 追踪会让故障信息变得完整,但却难以阅读。真正的可观测性瓶颈在于:在事故冷却前,人类是否能找到那步至关重要的操作。

insider
ai-agents
阅读需 10 分钟

Agent 追踪采样:当 “记录所有内容” 耗费 8 万美元却依然漏掉性能退化时

请求级的采样策略对 Agent 追踪已不再适用。采用分层策略——始终追踪失败、对成功请求进行头部采样、按成本百分位进行尾部采样——能将追踪存储从预算黑洞转变为有效的事件响应工具。

insider
llm