SkyWalking集成Logback的使用
将微服务的日志框架去集成SkyWalking,我们希望在我们微服务中日志中,能够记录当前调用链路的id,然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。
因为springboot默认实现的日志框架是logback,这里也就拿logback举例
- 引入logback相关maven依赖
<!-- skywalking 日志记录 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.5.0</version>
</dependency>
- 在项目中resources目录下创建logback-spring.xml文件,主要就是在日志的输出格式中添加[%X{tid}] 这个就是调用链路的id。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod=" 5 seconds">
<appender name="STDOUT" 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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</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="STDOUT"/>
</appender>
<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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="grpc-log" />
<appender-ref ref="ASYNC"/>
</root>
</configuration>
- 接入探针agent java探针
1)下载探针,根据Skywalking版本进行下载
https://archive.apache.org/dist/skywalking/java-agent/
2)idea使用探针
-javaagent:D:\Java\plugin\apache-skywalking-java-agent-8.9.0\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=log-demo-service2
-Dskywalking.collector.backend_service=192.168.0.203:11800
参数 说明
-javaagent:中下载的探针jar包位置
-Dskywalking.agent.service_name:在Skywalking中的服务名称,默认值为Your_ApplicationName
-Dskywalking.collector.backend_service: Skywalking-oap服务地址,默认值为127.0.0.1:11800
如果在本地起的Skywalking-oap服务,则没必要配置此参数
- 如果Skywalking-oap服务不是部署在本地,需要在agent的config/agent.config文件中添加以下内容
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:oap服务地址}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
最终效果:
控制台日志:
刚开始服务启动时,没有调用接口,也就肯定没有链路追踪id,然后调用接口后就会在日志中有显示了
**注意:**只有在添加了VM参数配置了agent之后,才会显示TID,有很多教程没有提及这一点
skywalking-ui界面查看: