跳到主要内容

Agent 集群可观测性:在千并发 Agent 运行中监控而不陷入仪表盘盲区

· 阅读需 13 分钟
Tian Pan
Software Engineer

在生产环境中运行一百个 agent 感觉还可以管理。你有追踪数据,有仪表盘,知道什么时候出问题。但运行一千个并发 agent 完全是另一个问题——不是因为 agent 更复杂,而是因为你为十个 agent 建立的监控模型在你注意到之前就已经悄然失效了。

失败模式很微妙。一切看起来都很正常。你的 span 树都在。错误率很低。然后,一个导致 40% 会话输出质量下降长达六小时的提示词回归,只因为客户投诉才浮出水面——而不是被你的可观测性系统捕获。

这就是仪表盘盲区问题:单 agent 追踪在小规模下运行良好,在集群规模下则会悄然失效。以下是它发生的原因及应对之道。

为何单 Agent 追踪在大规模下失效

传统分布式追踪假设请求生命周期是可预测的:请求进入,遍历几个服务,然后返回。该请求的 span 树是有界的、可读的。单个追踪能告诉你发生了什么。

Agent 工作负载打破了这一模型所依赖的每一个假设。单个用户请求可能触发五次或更多 LLM 调用、三次工具调用、两次向量数据库查找,以及数量不定的重试周期——所有这些都在一次"运行"中。该运行的 span 树深度深、分支多,且结构是非确定性的。明天相同的输入可能产生结构完全不同的树。

遥测数据量的增长速度很快。典型的基于 RAG 的 agent 管道产生的遥测数据是等效 API 调用的 10 到 50 倍,因为你现在需要追踪每次模型调用的 token 数量、缓存命中率、嵌入相似度分数、护栏触发率以及每步的成本归因。运行自主多 agent 工作流(agent 派生并协调其他 agent)的团队报告称,与其应用程序遥测基线相比,遥测数据量增加了 50 到 100 倍。这通常是可观测性预算意外翻倍的地方。

但数据量是可管理的部分。更深层的问题在于,集群规模的 agent 监控需要回答个别追踪无法回答的问题:

  • 失败率是否在多次运行中相关联,还是孤立于特定配置?
  • 提示词变更是否在每个追踪的错误率上升之前就已经降低了整个集群的输出质量?
  • 哪批 agent 在这一小时内消耗了 80% 的 token 预算?
  • 是否有 agent 卡住了——在相同工具调用上循环、消耗预算却没有返回任何用户价值?

这些问题没有一个能通过阅读单个 span 树来回答。它们需要集群级别的聚合。

真正重要的集群级信号

相关失败率

最重要的信号不是你的总体失败率——而是失败是否以暗示系统性原因的方式跨运行相关联。

随机工具失败是预期的。意外的是,当十个 agent 在 30 秒内都在其网页搜索工具调用上失败,或者当特定工具的失败率对于共享特定系统提示变体的 agent 激增时。相关性以总体错误率所隐藏的方式揭示因果关系。

在操作上,这意味着你需要按提示词变体、模型版本、工具名称和用户群体切分失败率。"错误率:2%"的平坦仪表盘几乎毫无用处。"在过去 15 分钟内,使用 prompt_v7 的 agent 的 web_search 工具错误率上升了 8 倍"才是可行动的。

成本分布百分位数

每次运行的平均 token 成本是一个虚荣指标。钱花在了 P95 和 P99 上。

长尾 token 消耗的 agent 运行——递归过深、获取了太多文档、或在超时前进入软循环的 agent——个别来看很昂贵,整体来看很危险。P99 token 消耗的单次 agent 运行成本可能是中位运行的 20 到 50 倍。

有效的检测模式:当 P95 token 消耗在滚动一小时窗口内跳升超过 30% 时发出警报。这能在成本账单反映之前捕获上下文窗口膨胀(通常是工具输出臃肿或内存积累的症状)等问题。已实施此方案的团队报告,比标准账单异常检测早数小时捕获成本峰值。

P99 执行深度

执行深度——agent 在完成或失败之前所走的步骤数——是一类没有直接信号的失败的代理指标:运行时间越来越长但没有取得进展的 agent。

