SpringBoot鏈路追蹤skyworking的接入方法
前言
開發(fā)中遇到這樣的一個常見,服務(wù)之間調(diào)用需要鏈路追蹤,并且日志報錯時能夠及時預(yù)警,最重要的一點是不要寫太多的侵入式代碼,那么我們來捋捋常用的鏈路追蹤組件,有Google的Dapper,阿里的鷹眼,大眾點評的CAT,Twitter的Zipkin,LINE的pinpoint,國產(chǎn)的skywalking。從這些組件分析得出,skyworking是最符合我們的需求。本文也是介紹如何在自己的springboot項目中引入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文件進行內(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包,記得需要把整個文件夾一起,不能單獨一個jar,否則會出現(xiàn)tid不顯示的情況
- service_name表示該服務(wù)的服務(wù)名(
log-test
),如果有多個服務(wù)想歸納到一個組,可以這樣設(shè)置(local::log-test
)
啟動項目
本次測試的是兩個服務(wù)之間進行調(diào)用,具體是是biz-api服務(wù)調(diào)用user服務(wù),調(diào)用方式為feign
啟動項目后,我們可以看到控制臺有定時任務(wù)打印的日志,其中有我們執(zhí)行格式的tid
從skyworking控制臺【服務(wù)】=》【Trace】可以查看到鏈路調(diào)用的信息
同樣我們也可以查看到服務(wù)上報的具體日志
到此這篇關(guān)于SpringBoot鏈路追蹤skyworking的接入的文章就介紹到這了,更多相關(guān)SpringBoot鏈路追蹤skyworking內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于JSON.toJSONString()和Gson.toJson()方法的比較
本文介紹了兩種將Java對象轉(zhuǎn)換為JSON字符串的方法:阿里的`JSON.toJSONString()`和谷歌的`Gson.toJson()`,通過一個示例,展示了當使用繼承關(guān)系且子類覆蓋父類字段時,`Gson`會報錯,而`JSON`可以正常運行,作者建議在處理JSON相關(guān)操作時使用阿里的`JSON`類2024-11-11Spring Security 實現(xiàn)用戶名密碼登錄流程源碼詳解
在服務(wù)端的安全管理使用了Spring Security,用戶登錄成功之后,Spring Security幫你把用戶信息保存在Session里,但是具體保存在哪里,要是不深究你可能就不知道,今天小編就帶大家具體了解一下Spring Security實現(xiàn)用戶名密碼登錄的流程2021-11-11spring boot + mybatis實現(xiàn)動態(tài)切換數(shù)據(jù)源實例代碼
這篇文章主要給大家介紹了關(guān)于spring boot + mybatis實現(xiàn)動態(tài)切換數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10在Java的JDBC使用中設(shè)置事務(wù)回滾的保存點的方法
這篇文章主要介紹了在Java的JDBC使用中設(shè)置事務(wù)回滾的保存點的方法,JDBC是Java用于連接各種數(shù)據(jù)庫的API,需要的朋友可以參考下2015-12-12