Spring Boot 接入 SkyWalking Agent 完整示例
本文介绍了如何将Spring Boot应用接入SkyWalking Agent实现链路追踪和监控的完整流程。主要内容包括:1) 环境准备,需确保SkyWalking OAP和UI已运行;2) 创建Spring Boot项目并添加简单Controller;3) 下载配置SkyWalking Agent;4) 通过命令行或Docker方式启动应用并挂载Agent;5) 验证接入效果,包括检查服务列表、
下面是一份 完整的 Spring Boot 应用接入 SkyWalking Agent 的实战示例,涵盖从环境准备、项目创建、Agent 配置到验证的全过程,适合新手快速上手。
🚀 Spring Boot 接入 SkyWalking Agent 完整示例
✅ 目标:
创建一个简单的 Spring Boot Web 应用,接入 SkyWalking Java Agent,实现无侵入式链路追踪、JVM 监控、服务拓扑等功能。
一、前置准备
1. 已运行 SkyWalking OAP + UI
请确保你已按之前教程启动了 SkyWalking 环境,例如使用 Docker Compose:
git clone https://github.com/apache/skywalking-docker.git
cd skywalking-docker/compose/9.7.0/elasticsearch
docker-compose up -d
访问 UI 验证:http://localhost:8080
二、创建 Spring Boot 项目
方法 1:使用 Spring Initializr
- Project: Maven
- Language: Java
- Spring Boot: 2.7.0(或 3.x)
- Group:
com.example
- Artifact:
demo-skywalking
- Dependencies:
- Spring Web
- Spring Boot Actuator(可选,用于健康检查)
方法 2:手动创建 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo-skywalking</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三、编写简单 Controller
创建文件:src/main/java/com/example/DemoController.java
package com.example;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() {
return "Hello from SkyWalking!";
}
@GetMapping("/chain")
public String chain() throws InterruptedException {
// 模拟调用下游(可扩展为真实服务)
Thread.sleep(100); // 模拟处理耗时
return "Chain call completed";
}
}
四、下载并配置 SkyWalking Agent
1. 下载 SkyWalking 发行版
wget https://downloads.apache.org/skywalking/9.7.0/apache-skywalking-apm-9.7.0.tar.gz
tar -xzf apache-skywalking-apm-9.7.0.tar.gz
解压后你会得到:
apache-skywalking-apm-bin/
└── agent/
├── skywalking-agent.jar
└── ...
记下路径,如:/your/path/to/apache-skywalking-apm-bin/agent
五、启动 Spring Boot 应用并挂载 Agent
方式 1:命令行启动(开发测试)
java \
-javaagent:/your/path/to/apache-skywalking-apm-bin/agent/skywalking-agent.jar \
-DSW_AGENT_NAME=demo-springboot-service \
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800 \
-DSW_AGENT_SAMPLE_RATE=10000 \
-jar target/demo-skywalking-1.0.0.jar
参数说明:
参数 | 值 | 说明 |
---|---|---|
-javaagent |
指向 skywalking-agent.jar |
必需 |
-DSW_AGENT_NAME |
demo-springboot-service |
在 UI 中显示的服务名 |
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES |
localhost:11800 |
OAP gRPC 地址 |
-DSW_AGENT_SAMPLE_RATE |
10000 |
100% 采样(调试用) |
方式 2:Docker 启动(生产推荐)
创建 Dockerfile
:
FROM openjdk:8-jre-slim
# 复制 SkyWalking Agent
COPY --from=apache/skywalking-java-agent:9.7.0 /skywalking/agent /skywalking/agent
# 复制应用
COPY target/demo-skywalking-1.0.0.jar /app.jar
# 启动命令
ENTRYPOINT ["java", \
"-javaagent:/skywalking/agent/skywalking-agent.jar", \
"-DSW_AGENT_NAME=demo-springboot-service", \
"-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800", \
"-jar", "/app.jar"]
构建并运行:
docker build -t demo-skywalking .
docker run -d --network=host --name demo-app demo-skywalking
🔁 注意:如果 OAP 在另一个容器中,确保网络互通(如
--network=skywalking
)
六、验证接入是否成功
1. 发起请求触发调用
curl http://localhost:8080/hello
curl http://localhost:8080/chain
2. 打开 SkyWalking UI
3. 查看结果
功能 | 验证方法 |
---|---|
✅ 服务出现 | Dashboard → 服务列表中看到 demo-springboot-service |
✅ 调用链 | Trace 页面 → 查询 /hello 或 /chain 的调用链 |
✅ 拓扑图 | Topology → 出现新节点,可能带 Tomcat 边 |
✅ JVM 指标 | 服务详情 → 查看 CPU、内存、GC 等 |
✅ 端点监控 | Endpoint 页面 → 看到 /hello , /chain 的 P99 耗时 |
🎉 成功标志:看到完整的调用链,Span 包含 Controller、Tomcat 等信息。
七、进阶配置(可选)
1. 日志中输出 Trace ID(便于关联)
修改 application.yml
:
logging:
pattern:
console: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - traceId=%X{trace_id} %msg%n"
日志输出示例:
10:30:12.345 [http-nio-8080-exec-1] INFO DemoController - traceId=abc123-def456 Hello from SkyWalking!
2. 排除不需要监控的插件(降低开销)
在启动命令中添加:
-DSW_AGENT_PLUGIN_EXCLUDE_PLUGINS=mysql,redis
八、常见问题排查
问题 | 解决方案 |
---|---|
服务未出现在 UI | 检查 -javaagent 路径、OAP 地址、防火墙 |
无调用链数据 | 确保发起 HTTP 请求,检查采样率 |
Agent 启动报错 | 查看 logs/skywalking-api.log |
中文乱码 | 设置 -Dfile.encoding=UTF-8 |
Docker 中连接不到 OAP | 使用容器名或 host.docker.internal |
✅ 总结:接入四步法
步骤 | 命令 / 操作 |
---|---|
1️⃣ 下载 Agent | wget + tar 解压 |
2️⃣ 编写 Spring Boot 应用 | Controller + Maven |
3️⃣ 启动时挂载 Agent | -javaagent + JVM 参数 |
4️⃣ 验证数据上报 | UI 查看服务、链路、拓扑 |
📦 项目结构完整示例
demo-skywalking/
├── pom.xml
├── src/
│ └── main/
│ ├── java/com/example/DemoController.java
│ └── resources/application.yml
├── Dockerfile
└── target/demo-skywalking-1.0.0.jar
🎁 附件:点击下载完整示例代码 ZIP(可参考官方示例)
更多推荐
所有评论(0)