SpringBoot项目无缝集成SkyWalking:实现分布式追踪与日志透传实战

一、引言

Apache SkyWalking 是一款开源的应用性能监视工具,特别适合于微服务架构下的应用性能管理和分布式追踪。本文将手把手教你如何将SkyWalking整合到Spring Boot项目中,实现服务链路追踪,并同步改造日志中的Transaction ID,便于日志关联和问题定位。

二、集成SkyWalking步骤

  1. 添加依赖

    在Spring Boot项目的pom.xml文件中添加SkyWalking的starter依赖:

    复制代码
    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-spring-boot-starter</artifactId>
        <version>{latest_version}</version>
    </dependency>

    替换 {latest_version} 为最新的SkyWalking版本号。

  2. 配置SkyWalking

    application.ymlapplication.properties 文件中配置SkyWalking的服务地址:

    复制代码
    skywalking:
      agent:
        service_name: your-service-name
        collector_backend_service: ${SW_AGENT_COLLECTOR_BACKEND_SERVICE:localhost:11800}
  3. 启动应用

    无需额外改动,只需正常启动Spring Boot应用,SkyWalking探针将会自动接入并开始收集跟踪数据。

三、改造日志透传Transaction ID

为了将SkyWalking的Trace ID和Span ID传递到日志中,我们可以使用SkyWalking提供的API来获取当前上下文的Trace信息,并将其加入到日志模板中。

  1. 引入SkyWalking Tracing工具类

    在需要打印日志的地方,注入org.apache.skywalking.apm.toolkit.trace.TraceContext工具类。

    java 复制代码
    import org.apache.skywalking.apm.toolkit.trace.TraceContext;
    ...
    
    @Component
    public class YourService {
        ...
    }
  2. 定制日志输出格式

    修改日志框架配置,例如对于Logback,可以在logback.xml中添加变量引用:

    XML 复制代码
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg [%X{traceId:-},%X{spanId:-}]%n</pattern>
        </encoder>
    </appender>

    在日志输出模板中,使用${X{traceId:-},X{spanId:-}}引用SkyWalking的Trace ID和Span ID。

  3. 在业务代码中填充Trace信息

    在需要打印日志的方法中,获取并设置Trace ID和Span ID到MDC(Mapped Diagnostic Context)中:

    java 复制代码
    public void yourMethod() {
        String traceId = TraceContext.traceId();
        String spanId = TraceContext.spanId();
        MDC.put("traceId", traceId);
        MDC.put("spanId", spanId);
    
        // 业务逻辑...
        
        logger.info("Your log message");
    }

    这样,每次打印日志时,都会携带当前请求的Trace ID和Span ID,极大方便了日志关联和分布式追踪。

四、总结

通过以上步骤,我们成功地将SkyWalking集成到了Spring Boot项目中,并实现了日志中的Transaction ID(即Trace ID)的透传。这将极大地助力于我们对分布式系统的性能监控和问题诊断。在实际项目中,可以根据需求进一步优化日志输出格式和追踪粒度,以适应更为复杂的微服务架构环境。

相关推荐
苏叶新城19 小时前
SpringBoot 3.5 JPA投影
java·spring boot·后端
毕设源码-赖学姐20 小时前
【开题答辩全过程】以 基于Springboot的智慧养老系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
sheji34161 天前
【开题答辩全过程】以 山林湖泊生态文明建设管控系统为例,包含答辩的问题和答案
java·spring boot
幽络源小助理1 天前
SpringBoot兼职发布平台源码 | JavaWeb项目免费下载 – 幽络源
java·spring boot·后端
2301_800050991 天前
ceph分布式存储
笔记·分布式·ceph
.生产的驴1 天前
DockerCompoe 部署注册中心Nacos 一键部署 单机+Mysql8
java·linux·运维·spring boot·缓存·docker·doc
222you1 天前
前后端分离项目在云服务器上的部署(Spring Boot + Vue)
运维·服务器·spring boot
计算机毕设指导61 天前
基于微信小程序图像识别的智能垃圾分类系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·分类·maven
YDS8291 天前
SpringCloud —— 分布式事务管理Seata详解
分布式·spring·spring cloud·seata
悟空码字1 天前
SpringBoot读取Excel文件,一场与“表格怪兽”的搏斗记
java·spring boot·后端