Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析

Logback集成skwalking的traceId

本文主要讲述在工程的logback文件中集成skywalking的traceId,以便在日志中打印对应的traceId


文章目录

  • Logback集成skwalking的traceId
  • 前言
  • 一、如何集成TraceID
  • 二、使用步骤
    • 1.引入库
    • 2.修改logback文件
    • 3.移动agent插件
    • 4.观察结果
  • 总结


前言

skywalking是一个非常优秀的国产APM系统,主要开发人来自华为吴晟团队,2019年入住Apache,成为顶级项目,支持java、.net、NodeJS等探针,数据存储支持H2、ElasticSearch,采用字节码增强技术代码无侵入,粒度相对较粗,性能优越,且支持云原生,目前增长势头强劲,社区活跃,无语言障碍。


一、如何集成TraceID

首先在maven引入apm-toolkit-logback-1.x 插件,该插件目前由skywalking提供。之后再logback中添加tid到pattern中。最后将agent插件中路径activations/apm-toolkit-logback-1.x-activation-8.7.0.jar移动到plugins中,然后再次启动

二、使用步骤

1.引入库

由于本人是基于8.7.0进行开发的故版本号选择8.7的版本

 <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-logback-1.x</artifactId>
        <version>8.7.0</version>
 </dependency>

2.修改logback文件

(示例):

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/apps/logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/apps/logs/app-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <MaxHistory>10</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <!-- 日志格式中添加 %tid 即可输出 trace id -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %tid %logger{50} - %msg%n</pattern>
<!--                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %tid %t %logger{50}: %msg%n</pattern>-->
            </layout>
        </encoder>
    </appender>

3.移动agent插件

:将agent路径activations/apm-toolkit-logback-1.x-activation-8.7.0.jar移动到plugins中。

4.观察结果

:结果如下

2022-01-17 13:50:50.250 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-01-17 13:50:50.250 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2022-01-17 13:50:50.263 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 org.springframework.web.servlet.DispatcherServlet - Complete

可以看出打印日志中包含了TID

总结

通过先引入skywalking的jar包,然后在 Logback 配置文件中的 pattern 中添加 %tid,就可以在日志行中输出调用链ID。
建议:后续可以通过修改logstash 配置解析文件就可以在es中存储包含traceid的日志记录,之后可通过skywalking连接日志存储ES获取数据,可完成对日志进行查询和链路的关联。

Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析(二)

你可能感兴趣的:(skywalking,java,开发语言,后端,skywalking)