SkyWalking - 支持的中间件清单:Spring Cloud、Dubbo、RocketMQ、ShardingSphere 等

SkyWalking - 支持的中间件清单:Spring Cloud、Dubbo、RocketMQ、ShardingSphere 等
在这里插入图片描述
👋 大家好,欢迎来到我的技术博客!
📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。
🎯 本文将围绕SkyWalking这个话题展开,希望能为你带来一些启发或实用的参考。
🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获!

文章目录

🌐 SkyWalking —— 全链路监控利器,支持 Spring Cloud、Dubbo、RocketMQ、ShardingSphere 等主流中间件

在微服务架构盛行的今天,系统之间的调用关系变得异常复杂。一次用户请求可能经过多个服务节点、消息队列、数据库分片、缓存中间件等组件,任何一个环节出现问题都可能导致整个链路失败或性能下降。传统的日志分析和单点监控已经无法满足现代分布式系统的可观测性需求。

这时候,Apache SkyWalking 作为一款开源的 APM(Application Performance Management)系统,应运而生,并迅速成为业界最受欢迎的全链路追踪与性能监控解决方案之一。

✅ SkyWalking 支持 Java、.NET、Node.js、Go、Python、PHP、Rust 等多种语言
✅ 支持自动探针(无需修改一行代码)
✅ 支持手动埋点(灵活定制)
✅ 支持 UI 可视化拓扑图、调用链、指标图表
✅ 支持告警、日志集成、指标聚合
✅ 社区活跃、文档完善、插件生态丰富

本文将围绕 SkyWalking 对主流中间件的支持能力 展开,重点介绍其对 Spring Cloud、Dubbo、RocketMQ、ShardingSphere 的深度集成方案,并附上可运行的 Java 示例代码、配置说明、以及可视化效果解读。同时,我们还将通过 mermaid 图表直观展示调用链路结构,帮助你构建完整的可观测性体系。


🚀 为什么选择 SkyWalking?

在众多 APM 工具中(如 Zipkin、Pinpoint、Jaeger),SkyWalking 凭借以下优势脱颖而出:

  • 无侵入式探针:通过 Java Agent 挂载即可自动采集数据,无需修改业务代码。
  • 丰富的插件生态:覆盖几乎所有主流框架和中间件。
  • 强大的 UI 界面:提供服务拓扑、调用链追踪、慢 SQL 分析、JVM 监控等。
  • 支持多语言:不仅仅是 Java,还支持 Go、Node.js、Python 等。
  • 社区驱动 & Apache 顶级项目:稳定、安全、持续演进。

官方地址 👉 https://skywalking.apache.org/


🧩 SkyWalking 架构概览

SkyWalking 采用模块化设计,主要由以下几个核心组件构成:

Tracing Data

Java Application

SkyWalking Agent

OAP Server

Storage: Elasticsearch/H2/MySQL

UI Dashboard

User Browser

  • Agent:部署在应用 JVM 中,负责采集 Trace、Metrics、Log 等数据。
  • OAP Server:接收并处理来自 Agent 的数据,进行聚合、存储、告警计算。
  • Storage:支持 Elasticsearch、MySQL、H2 等多种后端存储。
  • UI:基于 Web 的可视化界面,用于展示拓扑、调用链、指标等。

📦 环境准备

1. 下载 SkyWalking

前往官网下载最新版本(建议使用 9.x 版本):

👉 https://skywalking.apache.org/downloads/

解压后目录结构如下:

apache-skywalking-apm-x.x.x ├── agent/ # 探针目录 ├── config/ # OAP 配置文件 ├── oap-libs/ # OAP 依赖库 ├── webapp/ # UI 应用 ├── bin/ # 启动脚本 └── ... 

2. 启动 OAP 和 UI

进入 bin 目录:

# Linux/Mac ./oapService.sh ./webappService.sh # Windows oapService.bat webappService.bat 

默认 UI 地址:http://localhost:8080


☁️ Spring Cloud 集成示例

