1. 链路追踪简介
SkyWalking 是一个分布式链路追踪工具。
链路追踪,就是分布式系统中跟踪记录请求处理全流程的技术,如请求经过了哪些服务节点,在节点的耗时,请求状态等信息。
核心是通过 TraceID (作为唯一标识),将各个调用单元(Span )串联起来,并借助 Context 传递上下文。
Trace:表示一个完整 请求处理过程(从请求到响应结束),包含多个 Span。
TraceID:唯一标识Trace ,便于关联 各服务的日志及监控数据)
Span:Trace 基本单元。 表示请求在服务节点上的处理过程,含操作名 ,耗时等数据。
以发送快递为例,快递单号就是 TraceID,快递的一个个转运仓库就是服务节点,快递到了仓库,从入库到出库的全过程都有对应记录(Span),沿途各仓库中的记录汇集到一起,通过 TraceID 关联在一起,就变成了手机上看到的物流图了(什么时候到哪里了,停留了多长时间)。
2. 链路追踪作用
-
保 障系统可用 及稳定
链路追踪工具能通过实时采集 CPU、内存、请求成功率等信息,主动发现异常,并在到达阈值时告警,让程序员在问题真正发生前,提前采取措施。
-
优 化性能 和资源利用率
链路追踪工具,让每个节点处理的耗时可视化,帮助程序员 识别慢调用并进行优化。
-
提 高故障排查效率
链路追踪工具通过 TraceID 关联各服务的日志为统一的视图,有助于快速定位故障节点(如数据库查询超时,第三方接口异常)。避免了传统排查的人工拼接服务器线索的耗时且易遗漏的问题
-
理解 服务依赖 与拓扑
分布式系统服务之间的依赖关系动态变化,人工维护依赖图谱成本高,使用 链路追踪工具 可自动生成服务拓扑图,显示服务之间的调用频率和成功率,辅助容量规划和架构治理。
3. 相关产品介绍
ZipKin、CAT、SkyWalking 是比较主流的 链路追踪工具。
特点对比:
| 维度 | Zipkin | CAT | SkyWalking |
|---|---|---|---|
| 接⼊复杂度 | 轻量级,集成Spring Cloud Sleuth即可 | 需代码埋点 | 通过Java Agent启动,代码无侵入 |
| 数据粒度 | 接口级 | 代码级(可细化到具体代码块) | 方法级(支持RPC, HTTP) |
| 语言 | Java, C#, Python,Nodejs, Golang, Ruby, Scala等 | Java, C/C++, Python,Nodejs, Golang等 | Java, Python, Nodejs, PHP, Golang,Ruby等 |
| 调用链可视化 | 有 | 有 | 有 |
| 聚合报表 | 少 | 非常丰富 | 较丰富 |
| 服务依赖图 | 简单 | 简单 | 好 |
| 告警支持 | ⽆ | ⽀持 | ⽀持 |
| 存储机制 | 内存,ES,MySQL等 | mysql(报表),本地⽂件/HDFS(调⽤链) | ES, MySQL, banyandb, PostgreSQL等(最新版本已移除H2存储) |
| 社区 | ⽂档丰富, 国外主流, 功能迭代较慢 | 社区活跃低, ⽂档⼀般, 主要国内, 大厂使用多 | 社区活跃, 更新频繁 |
| 优点 | 轻量, 部署简单, 适合Spring Cloud微服务快速集成 | 功能全⾯(⽇志采集, 报警, 业务报表), 适合⼤⼚综合监控 | 非侵入, Apache 背书, 社区活跃 |
| 不足 | 报表能力弱, 功能单⼀ | 代码侵⼊性高, 社区不活跃 | 插件开发门槛高 |
ZipKin 适合快速搭建链路追踪的中小型团队,对深度监控和业务分析支持有限
CAT 适合中大企业,对报表及监控粒度要求较高
SkyWalking 综合较强,无侵入,支持语言多且性能较优,有较丰富的报表和告警支持,且支持插件定制开发(难度较大)