1.概述
在当今微服务架构盛行的时代,一个看似简单的前端请求,背后往往涉及数十个甚至上百个服务的协同调用。当系统出现性能问题或异常时,仅靠传统日志监控往往如同"大海捞针",难以迅速定位问题根源。
正是在这样的背景下,SkyWalking ------ 一款优秀的国产开源分布式链路追踪与性能监控系统应运而生。该项目最初由吴晟(华为开发者)个人开源,于2017年进入Apache孵化器,并最终成为Apache顶级项目。截至目前,SkyWalking在GitHub上已收获超过25k的Star,足以证明其强大的影响力和广泛的应用前景
1.1 SkyWalking 是什么?
SkyWalking 是一个开源的可观测性平台,用于从服务、云原生基础设施中收集、分析、聚合和可视化数据。它提供了清晰的分布式系统观测能力,并支持跨云、跨集群的统一监控。作为现代化的应用性能监控(APM)系统,SkyWalking 尤其适合云原生和基于容器的微服务架构。
核心优势:
- 无侵入探针:通过Java Agent字节码增强实现监控,无需修改业务代码
- 高性能通信:采用gRPC进行数据传输,效率高、延迟低
- 功能全面:支持链路追踪、JVM监控、服务依赖分析、告警等
- 生态友好:完美支持Spring Cloud、Spring Boot等主流微服务框架
典型应用场景:
- 性能瓶颈诊断:快速定位慢查询、高延迟接口
- 全链路追踪:可视化展示请求在微服务间的完整调用路径
- 服务依赖分析:自动绘制服务拓扑,识别关键依赖与瓶颈点
- 异常根因定位:结合链路、指标与日志,迅速定位故障源头
- 容量规划参考:基于历史性能数据进行资源预测与扩容决策
1.2 主流链路追踪框架对比
随着微服务架构的普及,分布式链路追踪技术也日趋成熟,目前主流的开源方案包括:
- Spring Cloud Sleuth + Zipkin:需代码埋点,侵入性强
- 大众点评 Cat:同样需要侵入式埋点,接入成本较高
- Pinpoint:韩国团队开发,同样基于字节码增强,无侵入
- SkyWalking:国产开源,无侵入、性能好、社区活跃
SkyWalking 与 Pinpoint 均通过字节码注入实现监控,对业务代码零侵入,是目前企业级APM系统的优选方案。对于国内开发者而言,SkyWalking 具有中文文档丰富、社区响应快、与国内技术栈整合度高等优势,更值得推荐。
2.SkyWalking 架构与原理
SkyWalking 核心架构组件逻辑上分为四部分: 探针(Agent)、 平台后端(OAP),存储(Storage)和用户界面(UI)

- 探针(Agent): 收集监控数据, 将数据格式化为 SkyWalking 适用的格式,然后传递给中间的OAP服务器。
- OAP: 全称即图上的Observabilitiy Analysis Platform, 完成数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程
- 存储 通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
- UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
SkyWalking 利用Java Agent技术,在类加载阶段动态注入监控逻辑,无需改动源码:
typescript
// Skywalking通过javaagent在类加载时动态注入监控代码
// 不需要修改业务代码
public class SkywalkingAgent {
public static void premain(String args, Instrumentation inst) {
// 1. 注册类文件转换器
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(...) {
// 2. 使用ByteBuddy/Javassist修改字节码
// 3. 在方法入口/出口插入监控逻辑
}
});
}
}
这种方式既保证了监控的全面性,又实现了对业务的完全透明。关于javaagent知识点请另外自行查阅资料。
3.SkyWalking 安装与部署
基于上面对Skywalking架构原理的介绍,相信大家已经对它已经有了一定的认识了解,接下来我们就来开始搭建一个强大的监控系统。
3.1 下载安装包
去官网:skywalking.incubator.apache.org/downloads/ 下载,我这里选择版本是: v9.7.0

3.2 解压与调整配置
tar -zxvf apache-skywalking-apm-9.7.0.tar.gz
解压之后有一个文件夹,文件信息如下:

-
bin:存放一些可执行的脚本,比如说启动Skywalking OAP服务的脚本
-
config: 存放配置文件,这里是我们需要关注的,有OAP服务的配置文件
applicaiton.yml。配置项太多了所以这里我随便列举两项看看rubycluster: # 默认单例部署,也可以集群部署,比如说通过注册中心nacos selector: ${SW_CLUSTER:standalone} storage: # 数据存储默认是内存数据库h2,生产环境一般推荐elasticsearch,官方也强烈建议 selector: ${SW_STORAGE:h2}由于我是本地搭建演示,就完全按照默认的即可,没有做任何修改
-
webapp: UI服务,默认端口是
8080,但一般这个端口被占用了,所以需要修改一下webapp/application.yml,我这里改成:8181
ruby
serverPort: ${SW_SERVER_PORT:-8181}
# Comma seperated list of OAP addresses.
oapServices: ${SW_OAP_ADDRESS:-http://localhost:12800}
zipkinServices: ${SW_ZIPKIN_ADDRESS:-http://localhost:9412}
3.3 启动服务
bash
# 启动OAP后端
bin/oapService.sh
# 启动UI前端
bin/webappService.sh
启动后访问 http://localhost:8181 即可进入SkyWalking监控控制台。

4.Spring Boot接入指南
在启动命令中添加Java Agent参数
ini
-javaagent:/Users/shepherdmy/skywalking/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=shepherd-demo01-service
-Dskywalking.collector.backend_service=localhost:11800
项目启动成功之后,Skywalking会监控到一个名为shepherd-demo01-service的服务,如上图所示。可看到对应的服务名称、实例、接口调用链路等信息
- 服务概览:展示服务负载量、接口请求平均响应时间、成功率等关键指标
点击服务名进入监控指标概览页:

- 实例详情:查看实例下的监控指标信息,如JVM内存、CPU、GC等情况
点击 Instance,可以查到该服务的实例列表

点击实例名进入,可以查看这个实例下的监控信息:

查看实例的jvm信息:

- 查看EndPoint端点信息
端点可以简单理解为是被监控服务所接收的请求。

点击GET:/user/page端点进去,可以查看这个请求的监控信息:

该请求GET:/user/page逻辑是先查询Redis,有缓存数据就直接返回,没有再根据参数去数据库MySQL查询数据存入Redis之后返回,这里详细展示了请求的整个调用链路,非常清晰直观。
- 拓扑图:可视化服务间依赖关系

5.总结
SkyWalking 提供多层级的监控指标,助力全方位系统可观测:
| 层级 | 监控指标示例 |
|---|---|
| 服务级别 | P99/P95延迟、请求量、错误率 |
| 实例级别 | CPU使用率、JVM堆内存、线程数、GC次数 |
| 接口端点 | 慢接口TOP10、错误接口TOP5、调用链详情 |
| 数据库 | 慢SQL查询、连接池状态、执行时间分布 |
SkyWalking 作为一款开源APM系统,凭借其无侵入的设计 、卓越的性能表现 以及活跃的中文社区,已成为众多企业微服务监控的首选方案。无论是开发调试、性能优化,还是线上故障排查,SkyWalking 都能提供强大的数据支持和可视化能力。
合理部署与使用SkyWalking,不仅能提升系统稳定性,还能显著降低运维复杂度,是现代分布式系统可观测性建设中不可或缺的一环。
本文初步介绍了SkyWalking的核心概念、部署流程与接入实践,关于微服务链路追踪的更深层原理、Trace与Span的组成、以及与Log4j2/Logback等日志框架的整合,我们将在后续文章中继续探讨。欢迎关注交流,共同进步