SpringBoot鏈路追蹤skyworking的接入方法
前言
開發(fā)中遇到這樣的一個常見,服務(wù)之間調(diào)用需要鏈路追蹤,并且日志報錯時能夠及時預(yù)警,最重要的一點(diǎn)是不要寫太多的侵入式代碼,那么我們來捋捋常用的鏈路追蹤組件,有Google的Dapper,阿里的鷹眼,大眾點(diǎn)評的CAT,Twitter的Zipkin,LINE的pinpoint,國產(chǎn)的skywalking。從這些組件分析得出,skyworking是最符合我們的需求。本文也是介紹如何在自己的springboot項(xiàng)目中引入skyworking
探針jar包下載
開始服務(wù)接入時,我們首先需要去把探針jar包下載下來(本章內(nèi)容測試用的是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文件
接著我們需要對自己服務(wù)的logback文件進(jìn)行內(nèi)容添加,其中包括日志的格式、控制臺的輸出、上傳的方式以及skyworking日志上報的等等,完整內(nèi)容如下:
<?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>
<!-- 設(shè)置異步方式上報 -->
<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>
<!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
<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>
<!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
<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>服務(wù)啟動變量
在啟動服務(wù)時需要加上一些啟動變量,如
-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的服務(wù)地址(
192.168.111.111:11800) - skywalking-agent.jar時skyworking提供的代碼jar包,記得需要把整個文件夾一起,不能單獨(dú)一個jar,否則會出現(xiàn)tid不顯示的情況
- service_name表示該服務(wù)的服務(wù)名(
log-test),如果有多個服務(wù)想歸納到一個組,可以這樣設(shè)置(local::log-test)

啟動項(xiàng)目
本次測試的是兩個服務(wù)之間進(jìn)行調(diào)用,具體是是biz-api服務(wù)調(diào)用user服務(wù),調(diào)用方式為feign
啟動項(xiàng)目后,我們可以看到控制臺有定時任務(wù)打印的日志,其中有我們執(zhí)行格式的tid


從skyworking控制臺【服務(wù)】=》【Trace】可以查看到鏈路調(diào)用的信息

同樣我們也可以查看到服務(wù)上報的具體日志

到此這篇關(guān)于SpringBoot鏈路追蹤skyworking的接入的文章就介紹到這了,更多相關(guān)SpringBoot鏈路追蹤skyworking內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA的數(shù)據(jù)庫管理工具實(shí)在太方便了(推薦)
這篇文章主要介紹了IntelliJ IDEA的數(shù)據(jù)庫管理工具實(shí)在太方便了,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Java使用icepdf將pdf文件按頁轉(zhuǎn)成圖片
這篇文章主要為大家詳細(xì)介紹了Java使用icepdf將pdf文件按頁轉(zhuǎn)成圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
java環(huán)境變量的配置方法圖文詳解【win10環(huán)境為例】
這篇文章主要介紹了java環(huán)境變量的配置方法,結(jié)合圖文形式詳細(xì)分析了win10環(huán)境下java環(huán)境變量的配置方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
SpringMVC參數(shù)傳遞之基本數(shù)據(jù)類型和復(fù)雜對象說明
這篇文章主要介紹了SpringMVC參數(shù)傳遞之基本數(shù)據(jù)類型和復(fù)雜對象說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
Java?深入理解創(chuàng)建型設(shè)計模式之建造者模式
建造者(Builder)模式和工廠模式的關(guān)注點(diǎn)不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用2022-02-02
Java 函數(shù)式編程要點(diǎn)總結(jié)
函數(shù)式編程并不是Java新提出的概念,其與指令編程相比,強(qiáng)調(diào)函數(shù)的計算比指令的計算更重要;與過程化編程相比,其中函數(shù)的計算可以隨時調(diào)用。Java8新引入函數(shù)式編程方式,大大的提高了編碼效率。本文將對涉及的對象等進(jìn)行統(tǒng)一的學(xué)習(xí)及記錄。2021-06-06

