【微服务】Spring Cloud 集成 SkyWalking 实现全链路追踪
在微服务架构中,由于服务数量多、调用关系复杂,监控和追踪每个请求在不同服务间的流转变得至关重要。SkyWalking 是一款开源的应用性能监控 (APM) 系统,可以帮助开发者实现全链路追踪。本文将详细介绍如何在 Spring Cloud 和 Spring Boot 项目中集成 SkyWalking,实现全链路追踪。
先分享一套我自己逐字写的、深入浅出、细致易懂的高频面试题详解,旨在以一站式刷题 + 解惑的方式帮你提升学习效率,需要的请自取。
强烈建议近期有求职诉求的Javaer,前端,数据库好好看看。
什么是 SkyWalking

SkyWalking 是一款强大的 APM 工具,用于收集、聚合和分析分布式系统的性能数据和调用链路。其主要功能包括:
- 全链路追踪:跟踪请求在各个微服务中的调用链路。
- 性能监控:监控各个服务的性能指标,如响应时间、吞吐量等。
- 报警:基于预定义规则对异常情况进行报警。
SkyWalking 的架构
SkyWalking 主要由以下几个部分组成:
- Agent:嵌入到应用程序中的探针,用于收集性能数据和调用链信息。
- Collector:数据收集和分析的后台服务。
- Storage:存储收集到的监控数据。
- UI:提供数据展示和分析的界面。
集成步骤
1. SkyWalking 环境准备
下载和安装 SkyWalking
前往 Apache SkyWalking 官方网站下载最新版本,并解压。
配置 SkyWalking
进入 config 目录,修改 application.yml 文件进行网络配置和存储配置(如使用 Elasticsearch/MongoDB 等存储)。
启动 SkyWalking 后台服务:
./bin/startup.sh
2. Spring Cloud 和 Spring Boot 项目中集成 SkyWalking
引入依赖
在 Spring Cloud 项目和 Spring Boot 项目的 pom.xml 文件中添加 SkyWalking 的插件依赖:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-sniffer</artifactId>
<version>8.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.8.0</version>
</dependency>
添加 Agent
下载 SkyWalking Java agent 包,将其解压缩,并将 skywalking-agent.jar 放置到便于管理的位置。
配置 Agent
在 Spring Cloud 和 Spring Boot 项目中,通过 JVM 参数指定 SkyWalking agent:
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=your-service-name
-Dskywalking.collector.backend_service=IP:PORT
- /path/to/skywalking-agent/ 替换为实际路径。
- your-service-name 替换为该微服务的实际名称。
- IP:PORT 替换为 SkyWalking Collector 的地址。
日志集成
为了更好地追踪和分析日志,可以将 SkyWalking 与 Logback 集成。在 src/main/resources 目录下添加或修改 logback-spring.xml 文件:
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="skywalking" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.SkyWalkingLogBackAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console"/>
<appender-ref ref="skywalking"/>
</root>
</configuration>
3. 启动微服务


确保所有微服务均已正确配置 SkyWalking agent,并启动微服务。在启动参数中加入 -javaagent 配置即可:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=my-service -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar my-service.jar
4. 验证集成效果
访问 SkyWalking UI 界面:通常为 http://localhost:8080/ui
在 SkyWalking UI 中,可以查看微服务的调用链路、性能指标和日志信息。如果配置正确,你应该能够看到各个微服务的调用关系和性能指标。
使用示例

假设我们有两个 Spring Boot 微服务:service-a 和 service-b,service-a 调用 service-b 进行某些处理。
1. 创建service-a
@SpringBootApplication
@RestController
public class ServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAApplication.class, args);
}
@Autowired
private RestTemplate restTemplate;
@GetMapping("/callB")
public String callServiceB() {
return restTemplate.getForObject("http://localhost:8081/hello", String.class);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2. 创建service-b
@SpringBootApplication
@RestController
public class ServiceBApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceBApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Hello from Service B";
}
}
3. 配置和启动
按照前文述步骤为 service-a 和 service-b 添加 SkyWalking agent,并启动两个服务:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=service-a -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar service-a.jar
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=service-b -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar service-b.jar
访问
http://localhost:8080/callB 即可触发服务间调用。在 SkyWalking UI 中可以看到从 service-a 到 service-b 的完整调用链路。
总结
通过集成 SkyWalking 到 Spring Cloud 和 Spring Boot 项目中,我们可以实现全链路追踪,提高系统的可观测性和问题诊断能力。SkyWalking 提供了强大的监控和分析能力,帮助我们在复杂的微服务架构中快速定位性能瓶颈和异常问题。希望通过本文的介绍,你能顺利地在项目中集成 SkyWalking,提升团队的开发运维效率