news 2025/12/23 18:44:37

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从入门到实践:玩转分布式链路追踪利器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技术,在类加载阶段动态注入监控逻辑,无需改动源码:

// Skywalking通过javaagent在类加载时动态注入监控代码// 不需要修改业务代码publicclassSkywalkingAgent{publicstaticvoidpremain(Stringargs,Instrumentationinst){// 1. 注册类文件转换器inst.addTransformer(newClassFileTransformer(){publicbyte[]transform(...){// 2. 使用ByteBuddy/Javassist修改字节码// 3. 在方法入口/出口插入监控逻辑}});}}

这种方式既保证了监控的全面性,又实现了对业务的完全透明。关于javaagent知识点请另外自行查阅资料。

3.SkyWalking 安装与部署

基于上面对Skywalking架构原理的介绍,相信大家已经对它已经有了一定的认识了解,接下来我们就来开始搭建一个强大的监控系统。

3.1 下载安装包

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

    cluster:# 默认单例部署,也可以集群部署,比如说通过注册中心nacosselector:${SW_CLUSTER:standalone}storage:# 数据存储默认是内存数据库h2,生产环境一般推荐elasticsearch,官方也强烈建议selector:${SW_STORAGE:h2}

    由于我是本地搭建演示,就完全按照默认的即可,没有做任何修改

  • **webapp:**UI服务,默认端口是8080,但一般这个端口被占用了,所以需要修改一下webapp/application.yml,我这里改成:8181

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 启动服务

# 启动OAP后端bin/oapService.sh# 启动UI前端bin/webappService.sh

启动后访问http://localhost:8181即可进入SkyWalking监控控制台。

4.Spring Boot接入指南

在启动命令中添加Java Agent参数

-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等日志框架的整合,我们将在后续文章中继续探讨。欢迎关注交流,共同进步

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 18:33:35

Aspera传输相比FTP有哪些显著优势?

在日常工作和跨国协作中,大规模数据传输是许多企业与团队面临的关键挑战。传统的FTP(文件传输协议)长期以来被广泛使用,但随着数据量的爆发式增长及对传输效率要求的提升,其局限性日益凸显。IBM Aspera作为高速传输技术…

作者头像 李华
网站建设 2025/12/23 18:33:28

学校想做云桌面的话需要注意什么?

在数字化转型的浪潮中,云桌面凭借灵活访问、集中管理、数据安全等优势,正成为政府、医疗、金融、能源等行业信息化建设的重要方向。然而,构建云桌面体系并非简单的设备上云,其中涉及架构设计、技术选型、安全合规、运维管理等多重…

作者头像 李华
网站建设 2025/12/23 18:26:52

数字孪生技术驱动现代水利智能创新建设

2023年,广东北江流域通过数字孪生平台精准预演洪峰轨迹,提前72小时启动分洪预案,避免经济损失超10亿元;2024年,某水利利用数字孪生引擎模拟村落淹没场景,为人员转移提供分钟级决策支持……这些案例背后&…

作者头像 李华
网站建设 2025/12/23 18:24:28

特征值类重大升级

这个 特征值主信息类 std::variant 载体方案,在保持原有架构优势的同时,成功实现了值语义、内嵌存储、高性能访问、易序列化,而且完全兼容全局唯一、去重、共享、融合、索引等核心能力。 是一次成功的架构升级。 为什么这次彻底没问题了&…

作者头像 李华
网站建设 2025/12/23 18:23:14

【MyBatis】MyBatis操作动态sql MyBatisGenerator

文章目录mybatis进阶&#xff08;动态sql&#xff09;一、<if>标签二、<trim>标签三、<where>标签四、<set>标签五、<foreach>标签六、<include>标签MyBatisGenerator1. 引入插件2. 添加 generatorConfig.xml 并修改3. 生成文件mybatis进阶…

作者头像 李华