Springboot项目集成SkyWalking链路追踪系统实战指南
作者:guyougao
Springboot项目集成SkyWalking链路追踪系统
将 SkyWalking 链路追踪系统集成到 Spring Boot 项目中,可以帮助你监控和跟踪微服务架构中的请求流,获取详细的性能数据、调用链信息等。下面是如何在 Spring Boot 项目中集成 SkyWalking 链路追踪的基本步骤。
1. 准备工作
1.1 部署SkyWalking
使用的版本:9.2.0
参考文档:使用docker部署spring boot并接入skywalking的方法
网址地址:https://www.jb51.net/article/210119.htm
1.2 下载 SkyWalking Agent
同样在Skywalking的官网中下载Java Agent:https://skywalking.apache.org/downloads/

下载后解压,获取目录skywalking-agent,放在合适的路径上。

2. 配置Java Agent需要的主要参数
在启动 Spring Boot 应用时,添加 SkyWalking agent 配置。用于重写 agent/config/agent.config 配置文件中的配置参数值。主要配置参数如下:
- 解压后的 SkyWalking agent 文件路径
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
- 指定你的服务名称,SkyWalking 会以这个名称显示在监控面板中。SW_AGENT_NAME的命名规则,采用双冒号 (如CTOS::CONTAINER_SIT),冒号前的文本字符串将作为组名。
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} - 指定 SkyWalking 后端服务的 IP 和端口(默认是 11800,若你使用其他端口,请替换)。
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}- 考虑到安全因素,部署的skywalking增加了gRPC(11880端口)连接是需要token认证。需要看部署时候是否配置SW_AUTHENTICATION。
agent.authentication=${SW_AGENT_AUTHENTICATION:}2.1 使用jar命令启动
在启动 Spring Boot 应用时,添加 SkyWalking agent 配置。
把skywalking-agent.jar地址、your-service-name、your-collector-ip:port、your-authentication-token、your-spring-boot-app替换为实际值。
2.1.1 方式一
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=your-service-name \ -Dskywalking.collector.backend_service=your-collector-ip:port \ -Dskywalking.agent.authentication=your-authentication-token \ -jar your-spring-boot-app.jar
2.1.2 方式二
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar=agent.service_name=your-service-name,collector.backend_service=your-collector-ip:port,agent.authentication=your-authentication-token -jar your-spring-boot-app.jar
2.1.3 参数区别
通过方式一和方式二,可以看到使用方式一中-D设置参数多了skywalking前缀
2.2 利用idea启动
2.2.1 打开idea开发工具Run-》Edit Configurations

2.2.2 配置启动参数
方式一
点击Modify options -》Add VM option

方式二
VM option中配置
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar=agent.service_name=your-service-name,collector.backend_service=your-collector-ip:port,agent.authentication=your-authentication-token

方式三
个人比较喜欢采用环境变量的方法接入,方式如下
VM option中配置
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
点击Modify options -》Environment variables,新增环境变量

| 环境变量 | 描述 |
|---|---|
| SW_AGENT_NAME | 服务名 |
| SW_AGENT_COLLECTOR_BACKEND_SERVICES | 注册地址 |
| SSW_AGENT_AUTHENTICATION | gRPC认证的token |
2.3 容器化服务部署(Kubernetes、Docker)
2.3.1 拷贝文件
使用容器化部署,需要把skywalking-agent目录拷贝在镜像里面中,利用dockerfile
# 替换image为自己使用的镜像 FROM image COPY ./skywalking-agent /usr/local/skywalking-agent
使用build命令生成新的基础镜像
docker build -t new_image .
2.3.2 环境变量(ENV)配置
| 环境变量 | 描述 |
|---|---|
| JAVA_TOOL_OPTIONS | 额外的 JVM |
| SW_AGENT_NAME | 服务名 |
| SW_AGENT_COLLECTOR_BACKEND_SERVICES | 注册地址 |
| SSW_AGENT_AUTHENTICATION | gRPC认证的token |
JAVA_TOOL_OPTIONS的value配置为
# 替换为skywalking-agent.jar在容器中的实际地址 -javaagent:/path/to/skywalking-agent/skywalking-agent.jar
3. 验证是否连接成功
启动应用后,访问 SkyWalking 后端(通常是 http://127.0.0.1:8080,取决于你的 SkyWalking 后端配置)查看你的应用是否已经在 SkyWalking 控制台上显示。

但是这时候我们发现,打开Log,发现并没有日志。如果如果有日志需求,我们可以根据下一步操作接入服务日志。
4. 日志对接
在skywalking的UI端有一个日志的模块,用于收集客户端的日志,默认是没有数据的,那么需要如何将项目中产生日志数据传输到skywalking中
4.1 在springboot项目中导入相关依赖
<!--打印skywalking的TraceId到日志-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-opentracing</artifactId>
<version>9.2.0</version>
</dependency>部署的时候可以替换自己使用的实际版本。
4.2 logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<!-- 日志存放路径 -->
<property name="log.path" value="logs/app" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ,[%X{tid}] [%thread] %-5level %logger{50} - [%method:%line] %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 设置异步方式上报 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="console"/>
</appender>
<!--skywalking日志上报-->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!--日志文件-->
<appender name="file_info" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
<!-- 输出INFO级别以上的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
<!-- 输出ERROR级别日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="trace">
<appender-ref ref="grpc-log" />
<appender-ref ref="ASYNC"/>
</root>
</configuration>4.3 验证日志是否接入成功

本篇主要以实战为主,文档中存在不足之处请指出,谢谢!
到此这篇关于Springboot项目集成SkyWalking链路追踪系统实战指南的文章就介绍到这了,更多相关Springboot SkyWalking链路追踪内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
