SkyWalking UI 深度探索:Tracing(分布式链路追踪)

SkyWalking Tracing 使用详解

SkyWalking 的核心命脉 —— Tracing(分布式链路追踪)

这是 APM 最关键的能力,也是排查复杂微服务问题的“终极武器”。

下面,我们对 SkyWalking UI 的 Tracing 功能进行深度探索,从“如何查链路”到“如何读 Span”,一步步带你掌握这个根因定位神器的完整使用方法。


🔍 SkyWalking UI 深度探索:Tracing(分布式链路追踪)

📌 访问路径:UI 首页 → 左侧菜单点击 “Trace”


一、什么是 Tracing?

Tracing(链路追踪) 是指:
跟踪一个用户请求在多个服务之间的完整调用路径,形成一条 Trace(调用链),每个服务内部的操作称为 Span

✅ 一句话:
“从用户点击下单,到订单创建、扣库存、发消息,全程每一步都看得见。”


二、核心目标:解决“为什么慢?”、“哪里错?”的问题

问题Tracing 如何帮助
❓ 请求超时了,卡在哪一步?查看各 Span 耗时,定位最慢环节
❓ 接口报错,异常发生在哪?找到标记为 error 的 Span,查看异常堆栈
❓ 某个参数传错了吗?查看 Span 的 Tags(标签),确认入参
❓ 日志找不到上下文?关联日志,通过 traceId 追踪完整流程

三、如何查询一条调用链?

方法 1:按条件搜索(最常用)

进入 Trace 页面,使用查询条件:

条件说明
Service Name指定入口服务(如 gateway
Trace ID已知某次请求的 Trace ID(可在日志中获取)
Duration耗时范围(如 > 1000ms 的慢请求)
Status是否成功(Success / Error
Start Time时间范围(建议先缩小到 5~15 分钟)

✅ 示例:
查找 order-service 在过去 10 分钟内 耗时超过 1.5 秒且失败的请求。


方法 2:从其他页面跳转
  • Dashboard → 点击“Top N Slow Traces”
  • Topology → 点击红色边 → “View Traces”
  • Logs → 点击带 traceId 的日志 → “View in Trace”

✅ 推荐组合使用:先看拓扑/指标发现问题,再进 Tracing 精确定位。


四、调用链详情页面解析(核心!)

查询到一条 Trace 后,点击进入详情页,你会看到如下结构:

┌─────────────────────────────────────────────────────────────┐
│  📄 Trace ID: abc123-def456-ghi789                           │
│  🕒 Start Time: 2025-04-05 10:23:45.123                      │
│  ⏱️  Total Duration: 2,340 ms                                 │
│  ❌ Error: Yes (1 span failed)                                │
└─────────────────────────────────────────────────────────────┘
│  🌐 调用链时间轴(Timeline View)                             │
│                                                              │
│  [gateway] ────┬─────────────────────────────────────────────▶ 10ms
│               │                                                │
│               ▼                                                │
│        [order-service] ─────┬───────────────────────────────▶ 1,200ms
│                            │                                  │
│                            ▼                                  │
│                     [user-service] ────────────────────────▶ 800ms
│                                                              │
│                            ▼                                  │
│                     [mysql] ───────────────────────────────▶ 780ms
│                                                              │
└─────────────────────────────────────────────────────────────┘

五、每个 Span 的详细信息解读(重点!)

点击任意一个 Span(如 order-service 的入口方法),会弹出详细信息面板,包含以下关键内容:

1. 🧾 Basic Info(基本信息)
字段说明
Operation Name接口名或方法名(如 /order/create
Span Type类型:
Entry:入口(如 HTTP 请求)
Exit:出口(如调用下游服务、DB)
Local:本地方法调用
Span Layer协议层(如 HTTPMQDATABASE
Start Time / End Time精确到毫秒
Duration耗时(关键!)

2. 🏷️ Tags(标签)—— 业务上下文

Tags 是你排查问题的“线索库”,常见标签:

Tag Key示例值用途
http.methodPOST确认请求方式
http.url/api/order/create查看完整 URL
http.status_code500是否返回错误
spring.mvc.controller.methodOrderController.create()定位代码位置
db.typemysql数据库类型
db.sqlSELECT * FROM users WHERE id=?SQL 语句(敏感信息可脱敏)

🔐 安全提示:可通过配置屏蔽敏感 SQL 或参数。


3. 📜 Logs(日志)—— 异常堆栈

如果该 Span 发生了异常,会自动记录日志:

{
  "time": "2025-04-05 10:23:46.123",
  "message": "java.lang.NullPointerException",
  "stack": "at com.example.service.OrderService.create(OrderService.java:45)\n..."
}

✅ 价值:

  • 直接看到哪一行代码抛出异常
  • 不用再去翻应用日志文件

4. 🔗 References(引用关系)
  • 显示该 Span 是被哪个上游 Span 调用的(Parent)
  • 支持跨服务链路追踪(通过 traceId + parentSpanId

5. 📎 Events(事件)

某些插件会记录特殊事件,如:

  • Connection Acquired(获取数据库连接)
  • Statement Execute Start/End

可用于分析数据库连接池等待时间。


六、实战:如何定位一次“下单失败”问题?

场景:

用户反馈“下单失败”,但无具体错误信息。

排查步骤:
  1. 进入 Trace 页面

    • Service: gateway
    • Status: Error
    • Duration: > 1000ms
    • Time Range: 最近 5 分钟
  2. 找到一条失败链路

    • 总耗时 2.1s,标记 ❌ error
  3. 查看 Span 时间轴

    • gateway: 10ms
    • order-service: 20ms
    • payment-service: 2,050ms ← 明显异常!
  4. 点击 payment-service 的 Span

    • Tags: http.status_code=504, url=/pay
    • Logs: java.net.SocketTimeoutException: Read timed out
  5. 结论

    支付服务调用第三方支付接口超时,导致下单失败。

  6. 动作

    • 通知支付团队检查网络或第三方接口
    • 考虑增加重试或降级策略

七、高级技巧

技巧说明
🔍 按耗时排序 Span快速找到性能瓶颈
📊 查看 P50/P95/P99 分布判断是偶发还是普遍慢
🧩 关联日志开启 Logging 功能后,可点击“View Logs”查看该 traceId 的所有日志
📥 导出 Trace支持 JSON 导出,用于离线分析或报告
🕵️ 对比多条 Trace分析相同接口在不同参数下的性能差异

✅ 总结:Tracing 使用口诀

“一查 Trace ID,二看时间轴,三点 Span 详情,四读 Tags 与日志”

Tracing 是你的 “请求显微镜”,让你看清每一次调用的来龙去脉。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值