一、引言
Apache SkyWalking 是一款开源的应用性能监视工具,特别适合于微服务架构下的应用性能管理和分布式追踪。本文将手把手教你如何将SkyWalking整合到Spring Boot项目中,实现服务链路追踪,并同步改造日志中的Transaction ID,便于日志关联和问题定位。
二、集成SkyWalking步骤
- 添加依赖在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版本号。 - 配置SkyWalking在
application.yml
或application.properties
文件中配置SkyWalking的服务地址:skywalking: agent: service_name: your-service-name collector_backend_service: ${SW_AGENT_COLLECTOR_BACKEND_SERVICE:localhost:11800}
- 启动应用无需额外改动,只需正常启动Spring Boot应用,SkyWalking探针将会自动接入并开始收集跟踪数据。
三、改造日志透传Transaction ID
为了将SkyWalking的Trace ID和Span ID传递到日志中,我们可以使用SkyWalking提供的API来获取当前上下文的Trace信息,并将其加入到日志模板中。
- 引入SkyWalking Tracing工具类在需要打印日志的地方,注入
org.apache.skywalking.apm.toolkit.trace.TraceContext
工具类。import org.apache.skywalking.apm.toolkit.trace.TraceContext;...@Componentpublic class YourService { ...}
- 定制日志输出格式修改日志框架配置,例如对于Logback,可以在logback.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。 - 在业务代码中填充Trace信息在需要打印日志的方法中,获取并设置Trace ID和Span ID到MDC(Mapped Diagnostic Context)中:
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)的透传。这将极大地助力于我们对分布式系统的性能监控和问题诊断。在实际项目中,可以根据需求进一步优化日志输出格式和追踪粒度,以适应更为复杂的微服务架构环境。
版权归原作者 yangqjiayou 所有, 如有侵权,请联系我们删除。