Astra Gate
管理控制台

链路追踪

Agent → Astra → 提供商:会话、轮次、每一跳的耗时、重试与改写

请求日志回答「这一笔请求怎么样」,链路追踪回答「它在整条链路里经历了什么」:Agent 这一轮调了几次模型、中间跑了哪些工具、Astra 在每个环节花了多久、上游有没有限流切号、时间到底花在了哪里。

侧栏「请求日志」下方的 链路追踪 有三个视图:拓扑、会话、请求。所有数据都来自经过 Astra 的请求本身,不需要改动 Agent 的任何配置。

画布操作

拓扑、会话、请求三个画布的操作方式相同:

  • 拖动空白处 平移,拖动节点 调整布局;
  • ⌘ / Ctrl + 滚轮(或触控板双指捏合)缩放,左下角也有缩放、「适应」和「重置布局」按钮;
  • 右下角的小地图可以点击或拖动,快速跳到画布的其他位置;
  • 打开左下角的 详情 开关后,点节点会在右侧弹出详情面板;开关默认关闭,关着时点节点只会高亮。开关状态记在本机浏览器里,三个画布共用。

拓扑图里拖过的节点位置会记在本机,下次打开保持不变;会话和请求画布每次按数据重新排布。

拓扑

左边是 Agent(客户端),中间是 Astra,右边是提供商:

  • 线宽 表示请求量,橙色 表示这段时间有 429 限流或切号,红色 表示错误率偏高;
  • 选「实时」时,线上的光点就是正在流过的请求;也可以看最近 1 小时、24 小时;
  • 顶部给出请求数、进行中、错误率和 Astra 开销 P95。

点中间的 Astra 节点,可以看到 Astra 自身每个环节(鉴权路由、中间件、隐私护栏、提供商 / 模型解析、协议转换)的 P50 / P95 耗时。自身开销 = 第一次发往上游的时刻 − 请求进门的时刻,不含上游耗时和重试。

点提供商节点,可以看到上游尝试次数、429 次数、切号次数、首字节 P95,以及每个订阅账号的状态(冷却到几点、上游限流响应头里报告的剩余额度)。

会话

会话列表按最近活动排序,可以按时间范围和客户端筛选。进入一个会话后,用右上角的轮次选择器切换「第几轮」,再选择用 画布 还是 时间线 来看:

  • 画布 看结构:主代理的调用像文字一样从左到右排列,排满一行就折到下一行;两次调用之间的连线上写着 Agent 在本地运行的工具和间隔(比如 Read×2 · Grep / 2.4 s),点它可以看这段间隔的详情。子代理和辅助调用放在发起它的那次调用下面,用虚线连接。一轮超过 8 次调用时,中间没有异常的连续步骤会折叠成一叠卡片,点击展开,或用右上角的 全部展开;
  • 时间线 看时间:每次调用、每段工具 / 等待间隔、每次上游尝试都在同一条时间轴上。每次调用的条形按模型的阶段分色:等首个输出(Astra 和上游排队到第一个输出)、思考、输出、生成工具调用(模型在流式生成工具参数);失败的尝试用红色条纹标出。一轮超过 15 次调用时默认打开时间线。

失败、重试过、或明显比这一轮平均慢(超过平均值两倍且超过 3 秒)的调用会挂上「失败」「重试」「慢」标记,右上角的 跳到异常 依次定位到它们。

正在进行的调用会立刻出现在它所在的那一轮里(开启新一轮的调用会直接切到「第 N 轮 · 进行中」),卡片上实时显示模型在做什么(等待模型响应、思考中、输出中、生成工具调用 Bash)和已用时间,时间线上的条形按已经历的阶段实时分色;调用结束、写入数据库后,换成正式的调用卡片。会话标题栏的 Agent 标签显示同样的状态;没有调用在进行时,显示上一次调用留下的状态——在运行它要的工具,或在等你的输入。

底部的 这一轮的时间 把耗时拆成模型的四个阶段(等首个输出、思考、输出、生成工具调用)、Agent 端的「工具 / 等待」和「重试浪费」,并单独给出 Astra 自身开销。

会话和轮次是怎么识别的

Astra 只读请求本身,不读也不保存对话内容:

识别依据说明
会话Claude Code 的会话 id(x-claude-code-session-id 或 metadata.user_id)、Codex 的 session-id 请求头、prompt_cache_key;都没有时,用 system 提示词加首条用户消息的指纹(只存哈希)
同一轮的下一步上一次响应里的工具调用 id,会出现在下一次请求的工具结果里,精确关联(画布上是实线)
新的一轮最后一条消息是用户自己输入的
子代理 / 辅助调用同一会话里出现另一条调用链:如果主代理正在等工具结果,就算子代理,否则算辅助调用(推断,画布上是虚线)

几点限制:

  • 工具执行时间和「等你确认」的时间目前合在一起显示为「工具 / 等待」,要区分两者需要接入 Agent 自己的遥测,后续版本提供;
  • Astra 重启后,跨重启的精确关联会退化为按会话兜底;
  • Gemini 的工具调用不一定带 id,这时按会话和时间顺序串联。

请求

从请求日志的请求详情里点 查看链路,或在会话里点某次调用的「打开这次请求的链路」,就能看到这一次请求的完整往返:

  • 去程(上面一行):Agent → 入口(鉴权、路由、限额)→ 中间件插件 → 隐私护栏 → 解析 → 协议转换(直通时显示「直通」)→ 上游尝试 → 提供商。发生切号时,尝试会分叉成多个节点:失败的一次用红色虚线连到提供商,并标出状态码;
  • 回程(下面一行):响应解码 → 协议回编码 → 占位符还原 → 中间件 · 响应 → 回到 Agent,只显示这次请求实际经过的环节。

打开「详情」后点节点,可以看到这一环节做了什么、从请求进门后第几毫秒开始:Agent 发来的请求有多少条消息、多少个工具定义、system 提示词多长、输出上限多少;隐私护栏命中了几处;协议转换有哪些有损映射;每次上游尝试用的是哪个账号、为什么重试、上游返回的 request-id 和限流响应头;响应里模型各阶段的耗时、思考 / 输出的字数、调用了哪些工具。每个节点底部还有可展开的 记录的全部属性与事件,列出这一环节记录下的所有字段。

底部的 时间去哪了 把这一次请求拆成:Astra 自身、重试浪费、上游首字节、等首 token,以及思考、输出、生成工具调用。

数据与隐私

  • 链路数据和请求日志存在同一个本地数据库里,按请求日志的保留期一起清理;
  • 只记录耗时、状态码、账号、协议、计数和限流响应头这类元数据,不记录请求和响应的内容。模型的阶段只记录时间点(开始 / 结束思考、开始 / 结束输出、每次工具调用的工具名)和字数,请求本身只记录消息条数、工具定义个数、system 提示词的字符数和输出上限,不记录任何文字;
  • Agent 发来的 traceparent / baggage 只用来把 Astra 挂到 Agent 自己的链路下,不会转发给上游提供商。

On this page