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)的透传。这将极大地助力于我们对分布式系统的性能监控和问题诊断。在实际项目中,可以根据需求进一步优化日志输出格式和追踪粒度,以适应更为复杂的微服务架构环境。

相关推荐
不吃香菜学java7 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
yaoyouzhong8 小时前
分布式与集群,二者区别是什么?
分布式
橙露9 小时前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
小眼哥9 小时前
SpringBoot整合Vue代码生成exe运行程序以及windows安装包
vue.js·windows·spring boot
Ulyanov11 小时前
Apache Kafka在雷达仿真数据流处理中的应用
分布式·python·kafka·apache·雷达电子战
shark222222212 小时前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
IGAn CTOU13 小时前
王炸级更新!Spring Boot 3.4 正式发布,新特性真香!
java·spring boot·后端
Ssan PRIN13 小时前
深度掌握 RabbitMQ 消息确认(ACK)机制,确保消息万无一失
分布式·rabbitmq
切糕师学AI14 小时前
深入理解 CAP 定理:分布式系统中的一致性、可用性与分区容错
分布式·cap
indexsunny15 小时前
互联网大厂Java面试实战:核心技术与微服务架构在电商场景中的应用
java·spring boot·redis·kafka·maven·spring security·microservices