Skip to Content
产品功能分布式追踪

端到端 Trace 指南

把一次完整的用户操作(浏览器 / App → 后端服务 → 下游服务)串成一条因果链,存进 Argus, 在 Console 用瀑布图查看。Argus Trace 100% 基于 W3C Trace Contexttraceparent 头)。

能力概览:端 SDK 出站注入 → 后端 SDK 继承 → Console 瀑布图。三端(Web / iOS / Android)注入 + 后端(Go / Node)继承均已实现(Trace v1.5)。

关键概念

一个 trace 是一次用户操作引发的因果链,由多个 span 组成树状结构。每个 span 有 trace_id(整条链路共享)、span_id(本节点)、parent_span_id(父节点)。traceparent 头把 这三者在服务间传播:

traceparent: 00-<32hex trace_id>-<16hex span_id>-<2hex flags> └─ 整条链路共享 └─ 本 span └─ 01=采样 / 00=不采

一条端到端 trace 长这样:

trace_id = abc123... └─ span: client.http "POST /api/order" (Web / App 端 SDK,出站注入) └─ span: server.http "POST /api/order" (你的 Go / Node 服务,中间件继承) ├─ span: internal "charge-card" (手动子 span) └─ span: client.http "POST payments" (出站注入,传给下游) └─ span: server.http ... (下游服务继承)

三步打通

端 SDK 出站注入 traceparent

WebcaptureFetch(默认开)自动包裹 globalThis.fetch,给非 Argus 出站请求注入 traceparent 并上报 client span。非 fetch 传输手动传播:

const headers = Argus.traceHeaders(); // { traceparent: "00-<trace>-<span>-01" }

iOS / Android:SDK 支持给出站请求注入 W3C traceparent(三端 parity 已收官)。

后端 SDK 继承 + 创建 server span

后端 SDK 的中间件读入站 traceparent沿用其 trace_id,以上游 span_id 为本 server span 的 parent_span_id;无入站头则生成新 root trace。

// Go http.ListenAndServe(":8080", client.Middleware(mux))
// Node(Express) app.use(argus.middleware());

请求上下文内的日志自动带 trace_id、手动 StartSpan / startSpan 自动接父子。

把链路继续传给下游服务

出站请求再注入一次 traceparent,下游服务(同套后端 SDK / Go ↔ Node 混部)继续同一条 trace:

// Go req.Header.Set("traceparent", argus.TraceparentFromContext(ctx))
// Node fetch(url, { headers: { ...argus.traceHeaders() } });

采样一致性

头部采样按 trace_idFNV-1a 一致性 hashWeb / Go / Node SDK 同算法、同向量——保证 整条 trace 要么全采、要么全弃,不会出现残缺链路。status=error 的 span 强制保留(即使采样 率很低也不丢错误链路)。

后端 SDK 用 sampleRate / SampleRate 配置([0,1]0/缺省=全采)。

日志 ↔ Trace 关联

后端日志若处于 active span 上下文,会自动带上 trace_id

client.Info(ctx, "order received", map[string]string{"user_id": "u-42"}) // → 该日志带 trace_id,可在 Console 按链路聚合「后端 + 端上」日志

客户后端日志 shipper 也可显式带 trace_id 或透传 traceparent,把同一请求横跨多服务的日志聚到 一起。详见 后端日志接入 

Console 瀑布图

接入后,在 Console 的 /traces 页:

  1. Trace 列表:按 project / 时间 / user_id / session_id / status / operation / duration 过滤。
  2. Trace 详情(瀑布图):按父子关系缩进,每个 span 是一条时间轴长条,长度 ∝ 耗时,颜色编码:
    • 🔴 红 = status=error
    • 🔵 蓝 = kind=client(出站调用)
    • 🟢 绿 = kind=server(服务端处理)
    • ⚪ 灰 = 其他(internal 等)
  3. 点 span 看 attributes / status,定位慢在哪一跳。

端到端验证(本地)

# 1) 起后端服务(Go 或 Node 示例) cd examples/go-backend-demo ARGUS_DSN='argus://demo-public:demo-secret@localhost:4318/demo' go run . # 2) 模拟端上 SDK 带 traceparent 进来 curl -H 'traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' \ http://localhost:8080/api/order

在 Console /traces 用该 trace_id4bf92f3577b34da6a3ce929d0e0e4736)即可看到这条链路。

CE / EE 边界:W3C TraceContext 协议、events_trace 表 + 基础查询、端 + 后端 SDK、Console 列表

  • 瀑布图、Trace↔Log/Crash/APM 关联跳转、基础采样配置 均在 CE(Apache 2.0)。跨服务拓扑图、 自动根因分析、长期归档(>14 天)属 EE / Cloud。详见 docs/02-product/29-trace-observability.md