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 | 协议层(如 HTTP、MQ、DATABASE) |
| Start Time / End Time | 精确到毫秒 |
| Duration | 耗时(关键!) |
2. 🏷️ Tags(标签)—— 业务上下文
Tags 是你排查问题的“线索库”,常见标签:
| Tag Key | 示例值 | 用途 |
|---|---|---|
http.method | POST | 确认请求方式 |
http.url | /api/order/create | 查看完整 URL |
http.status_code | 500 | 是否返回错误 |
spring.mvc.controller.method | OrderController.create() | 定位代码位置 |
db.type | mysql | 数据库类型 |
db.sql | SELECT * 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
可用于分析数据库连接池等待时间。
六、实战:如何定位一次“下单失败”问题?
场景:
用户反馈“下单失败”,但无具体错误信息。
排查步骤:
-
进入 Trace 页面
- Service:
gateway - Status:
Error - Duration:
> 1000ms - Time Range: 最近 5 分钟
- Service:
-
找到一条失败链路
- 总耗时 2.1s,标记 ❌ error
-
查看 Span 时间轴
gateway: 10msorder-service: 20mspayment-service: 2,050ms ← 明显异常!
-
点击
payment-service的 Span- Tags:
http.status_code=504,url=/pay - Logs:
java.net.SocketTimeoutException: Read timed out
- Tags:
-
结论:
支付服务调用第三方支付接口超时,导致下单失败。
-
动作:
- 通知支付团队检查网络或第三方接口
- 考虑增加重试或降级策略
七、高级技巧
| 技巧 | 说明 |
|---|---|
| 🔍 按耗时排序 Span | 快速找到性能瓶颈 |
| 📊 查看 P50/P95/P99 分布 | 判断是偶发还是普遍慢 |
| 🧩 关联日志 | 开启 Logging 功能后,可点击“View Logs”查看该 traceId 的所有日志 |
| 📥 导出 Trace | 支持 JSON 导出,用于离线分析或报告 |
| 🕵️ 对比多条 Trace | 分析相同接口在不同参数下的性能差异 |
✅ 总结:Tracing 使用口诀
“一查 Trace ID,二看时间轴,三点 Span 详情,四读 Tags 与日志”
Tracing 是你的 “请求显微镜”,让你看清每一次调用的来龙去脉。
SkyWalking Tracing 使用详解
5141

被折叠的 条评论
为什么被折叠?



