从入门到实践:玩转分布式链路追踪利器SkyWalking

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. 全链路追踪:可视化展示请求在微服务间的完整调用路径
  3. 服务依赖分析:自动绘制服务拓扑,识别关键依赖与瓶颈点
  4. 异常根因定位:结合链路、指标与日志,迅速定位故障源头
  5. 容量规划参考:基于历史性能数据进行资源预测与扩容决策

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。配置项太多了所以这里我随便列举两项看看

    ruby 复制代码
    cluster:
      # 默认单例部署,也可以集群部署,比如说通过注册中心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等日志框架的整合,我们将在后续文章中继续探讨。欢迎关注交流,共同进步

相关推荐
涡能增压发动积21 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o21 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
行乾21 小时前
鸿蒙端 IMSDK 架构探索
架构·harmonyos
于慨21 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz21 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg32132121 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung21 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald21 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川21 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java