使用 Apache SkyWalking 进行 Spring Cloud 应用的分布式追踪与监控:完整教程

使用 Apache SkyWalking 进行 Spring Cloud 应用的分布式追踪与监控:完整教程

SkyWalking 是一款开源的分布式追踪、性能监控和诊断平台,适用于微服务、云原生和容器化应用。它能够在分布式系统中收集和分析各个服务之间的调用关系和性能数据,从而帮助开发者定位性能瓶颈和故障。Spring Cloud 是一组用于构建分布式系统的工具和框架,而将 SkyWalking 集成到 Spring Cloud 应用中可以帮助你实现对整个系统的监控和诊断。

准备工作

确保你已经安装并配置了以下工具和服务:

  • Java 8 或更高版本
  • Apache Maven
  • SkyWalking 后端服务,包括 SkyWalking OAP 和 SkyWalking UI

创建 Spring Cloud 项目

如果你还没有 Spring Cloud 项目,可以使用 Spring Initializr 创建一个新的 Spring Cloud 项目。确保选择 Spring Web 和 Spring Cloud 相关的依赖项。

你可以通过PowerShell(管理员)用以下命令来生成一个新的 Spring Cloud 项目:

powershell 复制代码
# 定义 Spring Initializr 的 URL 和输出文件名
$url = "https://start.spring.io/starter.zip"
$outputFile = "demo.zip"

# 定义 POST 请求的数据
$body = @{
    dependencies = "web,cloud-starter"
    groupId = "com.example"
    artifactId = "demo"
    packageName = "com.example.demo"
    name = "demo"
    description = "Demo project for Spring Boot"
    type = "maven-project"
	javaVersion = "11"
    bootVersion = "3.3.0"
}

# 将 POST 数据编码为 application/x-www-form-urlencoded 格式
$formFields = $body.GetEnumerator() | ForEach-Object { "$($_.Key)=$($_.Value)" }
$formBody = [string]::Join("&", $formFields)

# 发送 POST 请求并下载文件
Invoke-WebRequest -Uri $url -Method POST -Body $formBody -ContentType "application/x-www-form-urlencoded" -OutFile $outputFile

# 检查是否成功下载
if (!(Test-Path $outputFile)) {
    Write-Host "Error: Failed to download $outputFile"
    exit 1
}

# 解压缩文件到当前目录
Expand-Archive -Path $outputFile -DestinationPath "demo"

# 删除压缩包
Remove-Item $outputFile

Write-Host "Project downloaded and extracted successfully."

添加 SkyWalking 依赖

在 pom.xml 文件中添加 SkyWalking 的依赖:

xml 复制代码
<dependencies>
    <!-- Other dependencies -->
    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-agent-core</artifactId>
        <version>8.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-agent-spring-boot-starter</artifactId>
        <version>8.9.0</version>
    </dependency>
</dependencies>

配置 SkyWalking Agent

在 src/main/resources 目录下创建 skywalking-agent.config 配置文件,添加以下配置:

bash 复制代码
SkyWalking agent configurations
agent.service_name=${spring.application.name}
collector.backend_service=127.0.0.1:11800
logging.level=DEBUG

确保 collector.backend_service 指向你的 SkyWalking Collector 服务的地址和端口。

配置 Spring Cloud 应用

在 src/main/resources 目录下找到或创建 application.properties 文件,添加以下配置:

bash 复制代码
spring.application.name=my-spring-cloud-app
server.port=8080

准备 SkyWalking Agent

下载 SkyWalking Agent,并将其解压到一个目录。你可以从 SkyWalking 官方下载页面 获取最新版本。

解压后,你会得到一个 skywalking-agent 目录,其中包含 skywalking-agent.jar 和 config 目录。

启动 Spring Cloud 应用

在启动 Spring Cloud 应用时,使用 SkyWalking Agent 进行启动。你需要在启动命令中添加 JVM 参数来加载 SkyWalking Agent。

首先,确保 skywalking-agent.config 文件位于 config 目录中。

然后,通过以下命令启动你的 Spring Cloud 应用:

powershell 复制代码
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar target/my-spring-cloud-app-0.0.1-SNAPSHOT.jar

验证集成

启动你的 Spring Cloud 应用后,访问 SkyWalking UI 界面(通常是 http://:/,默认端口为 8080)。你应该能够看到你的 Spring Cloud 应用的服务拓扑图和性能指标。

示例项目结构

下面是一个示例项目结构:

css 复制代码
my-spring-cloud-app
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── MySpringCloudApp.java
│   │   └── resources
│   │       ├── application.properties
│   │       └── skywalking-agent.config
├── pom.xml
└── skywalking-agent
    ├── skywalking-agent.jar
    └── config
        └── skywalking-agent.config

配置 SkyWalking OAP 和 UI

确保你的 SkyWalking OAP 和 UI 已经正确配置并运行。你可以参考 SkyWalking 官方文档来进行配置。

使用案例

1. 服务性能监控

通过 SkyWalking,可以监控服务的响应时间、错误率和吞吐量等性能指标,帮助开发者优化服务性能。

2. 故障定位

通过分布式追踪和调用链分析,可以快速定位故障发生的节点和原因,缩短故障修复时间。

3. 架构优化

通过服务拓扑图,可以直观地了解系统的架构,识别系统瓶颈和潜在的优化点。

参考资源

通过上述步骤,你可以将 SkyWalking 集成到你的 Spring Cloud 应用中,实现分布式系统的监控和诊断。

相关推荐
过客随尘3 小时前
网关扩容了,流量却还是打不过去?企业级 Spring Cloud Gateway 生产动态化部署实战
spring cloud·微服务·架构
攻城有术6 小时前
专项攻克-springcloud及其组件
后端·spring·spring cloud
砍材农夫8 小时前
物联网实战|Spring Boot MQTT平台 |emqx broker实战
spring boot·spring·spring cloud·mybatis
篮框坏了11 小时前
配置改了不生效?我翻出 8 个坑,没一个报错
后端·spring cloud
wangjialelele13 小时前
Spring Cloud 全体系学习笔记(REST、Nacos、Feign、Gateway)
java·spring boot·笔记·学习·spring·spring cloud·gateway
攻城有术1 天前
专项攻克——spring、springMVC、springBoot、springCloud的启动流程
spring boot·spring·spring cloud
行业研究员1 天前
腾讯位置服务核心功能与应用场景解析
apache·lbs·腾讯位置服务
空谷有来人2 天前
springcloud中配置ci/cd集成docker的配置文件
spring cloud·ci/cd·docker
SeaTunnel2 天前
Apache SeaTunnel 提交一个任务都经过了什么?
java·大数据·服务器·apache·etl·seatunnel
Pluchon3 天前
Java个人综合项目——萌部落社区V2.0
java·python·spring·spring cloud·postman·idea