Spring Cloud 是目前最流行的微服务框架之一,SkyWalking 对其支持非常完善,包括 Feign、RestTemplate、Gateway、Eureka、Nacos 等组件。

Maven 依赖(非必须,Agent 自动注入)

虽然 SkyWalking 使用 Java Agent 实现无侵入监控,但如果你想手动埋点或自定义 Span,可以引入:

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.13.0</version></dependency>

启动参数配置

在你的 Spring Boot 应用启动命令中添加:

-javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=localhost:11800 

例如:

java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \-Dskywalking.agent.service_name=user-service \-Dskywalking.collector.backend_service=127.0.0.1:11800 \-jar user-service.jar 

示例代码:Feign 调用链追踪

假设你有两个服务:user-serviceorder-service,通过 Feign 远程调用。

// OrderServiceClient.java@FeignClient(name ="order-service", url ="http://localhost:8082")publicinterfaceOrderServiceClient{@GetMapping("/orders/{userId}")List<Order>getOrdersByUserId(@PathVariable("userId")Long userId);}// UserController.java@RestController@RequestMapping("/users")publicclassUserController{@AutowiredprivateOrderServiceClient orderServiceClient;@GetMapping("/{id}")publicUsergetUserWithOrders(@PathVariableLong id){User user = userService.findById(id);List<Order> orders = orderServiceClient.getOrdersByUserId(id); user.setOrders(orders);return user;}}

✅ 启动后访问 http://localhost:8081/users/1,你将在 SkyWalking UI 中看到完整的调用链:

order-serviceuser-service用户浏览器order-serviceuser-service用户浏览器GET /users/1Feign → GET /orders/1返回订单列表返回用户+订单信息

你可以在 UI 中查看:

  • 每个 Span 的耗时
  • HTTP 状态码
  • 异常堆栈(如有)
  • 跨服务上下文传递(TraceId 一致)

🔗 Dubbo 集成示例

Dubbo 是阿里巴巴开源的高性能 RPC 框架,在国内企业广泛使用。SkyWalking 提供了对 Dubbo 2.7+ 的完整支持。

启动参数(同 Spring Cloud)

只需确保 -javaagent 参数正确挂载即可,无需额外配置。

示例代码:Provider & Consumer

Provider 端(暴露服务)
// UserServiceImpl.java@Service(version ="1.0.0")publicclassUserServiceImplimplementsUserService{@OverridepublicStringsayHello(String name){return"Hello, "+ name +" from Dubbo Provider!";}}
Consumer 端(调用服务)
// UserController.java@RestControllerpublicclassUserController{@Reference(version ="1.0.0")privateUserService userService;@GetMapping("/hello/{name}")publicStringhello(@PathVariableString name){return userService.sayHello(name);}}

✅ 访问 http://localhost:8083/hello/Alice,SkyWalking 将自动捕获 Dubbo 调用链:

dubbo-providerdubbo-consumer用户浏览器dubbo-providerdubbo-consumer用户浏览器GET /hello/AliceDubbo invoke sayHello("Alice")返回 "Hello, Alice..."返回响应

你可以在 UI 中看到:

  • Dubbo 接口名、方法名、参数类型
  • 调用耗时、成功/失败状态
  • 服务版本号(version)、分组(group)等元数据

🚀 RocketMQ 集成示例

RocketMQ 是阿里开源的分布式消息中间件,SkyWalking 支持对其生产者和消费者的全链路追踪。

添加依赖(可选,Agent 已内置插件)

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-mq</artifactId><version>8.13.0</version></dependency>

生产者示例

@RestControllerpublicclassMessageController{@AutowiredprivateRocketMQTemplate rocketMQTemplate;@GetMapping("/send/{msg}")publicStringsendMessage(@PathVariableString msg){Message<String> message =MessageBuilder.withPayload(msg).build(); rocketMQTemplate.send("TestTopic", message);return"Message sent: "+ msg;}}

消费者示例