大多数健康的 agent 运行在有限的步骤数内完成。当 P99 执行深度开始攀升——或者当分布出现长尾,一小部分运行占用中位数 3 倍步骤时——这是某些 agent 未能收敛的信号。

危险的变体是静默循环:一个 agent 反复以微小变化调用同一工具,返回技术上成功的完成,但从未真正解决用户的问题。这些运行不会出现在你的错误率中。它们只出现在你的成本分布和执行深度百分位数中。

卡住 Agent 检测

卡住的 agent 是指已进入无法向前推进但尚未超时或出错的状态。实际定义:一个重试同一工具调用超过 N 次,或在步骤上花费超过 M 秒但没有状态变化的 agent。

这与失败的 agent 不同。失败的 agent 会出现在你的错误率中。卡住的 agent 会出现在你的延迟分布中——具体来说是你的 P99 和 P99.9 会话持续时间指标中。它们还作为极端异常值出现在你的每会话成本直方图的右尾中。

检测需要监控单次运行内每次工具调用的重试次数,而不仅仅是所有运行中的总体重试率。一个 agent 在一次运行中重试 search_documents 八次,与整个集群 8% 的重试率是截然不同的信号。

行为指纹:在指标移动前捕获回归

集群规模 agent 监控最强大的技术也是对来自传统可观测性的工程师来说最不直觉的:行为指纹。

核心洞察是,给定任务的一组 agent 运行具有一个特征统计形状——由执行追踪分布定义的指纹。当 agent 正确工作时,这个指纹是稳定的。当提示词被更改、模型被升级或工具模式漂移时,指纹会改变。通常,指纹会在你的错误率、延迟或质量指标移动之前改变。

这之所以有效,是因为单个指标过于粗糙。质量下降通常表现为 agent 遍历其执行图方式的细微变化——更频繁地使用不同工具、在不同步骤计数时访问记忆、即使所有输出"成功"时也产生语义上不同的输出。这些运行上的二元通过/失败测试什么都检测不到。指纹比较则能检测到分布偏移。

关于这种方法的最新研究表明,行为指纹在二元通过/失败测试检测功效为 0% 的场景中达到 86% 的检测功效。对生产团队来说更实际的是:它平均比 LLM-as-judge 分数等质量指标早几小时捕获提示词回归。

实施路径是务实的:计算每次运行执行追踪的紧凑向量表示(工具调用序列、步骤计数分布、决策分支模式)。从最近的生产运行中维护基线指纹。当当前运行与基线的距离超过阈值时发出警报。OpenTelemetry 最终确定的 AI agent 语义规范提供了从现有仪器中提取这些特征所需的追踪结构。

集群规模的采样策略

标准的基于头部的采样——在请求执行前决定是否捕获追踪——对 agent 集群不起作用。它随机选择追踪,这意味着它系统性地欠采样失败(很少见)、高成本异常值(很少)和异常运行(正是你需要调试的)。

尾部采样反转了这一点:你为每次运行捕获完整追踪,在运行完成后做出采样决策,然后根据运行结果和特征保留或丢弃。

对大多数 agent 集群效果良好的实用策略:

  • 保留 100% 的失败运行(错误状态、超时或明确的失败响应)
  • 保留 100% 的 P99 成本层运行
  • 保留 100% 的触发高于阈值异常分数的运行
  • 保留约 10-15% 的健康运行,均匀采样以保持覆盖率

这为真正重要的运行——失败和异常值——提供了完整的取证细节,同时使大多数成功运行的存储和摄取成本保持可控。

更复杂的变体,有时称为哨兵采样,将集群范围的轻量级遥测(心跳、步骤计数、错误状态)与在运行中检测到异常时按需升级到完整追踪捕获相结合。这种方法与完整追踪相比可以将总遥测带宽减少约 80%,同时为几乎所有需要调试的情况保留取证细节。关键设计决策是使异常检测足够快,以便在运行完成前触发升级。

作为可观测性原语的成本归因

Token 成本归因不是计费功能——它是调试功能。

