SpringBoot链路追踪skyworking的接入方法

 更新时间:2024年10月08日 10:17:17   作者:码至终章  
在SpringBoot项目中引入SkyWalking进行链路追踪,需要下载探针jar包,配置logback.xml,设置启动变量,以实现服务调用监控和错误预警,本文给大家介绍SpringBoot链路追踪skyworking的接入方法,感兴趣的朋友一起看看吧

前言

开发中遇到这样的一个常见,服务之间调用需要链路追踪,并且日志报错时能够及时预警,最重要的一点是不要写太多的侵入式代码,那么我们来捋捋常用的链路追踪组件,有Google的Dapper,阿里的鹰眼,大众点评的CAT,Twitter的Zipkin,LINE的pinpoint,国产的skywalking。从这些组件分析得出,skyworking是最符合我们的需求。本文也是介绍如何在自己的springboot项目中引入skyworking

探针jar包下载

开始服务接入时,我们首先需要去把探针jar包下载下来(本章内容测试用的是9.2),下载地址如下
https://archive.apache.org/dist/skywalking/java-agent/

pom文件

引入依赖,这里用的skyworking版本是9.2.0

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>9.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>9.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-opentracing</artifactId>
    <version>9.2.0</version>
</dependency>
<!-- logback的版本信息-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

logback.xml文件

接着我们需要对自己服务的logback文件进行内容添加,其中包括日志的格式、控制台的输出、上传的方式以及skyworking日志上报的等等,完整内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <springProperty scope="context" name="applicationName" source="spring.application.name"/>
<!-- 日志存放路径 -->
	<property name="log.path" value="/tmp/logDemo" />
   <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ,[%X{tid}]  [%thread] %-5level %logger{50} - [%method:%line] %msg%n" />
    <!-- 控制台输出 -->
    <appender name="consol" 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>${log.pattern}</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="consol"/>
    </appender>
    <!--skywalking日志上报-->
    <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>${log.pattern}</Pattern>
            </layout>
        </encoder>
    </appender>
    <!--日志文件-->
    <appender name="file_info" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${log.pattern}</Pattern>
            </layout>
        </encoder>
        <!-- 输出INFO级别以上的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <appender name="file_error" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${log.pattern}</Pattern>
            </layout>
        </encoder>
        <!-- 输出ERROR级别日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>
    <root level="trace">
        <appender-ref ref="grpc-log" />
        <appender-ref ref="ASYNC"/>
    </root>
</configuration>

服务启动变量

在启动服务时需要加上一些启动变量,如

-javaagent:D:\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=easy-code::biz-api
-Dskywalking.collector.backend_service=192.168.111.111:11800
  • 需要指定skyworking的服务地址(192.168.111.111:11800
  • skywalking-agent.jar时skyworking提供的代码jar包,记得需要把整个文件夹一起,不能单独一个jar,否则会出现tid不显示的情况
  • service_name表示该服务的服务名(log-test),如果有多个服务想归纳到一个组,可以这样设置(local::log-test)

启动项目

本次测试的是两个服务之间进行调用,具体是是biz-api服务调用user服务,调用方式为feign
启动项目后,我们可以看到控制台有定时任务打印的日志,其中有我们执行格式的tid

从skyworking控制台【服务】=》【Trace】可以查看到链路调用的信息

同样我们也可以查看到服务上报的具体日志

到此这篇关于SpringBoot链路追踪skyworking的接入的文章就介绍到这了,更多相关SpringBoot链路追踪skyworking内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IntelliJ IDEA的数据库管理工具实在太方便了(推荐)

    IntelliJ IDEA的数据库管理工具实在太方便了(推荐)

    这篇文章主要介绍了IntelliJ IDEA的数据库管理工具实在太方便了,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • idea缩进调整不成功问题及解决过程

    idea缩进调整不成功问题及解决过程

    本文介绍了Idea设置代码缩进的方法,打开File--->setting--->Code&nbsp;Style进行设置,如果设置后仍不生效,检查右下角缩进设置是否一致
    2026-04-04
  • Java使用icepdf将pdf文件按页转成图片

    Java使用icepdf将pdf文件按页转成图片

    这篇文章主要为大家详细介绍了Java使用icepdf将pdf文件按页转成图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • java环境变量的配置方法图文详解【win10环境为例】

    java环境变量的配置方法图文详解【win10环境为例】

    这篇文章主要介绍了java环境变量的配置方法,结合图文形式详细分析了win10环境下java环境变量的配置方法与相关操作注意事项,需要的朋友可以参考下
    2020-04-04
  • SpringMVC参数传递之基本数据类型和复杂对象说明

    SpringMVC参数传递之基本数据类型和复杂对象说明

    这篇文章主要介绍了SpringMVC参数传递之基本数据类型和复杂对象说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 线程池之exectue与submit的区别及说明

    线程池之exectue与submit的区别及说明

    这篇文章主要介绍了线程池之exectue与submit的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java 深入理解创建型设计模式之建造者模式

    Java 深入理解创建型设计模式之建造者模式

    建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用
    2022-02-02
  • java实现网页解析示例

    java实现网页解析示例

    这篇文章主要介绍了java实现网页解析示例,需要的朋友可以参考下
    2014-04-04
  • springboot切换使用undertow容器的方式

    springboot切换使用undertow容器的方式

    最近稍微有点空闲,回头再来优化下基础框架,也是一种重新学习。今天主要写写跟大家分享下springboot使用undertow,废话不多说
    2022-07-07
  • Java 函数式编程要点总结

    Java 函数式编程要点总结

    函数式编程并不是Java新提出的概念,其与指令编程相比,强调函数的计算比指令的计算更重要;与过程化编程相比,其中函数的计算可以随时调用。Java8新引入函数式编程方式,大大的提高了编码效率。本文将对涉及的对象等进行统一的学习及记录。
    2021-06-06

最新评论