一、SkyWalking核心介绍
1. 什么是SkyWalking?
Apache SkyWalking是一款国人主导开发的开源APM(应用性能管理)系统 ,2015年由吴晟创建,2017年进入Apache孵化器,2019年毕业成为Apache顶级项目。它通过分布式追踪、服务网格遥测分析、指标聚合和可视化一体化解决方案,提供分布式系统的观测性能力。
核心特点:
-
多语言自动探针:支持Java、.NET Core、Node.js、PHP、Golang等十余种语言
-
服务拓扑自动发现:动态绘制服务间调用关系图
-
细粒度性能分析:支持方法级代码执行追踪
-
多维度监控:整合Metrics、Logging、Tracing三大观测支柱
-
云原生友好:完美支持Kubernetes、Service Mesh环境
2. APM系统核心价值
传统监控系统(如Zabbix、Prometheus)与APM系统的对比:
维度 | 传统监控系统 | APM系统 |
---|---|---|
监控焦点 | 硬件/系统级指标 | 应用内部执行过程 |
数据粒度 | 服务级别 | 代码方法级别 |
核心能力 | 异常告警 | 性能瓶颈诊断 |
典型指标 | CPU/内存/磁盘使用率 | 调用链追踪、事务响应时间 |
问题定位深度 | 知道"有问题" | 知道"为什么有问题" |
SkyWalking通过分布式追踪技术,可以还原一个请求在微服务架构中的完整流转路径,精确到每个服务的代码执行耗时,这正是解决"慢请求"问题的关键。
二、技术架构深度解析
1. 整体架构组成

- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
数据流向:

核心组件:
-
Agent:驻留在应用进程内的探针,通过字节码增强技术收集数据
-
OAP Server:可集群部署的观测分析平台,负责数据聚合、计算和存储
-
Storage:支持Elasticsearch、MySQL、TiDB、H2等多种存储后端
-
UI:功能强大的可视化控制台
2. 探针工作原理
以Java探针为例,其通过Java Agent机制实现无侵入式埋点:
java
// 典型字节码增强示例(简化版)
public class TracingInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
@Override
protected ClassMatch enhanceClass() {
return byName("org.apache.dubbo.proxy.Invoker");
}
@Override
public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
// 方法拦截点定义
}
}
这种技术使得业务代码无需任何修改即可获得监控能力,相比CAT等需要代码埋点的方案具有明显优势。
三、竞品对比分析
主流APM系统功能对比
特性 | SkyWalking | Zipkin | Pinpoint | CAT |
---|---|---|---|---|
实现方式 | 字节码增强 | 拦截请求 | 字节码增强 | 代码埋点 |
代码侵入性 | 无 | 低 | 无 | 高 |
调用链粒度 | 方法级 | 接口级 | 方法级 | 代码级 |
JVM监控 | 支持 | 不支持 | 支持 | 支持 |
服务拓扑 | 自动生成 | 无 | 自动生成 | 需配置 |
存储扩展性 | 支持多DB | 有限 | HBase专用 | 复杂 |
告警功能 | 完善 | 无 | 基础 | 完善 |
性能基准测试
根据官方测试报告(单节点OAP,ES存储):

四、核心功能详解
1. 分布式追踪能力
-
全链路追踪:跨进程、跨线程的请求跟踪
-
智能采样:动态调整采样率平衡性能与数据完整性
-
异常标记:自动标识调用链中的错误节点
2. 服务拓扑分析
自动生成的服务依赖图可显示:
-
服务间调用关系
-
流量方向与强度
-
健康状态(颜色标识)
-
关键指标(成功率、延迟)
3. 性能剖析
sql
-- 示例:查询慢事务Top 5
SELECT service_name, avg_latency
FROM endpoint_avg
WHERE start_time > NOW() - 1h
ORDER BY avg_latency DESC
LIMIT 5
4. 告警体系
支持基于OLAP引擎的多维度告警规则:
-
服务响应时间阈值
-
错误率突增检测
-
服务心跳丢失
-
JVM内存溢出预警
告警渠道覆盖:
-
邮件
-
Webhook(支持钉钉、企业微信)
-
Slack
-
PagerDuty
五、典型应用场景
1. 微服务性能诊断
-
定位跨服务调用的性能瓶颈
-
分析分布式事务超时原因
-
识别不合理的服务依赖
2. 云原生环境监控
-
Kubernetes Pod间通信分析
-
Service Mesh(Istio/Linkerd)可观测性
-
容器资源使用关联分析
3. 生产环境运维
-
灰度发布效果验证
-
突发流量影响评估
-
容量规划数据支持
六、SkyWalking环境搭建
1.SkyWalking下载
下载地址:Downloads | Apache SkyWalking
Skywalking主要是下载两个包:SkyWalking APM和Java Agent,Skywalking APM提供后端服务和UI服务,Java Agent集成进应用进行数据收集传输。
SkyWalking APM

Java Agent

2.SkyWalking部署(Windows)
SkyWalking APM说明
SkyWalking APM解压后得到apache-skywalking-apm-bin文件,重点关注以下3个目录:

- bin目录下是启动脚本,一般用startup命令启动

- config目录下是配置文件,主要需要关注的是application.yml文件,里面有存储策略、服务端口及查询策略的配置信息。
Java Agent说明
Java Agent解压后得到skywalking-agent文件:

- skywalking-agent.jar:探针包,使用了java agent技术,可以拦截java应用的执行。
- plugins目录:这个目录下主要放日志采集的插件,并且支持自定义插件。skywalking官方已经开发了大部分框架的插件,例如springmvc、dubbo等等。这个设计给skywalking赋予了极强的扩展性。
- optional-plugins:备用插件库,这里的插件在执行时不会被加载,只有放在plugins目录下的插件才会被加载。这个目录相当于仓库,需要启用什么功能的日志采集,就把对应的插件拷贝到plugins目录。同理,如果想要不采集某种日志,就把对应的插件从plugins目录中删掉即可。
- config目录:这里是探针和插件的配置。比如说配置应用名称(会体现在UI中)。