当 agent 成本激增时,有用的问题不是"我们的成本上涨了 40%",而是"哪个用户群体、哪个 agent 配置以及哪种具体工具调用模式推动了增长"。这种级别的归因需要用允许你切分成本分布的维度来仪器化每次 LLM 调用:

  • 用户或租户 ID
  • Agent 配置版本或提示词变体 ID
  • 功能或工作流名称
  • 工具调用名称(对于一个工具异常昂贵的运行)

大多数团队最终采用的实施模式是 LLM 网关——一个位于所有提供商 API 调用前的代理,自动将归因维度附加为追踪属性。这个单一插入点消除了单独仪器化每个工具调用的需要,并确保所有 agent 的一致归因。

建立在此之上的异常检测很简单:当任何维度的 P95 token 消耗在滚动窗口内增加超过 X% 时发出警报。信噪比很高,因为合理的成本增加(更多流量、新功能)通常表现为均值变化,而病理性成本增加(卡住的 agent、上下文膨胀、递归循环)首先表现在尾部。

2026 年的工具格局

过去 18 个月,agent 集群的可观测性工具已经显著成熟。几个值得区分的类别:

基础层:OpenTelemetry 的 AI agent 语义规范现已最终确定,这意味着 agent 运行的追踪模式——agent 名称、操作类型、步骤计数、工具调用属性——在各框架中已标准化。如果你正在仪器化新的 agent 系统,从 OTel 和 OTLP 导出开始,可以获得供应商可移植性并访问不断增长的 AI 感知收集器生态系统。

开发者优先平台:Langfuse(开源、可自托管)和 LangSmith(LangChain 原生)是需要在开发过程中快速反馈循环的团队的主流选择。两者都支持 token 级成本追踪、追踪查看和评估工作流。Langfuse 的自托管选项对有数据驻留要求的团队特别相关。

集群规模监控:对于大规模运行 agent 集群的团队,Arize 和 Weights & Biases Weave 提供了开发者专注工具所缺乏的集群级聚合、LLM-as-judge 评估和漂移检测。Arize 的开源 Phoenix 项目包含嵌入式聚类和漂移检测,可以在不需要自定义实施的情况下近似实现行为指纹。

多框架覆盖:AgentOps 提供跨 400+ LLM 和框架的单一 SDK,对于运行异构 agent 栈且需要无需每框架仪器化工作即可获得一致集群级遥测的组织很有用。

关键架构决策是将 AI 遥测路由通过你现有的应用程序可观测性栈,还是给它一个独立的管道。大多数已扩展到生产的团队发现这些管道需要分开。数据形态不兼容(大文本载荷 vs. 指标时序),保留要求不同(评估反馈循环需要更长历史),查询模式完全不同(token 归因 vs. 请求延迟)。混合它们会给应用程序管道带来成本压力,并给两者带来查询性能问题。

建立思维模型

从单 agent 追踪到集群可观测性的转变,思维模型的转变与工具转变同样重要。单 agent 追踪是调试工件——这次运行发生了什么。集群信号是运营工件——现在所有运行中正在发生什么。

两者都是必要的。运营故事需要集群级信号:相关失败率、成本分布百分位数、执行深度趋势、与基线的行为指纹距离。当这些信号触发时,单 agent 追踪是你理解导致问题的具体运行的方式。

采样策略的存在是为了确保在需要时单 agent 追踪可用——这意味着保留 100% 的失败和异常运行,并权衡健康运行的保留以保持成本可控。

实际的前进路径:首先仪器化集群级信号。使用网关模式和尾部采样器,相关失败率和成本归因需要三到四天的工作。行为指纹需要更长时间,需要更多统计知识,但对于任何在提示词或模型变更频繁的生产环境中运行 agent 的团队来说,检测功效是值得的。

做对这件事的团队不是拥有最多仪表盘的团队。而是那些早早决定个别追踪是调试工具而非运营工具,并相应建立集群级信号的团队。


集群可观测性是可解决的,但它需要将 agent 集群而非单次运行作为分析单元。信号、采样策略和工具都从这个框架中衍生。

Let's stay in touch and Follow me for more thoughts and updates