SkyWalking介绍
- 链路追踪
- 链路追踪产品
- Zipkin
- CAT
- SkyWalking
- 下载安装SkyWalking
- 数据库选型
- 配置
前言
分布式系统中,一次请求(如用户下单)会跨越多个异构服务节点(网关、商品、库存、支付、消息队列等),这些节点可能由不同团队开发、部署在不同服务器、使用不同编程语言,且调用关系存在串行与并行混合的情况,因此需要链路追踪来贯穿和观测整个调用链。
在分布式系统中可能遇到那些问题:请求流经了哪些节点、服务间依赖关系如何、各接口性能表现怎样、如何快速串联全链路并定位故障,此时需要链路追踪
链路追踪
链路追踪是分布式系统中跟踪请求全流程的技术,通过记录请求在多个服务间的流转路径,耗时,状态等信息,形成完整的调用链视图。也就是将一次分布式请求的调用情况集中进行展示。其核心是通过唯一标识(TraceID)串联跨服务的调用单元(Span),并借助**上下文传递(Context)**实现链路连续性。
Trace:代表一次完整的请求处理过程,从请求到响应结束。由多个 Span 组成
TraceID:每个Trace有一个唯一的 Trace ID来标识,用于关联跨服务的日志和监控数据
Span:Trace的基本单元。代表请求在单个服务节点上的处理过程(如下单,支付,数据库查询等),包含操作名称,耗时等数据。
链路追踪的作用
保障稳定性:实时采集 CPU、内存、成功率等指标,主动发现异常并告警,在用户感知前介入,防止故障扩散与雪崩。
性能优化:通过完整 Trace 可视化各节点耗时,细粒度定位慢调用(如某服务耗时占比过高),指导优化。
高效排障:用唯一 TraceID 将跨服务日志/错误关联为统一视图,替代人工拼接,快速定位故障点(如 DB 超时、第三方异常)。
梳理依赖拓扑:自动生成服务调用拓扑与成功率/频率视图,降低人工维护成本,辅助容量规划与架构治理。
链路追踪产品
Zipkin
Twitter 开源,基于 Google Dapper 论文设计
分布式链路追踪,调用链可视化;支持 MySQL/ES/内存等存储和多语言客户端;常与 Spring Cloud 集成
GitHub 17.2K+ Star,被 Netflix、阿里等采用
开源地址:https://github.com/openzipkin/zipkin
CAT
CAT(Central Application Tracking)
美团点评 2011 年底基于 Java 开发,2014 开源;理念来自 eBay CAL
分布式实时监控系统,侧重日志/指标/报表、检索聚合分析;覆盖外卖、酒旅、金融等核心业务场景
GitHub 18.9K+ Star,携程、陆金所、平安、猎聘等使用
参考:CAT简介
开源项目:https://github.com/dianping/cat
SkyWalking
吴晟(华为开发者)2015 发起,Apache 顶级项目(2019 毕业)
APM/可观测性方案,面向微服务/分布式架构;插件丰富、UI 强、无代码侵入
GitHub 24.3K+ Star,华为、小米、当当等生产使用
开源地址:https://github.com/apache/skywalking
官方文档:Apache SkyWalking
资料参考:https://qcon.infoq.cn/2018/beijing/presentation/445
| 维度 | 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:轻量链路追踪,Spring Cloud 集成友好,接口级粒度,部署简单;但报表/告警弱,功能偏单一。
CAT:监控与报表能力最强,代码级粒度,适合大厂综合监控/业务指标/告警;但需要埋点,侵入性高,社区活跃度较低。
SkyWalking:Java Agent 无侵入接入,方法级粒度,服务拓扑/依赖图和可观测能力较好,Apache 项目、社区活跃;插件扩展门槛相对高。
APM:应用性能监控,收集/分析/可视化运行时数据,如响应时间、吞吐量、错误率;CAT、SkyWalking 属于 APM 工具。
SkyWalking的架构通常包括三个主要组件:探针(Agent), 后端(Backend) 和前端(UI)
OAP:观测分析平台,SkyWalking 后端核心,负责接收、处理、存储 Agent 数据并做指标聚合。
Agent:探针,通过字节码增强无侵入采集运行时数据;SkyWalking 支持 Java/Python/Go/NodeJS/PHP 等。
UI:可视化控制台,通过 RESTful API 从 OAP 取数,展示拓扑、链路、指标、告警等。
Metrics:指标数据,如响应时间、成功率。
Endpoint:比 Service 更细的监控单元,表示服务内具体接口/方法级别请求入口。
下载安装SkyWalking
官方下载地址:https://skywalking.apache.org/downloads/
版本选择:SkyWalking APM(10.2.0) 和 Java Agent(9.4.0)
这里more可以选择版本,这里下载压缩包
其他老版本:
APM 历史版本: https://archive.apache.org/dist/skywalking/
Java Agent 历史版本: https://archive.apache.org/dist/skywalking/java-agent/
解压apm,创建一个agent文件,将agent解压的内容放到新创建的agent文件夹中
agent内容已经放入
数据库选型
- H2
自2015年以来,H2一直作为SkyWalking的默认存储选项,旨在简化用户首次安装的体验。其内存模式为用户提供了一种无需额外配置即可本地快速上手的方式,非常适合学习,但是在生产环境非常受限,比如H2的内存模式通常会在运行大约20分钟后丢失数据,更糟糕的是,这种行为没有任何预警,导致无法长期使用。所以官方从2025年宣布H2将不再作为存储选项被支持。取而代之的是BanyanDB
2025年的首次公告:永久移除H2存储选项 - MySQL
Skywalking一直支持MySQL为存储选项,MySQL对于中小规模的数据友好,部署和运维成本低,适合已有MySQL基础设施的团队,但是分库分表复杂度高,无法适应千亿级数据的分布式存储需求。但对时间序列数据的聚合查询效率远低于ES,复杂查询易成为瓶颈。适合学习和测试环境,或者数据量极小的环境。 - Elasticsearch
在2025年之前,ES一直作为官方推荐的生产环境使用的存储选项,ES基于倒排索引和分片机制,擅长处理海量时序数据的查询与聚合分析,可通过集群分片应对PB级数据存储需求。而且社区支持广泛,但是ES的运维成本较高,需要独立部署ES集群,对资源消耗大,使得ES的性价比不是很高。
高洪涛:从0到1打造开源项目 - BanyanDB
BanyanDB脱胎于SkyWalking社区,主要面向APM领域,专为处理Metrics(指标)、Tracing(追踪)、Logging(日志)三类可观测性数据设计。BanyanDB专为云原生架构设计,能够处理更大的工作负载,无需担心数据丢失,而且设置非常简单,降低了新用户的使用门槛。
作为SkyWalking的原生数据库,BanyanDB目前还处于高速研发的阶段。随着BanyanDB子项目的不断发展,SkyWalking官方宣布,BanyanDB 0.8已经完全生产可用,是生产环境的理想选择。
H2:早期默认/快速上手用,内存模式易丢数据(约20分钟),仅适合学习;官方已从2025年起移除支持,由 BanyanDB 替代方向。
MySQL:部署运维简单,适合中小规模/学习测试/已有MySQL团队;但分布式扩展和时序聚合查询能力弱,复杂查询易瓶颈。
Elasticsearch:曾为官方推荐生产存储,擅长海量时序/链路数据查询聚合与水平扩展(PB级);但运维和资源成本高。
BanyanDB:SkyWalking 原生/社区孵化的可观测数据库,面向 Metrics/Tracing/Logging
和云原生设计,配置简单、更贴合 APM,0.8 起生产可用,是新的生产理想选择。
配置
可以对端口号进行修改
/apache-skywalking-apm-bin/webapp/application.yml
serverPort:${SW_SERVER_PORT:-8080}# Comma seperated list of OAP addresses.oapServices:${SW_OAP_ADDRESS:-http://localhost:12800}zipkinServices:${SW_ZIPKIN_ADDRESS:-http://localhost:9412}11800: grpc端口, 接受SkyWalking Agent 的监控数据
12800: REST API端口, 提供 RESTful API 服务, 供 SkyWalking UI 或其他外部系统调用, 用于查询监控数据
修改存储数据类型
下载地址:https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/
/apache-skywalking-apm-bin/oap-libs放连接MySQL的jar包
先创建数据库
CREATEDATABASEskywalking;修改存储配置
/apache-skywalking-apm-bin/config/application.yml
storage:selector:${SW_STORAGE:mysql}mysql相关配置
windows启动:/apache-skywalking-apm-bin/bin/startup.bat
访问: http://127.0.0.1:port/marketplace
port是上面配置 serverPort: ${SW_SERVER_PORT:-8080}
第一次启动比较慢