前言
开发中遇到这样的一个常见,服务之间调用需要链路追踪,并且日志报错时能够及时预警,最重要的一点是不要写太多的侵入式代码,那么我们来捋捋常用的链路追踪组件,有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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论