@Component@RocketMQMessageListener(topic ="TestTopic", consumerGroup ="test-group")publicclassTestConsumerimplementsRocketMQListener<String>{@OverridepublicvoidonMessage(String message){System.out.println("Received message: "+ message);// 模拟业务处理耗时try{Thread.sleep(500);}catch(InterruptedException e){}}}

✅ 调用 http://localhost:8084/send/HelloRocketMQ,SkyWalking 将追踪完整的消息流转过程:

consumer-appRocketMQ Brokerproducer-app用户浏览器consumer-appRocketMQ Brokerproducer-app用户浏览器GET /send/HelloRocketMQ发送消息到 TestTopic推送消息处理消息(sleep 500ms)ACK返回 "Message sent"

你可以在 UI 中看到:

  • 消息 Topic、Tag、Key
  • 生产者/消费者服务名
  • 消息处理耗时
  • 是否发生重试或异常

🧱 ShardingSphere 集成示例

ShardingSphere 是一套开源的分布式数据库中间件,提供分库分表、读写分离、数据加密等功能。SkyWalking 支持对其 SQL 执行的监控与追踪。

配置数据源(ShardingSphere-JDBC)

# application.ymlspring:shardingsphere:datasource:names: ds0,ds1 ds0:type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0?useSSL=false&serverTimezone=UTCusername: root password: root ds1:type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTCusername: root password: root rules:sharding:tables:t_order:actual-data-nodes: ds$->{0..1}.t_order_$->{0..1}table-strategy:standard:sharding-column: order_id sharding-algorithm-name: table-inline key-generate-strategy:column: order_id key-generator-name: snowflake sharding-algorithms:table-inline:type: INLINE props:algorithm-expression: t_order_$->{order_id % 2}key-generators:snowflake:type: SNOWFLAKE 

示例 Controller

@RestController@RequestMapping("/orders")publicclassOrderController{@AutowiredprivateOrderRepository orderRepository;@PostMappingpublicOrdercreateOrder(@RequestBodyOrder order){return orderRepository.save(order);}@GetMapping("/{id}")publicOrdergetOrder(@PathVariableLong id){return orderRepository.findById(id).orElse(null);}}

✅ 调用创建订单接口,SkyWalking 将自动记录:

  • SQL 语句内容
  • 执行耗时
  • 影响行数
  • 所属数据源(ds0/ds1)
  • 分表名称(t_order_0 / t_order_1)

你可以在 UI 的 “Database” 标签页中看到所有 SQL 执行情况,包括慢查询分析。

45%30%25%SQL 执行分布SELECT * FROM t_order_0 WHERE order_id = ?INSERT INTO t_order_1 (...) VALUES (...)UPDATE t_order_0 SET status = ? WHERE id = ?


🛠️ 自定义埋点与 Trace 上下文传递

虽然 SkyWalking Agent 能自动采集大部分数据,但在某些场景下(如异步线程、自定义任务、第三方 SDK),你可能需要手动埋点。

手动创建 Span

importorg.apache.skywalking.apm.toolkit.trace.TraceContext;importorg.apache.skywalking.apm.toolkit.trace.Trace;importorg.apache.skywalking.apm.toolkit.trace.Tag;@RestControllerpublicclassCustomTraceController{@GetMapping("/custom")@Trace@Tag(key ="custom.tag", value ="custom.value")publicStringcustomTrace(){// 获取当前 TraceIdString traceId =TraceContext.traceId();System.out.println("Current TraceId: "+ traceId);// 模拟业务逻辑doHeavyWork();return"Custom trace completed with TraceId: "+ traceId;}privatevoiddoHeavyWork(){try{Thread.sleep(1000);}catch(InterruptedException e){Thread.currentThread().interrupt();}}}

在异步线程中传递上下文

@GetMapping("/async")publicStringasyncTrace()throwsInterruptedException,ExecutionException{String traceId =TraceContext.traceId();System.out.println("Main thread TraceId: "+ traceId);CompletableFuture<String> future =CompletableFuture.supplyAsync(()->{// 手动激活 Trace 上下文TraceContext.putCorrelation("async.context","true");try{Thread.sleep(500);}catch(InterruptedException e){Thread.currentThread().interrupt();}return"Async task done in TraceId: "+TraceContext.traceId();});return future.get();}

✅ 上述代码中,异步线程中的操作仍会关联到原始 TraceId,确保调用链完整。


📊 SkyWalking UI 功能详解

登录 http://localhost:8080 后,你将看到以下核心功能模块:

1. 仪表盘(Dashboard)

展示全局性能指标:TPS、响应时间、成功率、JVM 内存/CPU 使用率等。

2. 拓扑图(Topology Map)

自动生成服务间调用关系图,支持点击钻取:

user-service

order-service

message-producer

RocketMQ

message-consumer

sharding-ds0

sharding-ds1

3. 追踪(Traces)

查看具体某次请求的完整调用链,支持按服务、端点、状态码、耗时筛选。

4. 性能剖析(Profile)

对慢请求进行 CPU 方法级采样,定位性能瓶颈。

5. 日志(Logs)

集成 Logback/Log4j2,支持按 TraceId 关联日志。

6. 告警(Alarms)

配置规则,如“5分钟内错误率 > 5%”触发邮件/Webhook 告警。


⚙️ 高级配置技巧

1. 自定义采样率

编辑 agent/config/agent.config

# 默认采样率 100%,可调整为 10% 降低开销 agent.sample_n_per_3_secs=10 

2. 忽略特定端点

# 不追踪健康检查接口 agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.gif,/health,/actuator/** 

3. 自定义服务实例名

-Dskywalking.agent.instance_name=${HOSTNAME}

4. 集成日志框架(Logback)

logback-spring.xml 中添加:

<encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>

其中 %X{tid} 会输出 SkyWalking TraceId,便于日志关联。


🌍 多语言 & 多协议支持

除了 Java,SkyWalking 还支持:

  • Go:通过 go2sky SDK
  • Node.js:通过 skywalking-backend-js
  • Python:通过 skywalking-python
  • .NET:通过 SkyAPM-dotnet
  • PHP:通过 skywalking-php-sdk
  • Rust:实验性支持

跨语言调用也能保持 TraceId 传递,实现全栈可观测性。

官方多语言 SDK 文档 👉 https://skywalking.apache.org/docs/


🧪 性能压测与调优建议

SkyWalking Agent 默认性能损耗 < 10%,但在高并发场景下仍需优化:

1. 调整缓冲区大小

# agent.config buffer.channel_size=5 buffer.buffer_size=1000 

2. 关闭不必要的插件

# 禁用 Redis 插件(如未使用) plugin.redis.trace_redis_parameters=false 

3. 使用 gRPC 压缩

collector.grpc_compression=true 

4. 存储层优化(Elasticsearch)

  • 使用 SSD 磁盘
  • 调整分片数与副本数
  • 定期清理过期索引

🧭 与其他监控系统对比

特性SkyWalkingZipkinPinpointJaeger
无侵入探针❌(需手动埋点)
UI 功能丰富度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
多语言支持❌(仅 Java)
拓扑图
日志集成
社区活跃度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

结论:如果你追求开箱即用、功能全面、UI 友好、生态活跃,SkyWalking 是首选。


🧩 插件开发入门(简要)

SkyWalking 支持自定义插件扩展,适用于私有协议或未支持的框架。

基本步骤:

  1. 继承 ClassEnhancePluginDefine
  2. 定义拦截点(构造函数、方法入口/出口)
  3. 实现 InstanceMethodsAroundInterceptor
  4. 打包为 JAR 放入 agent/plugins/

官方插件开发指南 👉 https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/readme/


💡 最佳实践总结

  1. 生产环境开启采样:避免全量采集造成性能压力。
  2. 统一命名规范:服务名、实例名要有意义,便于排查。
  3. 结合日志系统:通过 TraceId 快速定位问题日志。
  4. 设置告警规则:及时发现异常流量或错误突增。
  5. 定期归档数据:避免存储无限增长。
  6. 培训团队使用 UI:提升整体排障效率。

🎁 结语

Apache SkyWalking 不仅仅是一个“链路追踪工具”,它是一个完整的可观测性平台,涵盖 Metrics、Tracing、Logging、Profiling、Alerting 五大支柱。

无论你是使用 Spring Cloud 构建微服务,还是 Dubbo 实现高性能 RPC,或是 RocketMQ 处理异步消息、ShardingSphere 管理海量数据,SkyWalking 都能为你提供透明、精准、实时的性能洞察。

不要再让“黑盒”困扰你的系统,从今天开始,给你的应用装上“天眼” 👁️ —— Apache SkyWalking!


📌 本文所有示例代码均可在本地搭建环境运行,建议配合官方文档进行深入学习。
📘 官方文档:https://skywalking.apache.org/docs/
🧑‍💻 社区论坛:https://github.com/apache/skywalking/discussions (注:此处仅为示意,实际请访问官网社区入口)
🐦 Twitter 更新:@ASFSkyWalking

希望这篇长文能帮你全面掌握 SkyWalking 在主流中间件中的实战应用!🎉 如果你觉得有用,欢迎分享给团队或同事,一起构建更稳定、更高效的分布式系统!🚀


🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨

Read more

【MySQL】基础入门大全

【MySQL】基础入门大全

目录 一、安装流程 二、SQL语句 三、多种查询方法 四、理解数据库 五、总结 温馨提示:                 我的Linux环境为:Ubuntu 20.04 LTS                 我的mysql版本为:Ver 8.0.42 for Linux on x86_64                 为了方便操作,以下大部分操作使用超级用户身份 一、安装流程 前置:获取 MySQL APT 配置包,用于给系统添加正确的软件源 下载官网:MySQL :: Begin Your Download 下载不要解压,通过 rz 指令传输到服务器中 开始安装:(安装过程忘记截图了,相当于省流了) 1.

By Ne0inhk

MySQL 从入门到精通完全教程

目录 1. 前言 2. MySQL 基础认知 3. MySQL 安装与配置 4. MySQL 核心语法 5. 高级查询技巧 6. MySQL 函数 7. 数据约束 8. 事务管理 9. 索引优化 10. 存储过程与函数 11. 用户与权限管理 12. 性能优化实战 13. 常见问题与解决方案 1. 前言 1.1 什么是MySQL? MySQL 是一款开源的关系型数据库管理系统(RDBMS),基于SQL(结构化查询语言)实现数据管理,广泛应用于Web开发(如PHP+MySQL、Python+MySQL),特点是轻量、高效、跨平台、

By Ne0inhk
MySQL 进阶:库与表的DDL核心操作全指南(含实战案例)

MySQL 进阶:库与表的DDL核心操作全指南(含实战案例)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 数据库(库)的核心操作 * 1.1 创建数据库:指定字符集与校验规则 * 1.1.1 语法格式 * 1.1.2 实战案例 * 1.2 字符集与校验规则:影响查询和排序 * 1.2.1 查看系统默认配置 * 1.2.2 查看支持的字符集和校验规则 * 1.2.3 校验规则的实际影响 * 1.3 操纵数据库:查询、修改、

By Ne0inhk
SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析

SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析

目录 一、前言 二、AI大模型会话记忆介绍 2.1 AI 大模型的会话记忆是什么 2.2 AI 大模型为什么需要会话记忆 2.3 AI 大模型会话记忆常用实现方案 2.4 LangChain4j 会话记忆介绍 2.4.1 LangChain4j 会话记忆介绍 2.4.2 LangChain4j 会话记忆类型 三、Langchain4j 会话记忆操作案例使用 3.1 前置准备 3.1.1 导入依赖文件 3.1.2 添加配置文件 3.1.3 前置案例 3.

By Ne0inhk