一、概述
1.1. 分布式系統(tǒng)面臨的問(wèn)題
在微服務(wù)框架中,一個(gè)由客戶端發(fā)起的請(qǐng)求在后端系統(tǒng)中會(huì)經(jīng)過(guò)多個(gè)不同的的服務(wù)節(jié)點(diǎn)調(diào)用來(lái)協(xié)同產(chǎn)生最后的請(qǐng)求結(jié)果,每一個(gè)次請(qǐng)求都會(huì)形成一條復(fù)雜的分布式服務(wù)調(diào)用鏈路,鏈路中的任何一環(huán)出現(xiàn)高延時(shí)或錯(cuò)誤都會(huì)引起整個(gè)請(qǐng)求最后的失敗。
1.2. Sleuth是什么
Spring Cloud Sleuth提供了一套完整的服務(wù)跟蹤的解決方案。他會(huì)將服務(wù)與服務(wù)之間的調(diào)用給記錄起來(lái)。可以快速的知道調(diào)用 用戶服務(wù),到底涉及到了哪些微服務(wù),方便我們快速排查問(wèn)題!
具體的功能如下幾點(diǎn):
將跟蹤和跨度 ID 添加到 Slf4J,因此您可以從日志聚合器中的給定跟蹤或跨度中提取所有日志。
檢測(cè)來(lái)自 Spring 應(yīng)用程序的公共入口和出口點(diǎn)(servlet filter, rest template, scheduled actions, message channels, feign client)。
如果spring-cloud-sleuth-zipkin可用,則應(yīng)用程序?qū)⑼ㄟ^(guò) HTTP生成和報(bào)告與Zipkin兼容的跟蹤。默認(rèn)情況下,它將它們發(fā)送到 localhost(端口 9411)上的 Zipkin 收集器服務(wù)。使用spring.zipkin.baseUrl配置Zipkin 服務(wù)的位置。
1.3. Zipkin是什么
Spring Cloud Sleuth對(duì)于分布式鏈路的跟蹤僅僅是生成一些數(shù)據(jù),這些數(shù)據(jù)不便于人類閱讀,所以我們一般把這種跟蹤數(shù)據(jù)上傳給Zipkin Server,由Zipkin通過(guò)UI頁(yè)面統(tǒng)一進(jìn)行數(shù)據(jù)的展示。
1.4. 鏈路監(jiān)控相關(guān)術(shù)語(yǔ)
這些術(shù)語(yǔ)在官方文檔當(dāng)中也可以看到的!
span(跨度) :工作的基本單位。例如,發(fā)送 RPC 是一個(gè)新的跨度,發(fā)送響應(yīng)到 RPC 也是如此。Span還有其他數(shù)據(jù),例如描述、時(shí)間戳事件、鍵值注釋(標(biāo)簽)、導(dǎo)致它們的 Span 的 ID 和進(jìn)程 ID(通常是 IP 地址)??缍瓤梢詥?dòng)和停止,并且它們會(huì)跟蹤它們的時(shí)間信息。創(chuàng)建跨度后,您必須在將來(lái)的某個(gè)時(shí)間點(diǎn)停止它。
Trace :一組跨度形成樹狀結(jié)構(gòu)。
Annotation/Event :用于及時(shí)記錄某個(gè)事件的存在,有如下事件類型:
cs :客戶端發(fā)送??蛻粢烟岢稣?qǐng)求。此注釋指示跨度的開始。
sr :Server Received:服務(wù)器端收到請(qǐng)求并開始處理它。cs從此時(shí)間戳中減去時(shí)間戳揭示了網(wǎng)絡(luò)延遲。
ss :服務(wù)器發(fā)送。在請(qǐng)求處理完成時(shí)注釋(當(dāng)響應(yīng)被發(fā)送回客戶端時(shí))。從這個(gè)時(shí)間戳中減去sr時(shí)間戳,可以看出服務(wù)器端處理請(qǐng)求所需的時(shí)間。
cr : 客戶收到。表示跨度的結(jié)束??蛻舳艘殉晒κ盏椒?wù)器端的響應(yīng)。cs從這個(gè)時(shí)間戳中減去時(shí)間戳,可以看出客戶端從服務(wù)器接收響應(yīng)所需的全部時(shí)間。
下圖顯示了Span和Trace在系統(tǒng)中的外觀: 音符的每種顏色表示一個(gè)跨度(有七個(gè)跨度 - 從A到G) 。
下圖顯示了 span 的父子關(guān)系的外觀:
您可以繼續(xù)創(chuàng)建跨度(帶有no custom span指示的示例),也可以手動(dòng)創(chuàng)建子跨度(帶有custom span指示的示例)。
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
二、實(shí)戰(zhàn)練習(xí)
2.1. 入門練習(xí)
1.創(chuàng)建項(xiàng)目
2.引入依賴
8 8 UTF-8 2.6.8 2021.0.3 org.springframework.boot spring-boot-dependencies ${springboot.version} pom import org.springframework.cloud spring-cloud-dependencies ${springcloud.version} pom import org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-sleuth
3.添加yml配置
server: port:8989 spring: application: name:sleuth-demo
4.添加控制器
@RestController publicclassExampleController{ privatestaticfinalLoggerlog=LoggerFactory.getLogger(ExampleController.class); @RequestMapping("/") publicStringhome(){ log.info("Helloworld!"); return"HelloWorld!"; } }
5.測(cè)試訪問(wèn):http://localhost:8989/ 訪問(wèn)后觀察打印的日志
[sleuth-demo,a79df4de56426209,a79df4de56426209]`此條目對(duì)應(yīng)于`[applicationname,traceid,span id]
設(shè)置DispatcherServlet日志級(jí)別過(guò)后可以看到如下日志:
logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
如果您對(duì)這一步還不是很了解他是干什么的,沒(méi)關(guān)系,可以接著往下看,下面你就會(huì)明白的!學(xué)知識(shí)要循序漸進(jìn),不可急躁!!!
2.2. Zipkin下載與啟動(dòng)
下載好jar包后直接java -jar啟動(dòng):
然后訪問(wèn)
2.3. 搭建鏈路監(jiān)控步驟
首先我們要至少準(zhǔn)備兩個(gè)服務(wù),并且是調(diào)用關(guān)系。這樣我們才可以通過(guò)zipkin來(lái)查看調(diào)用鏈。
這里我會(huì)搭建兩個(gè)服務(wù),一個(gè)是8989服務(wù),一個(gè)是8990服務(wù),然后8989服務(wù)的一個(gè)接口當(dāng)中調(diào)用了8990當(dāng)中的接口!
遠(yuǎn)程調(diào)用的時(shí)候我這里使用的是openfeign,openfeign和RestTemplate都是遠(yuǎn)程調(diào)用框架,如果您對(duì)RestTemplate熟悉,用RestTemplate也是可以的。
第一步:搭建8990提供者
1.創(chuàng)建項(xiàng)目
2.添加pom依賴
這塊有一個(gè)點(diǎn)需要注意一下,有的springcloud版本當(dāng)中是沒(méi)有對(duì)spring-cloud-starter-zipkin進(jìn)行版本控制的,所以這時(shí)候我們需要自己去聲明版本號(hào),2.2.8.RELEASE是截止到現(xiàn)在最新的版本!spring-cloud-starter-zipkin依賴是集成了spring-cloud-starter-sleuth依賴的,所以我們引用了zipkin就可以不引用sleuth了。
8 8 UTF-8 2.6.8 2021.0.3 org.springframework.boot spring-boot-dependencies ${springboot.version} pom import org.springframework.cloud spring-cloud-dependencies ${springcloud.version} pom import org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-zipkin 2.2.8.RELEASE org.springframework.cloud spring-cloud-starter-openfeign
3.添加yml配置
server: port:8990 spring: application: name:sleuth-provide logging: level: org.springframework.web.servlet.DispatcherServlet:DEBUG
4.添加控制器,主要是為了測(cè)試調(diào)用鏈路,這個(gè)接口就隨便寫一下就可以了!
@RestController @RequestMapping("/user") publicclassUserController{ @GetMapping("/getUserList") publicStringgetUserList(){ return"user"; } }
5.啟動(dòng)后測(cè)試訪問(wèn)
訪問(wèn)兩次后打開
第二步:搭建8989消費(fèi)者
1.創(chuàng)建項(xiàng)目
2.添加pom依賴(這塊跟上面提供者的依賴一樣即可,當(dāng)然消費(fèi)者用不到openfeign,可以選擇把openfeign的依賴去掉)
3.添加yml配置
server: port:8989 spring: application: name:sleuth-demo logging: level: org.springframework.web.servlet.DispatcherServlet:DEBUG
4.使用openfeign就需要開啟openfeign的注解支持,在啟動(dòng)類添加@EnableFeignClients
5.添加openfeign遠(yuǎn)程調(diào)用接口
@FeignClient(value="userService",url="http://localhost:8990") publicinterfaceUserService{ @GetMapping("/user/getUserList") StringgetUserList(); }
6.添加控制器
@RestController publicclassExampleController{ privatestaticfinalLoggerlog=LoggerFactory.getLogger(ExampleController.class); @Resource privateUserServiceuserService; @RequestMapping("/") publicStringhome(){ log.info("Helloworld!"); returnuserService.getUserList(); } }
第三步:測(cè)試訪問(wèn)
首先我們觀察兩個(gè)服務(wù)的日志:會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題trace id是一致的!原因就是8989調(diào)用了8990服務(wù),他們屬于是一個(gè)鏈路的。記住這一切并不是zipkin幫我們實(shí)現(xiàn)的,而是Sleuth。
您也可以通過(guò)將zipkin的依賴改為sleuth然后執(zhí)行鏈路,他id仍然是一樣的。zipkin可以把它當(dāng)做就是一個(gè)帶有可視化界面的jar包,項(xiàng)目當(dāng)中集成zipkin依賴主要是將sleuth鏈路跟蹤的數(shù)據(jù),上傳到zipkin,由zipkin對(duì)數(shù)據(jù)進(jìn)行整理并在頁(yè)面上展示了出來(lái),真正實(shí)現(xiàn)鏈路跟蹤的是sleuth
然后我們?cè)儆^察一下zipkin的日志:
第四步:故意制造異常
在消費(fèi)服務(wù)的接口上故意制造異常:
@GetMapping("/getUserList") publicStringgetUserList(){ inti=1/0; return"user"; }
制造完異常后重啟,再進(jìn)行訪問(wèn),然后觀察日志:可以很直觀的看到是哪些鏈路出現(xiàn)了問(wèn)題。
通過(guò)這里我們可以拿到Trace ID,有了Trace ID我們可以去日志文件當(dāng)中搜索Trace ID快速定位bug原因!
然后我們還可以查看鏈路詳情:通過(guò)下圖可以很直觀的看到是由SLEUTH-DEMO調(diào)用SLEUTH-PROVIDE服務(wù)的時(shí)候,SLEUTH-DEMO服務(wù)接口產(chǎn)生的異常!
假如不使用Sleuth,在我們進(jìn)行遠(yuǎn)程調(diào)用的時(shí)候報(bào)錯(cuò)了,實(shí)際上我們是看不到他是因?yàn)槭裁磮?bào)錯(cuò)的,我們只知道調(diào)用他報(bào)錯(cuò)了,日志如下,要想真正知道報(bào)的什么異常還得去查看遠(yuǎn)程調(diào)用的服務(wù)日志,而且還得比對(duì)服務(wù)調(diào)用時(shí)間,來(lái)查看當(dāng)時(shí)報(bào)錯(cuò)的日志。
2.4. sleuth相關(guān)配置
問(wèn)題: 默認(rèn)情況下,它將它們發(fā)送到 localhost(端口 9411)上的 Zipkin 收集器服務(wù),假設(shè)我們微服務(wù)并不是都部署在一臺(tái)機(jī)器,那應(yīng)該怎么辦呢?使用spring.zipkin.baseUrl配置Zipkin 服務(wù)的位置。
spring: application: name:sleuth-demo zipkin: base-url:http://localhost:9411/#指定zipkin地址 sleuth: sampler: #采樣率值介于0到1之間,1則表示全部采集 probability:1 #每秒采集的數(shù)量,默認(rèn)是10,通過(guò)設(shè)置這個(gè)可以有效的避免消息過(guò)大 rate:10
2.5. 向Zipkin發(fā)送消息的方式
這個(gè)是什么意思呢?首先我們要明白一點(diǎn),zipkin當(dāng)中所展示的數(shù)據(jù)實(shí)際上都是由我們服務(wù)發(fā)送給zipkin他才將數(shù)據(jù)清洗,并展示出來(lái)的。默認(rèn)采用的是HTTP請(qǐng)求方式來(lái)進(jìn)行向zipkin發(fā)送的。
在實(shí)際開發(fā)當(dāng)中HTTP請(qǐng)求方式,有時(shí)候勢(shì)必會(huì)給我們服務(wù)器帶來(lái)一些壓力,并發(fā)量特別大的情況下,會(huì)占用大量線程。HTTP請(qǐng)求講究的是,我發(fā)送給你,然后并且收到你的消息回復(fù),這條連接才算結(jié)束。
所以基于這一點(diǎn)zipkin也給我們提供了可以通過(guò)消息中間件來(lái)進(jìn)行發(fā)送,發(fā)送給消息中間件我們就不用管了,這樣可以避免線程擁堵,目前支持RabbitMQ和Kafka、ActiveMQ!
我這里直接使用rabbitmq來(lái)進(jìn)行演示 其他同理,不懂可以看官網(wǎng)!
第一步:添加依賴
org.springframework.amqp spring-rabbit
第二步:添加rabbitmq配置
spring: application: name:sleuth-demo zipkin: base-url:http://localhost:9411/ sender: type:rabbit rabbitmq: host:127.0.0.1 port:5672 username:guest password:guest listener:#這里配置了重試策略 direct: retry: enabled:true sleuth: sampler: #采樣率值介于0到1之間,1則表示全部采集 probability:1 rate:10
第三步:修改Zipkin啟動(dòng)命令
java-jarzipkin-server-2.23.18-exec.jar--RABBIT_ADDRESSES=127.0.0.1:5672--RABBIT_USER=guest--RABBIT_PASSWORD=guest
docker啟動(dòng):
dockerrun --namezipkin-server2-d --restart=always -p9411:9411 -eRABBIT_ADDRESSES=162.14.115.18:5672 -eRABBIT_USER=admin -eRABBIT_PASSWORD=admin openzipkin/zipkin:2.21.7
第四步:測(cè)試,啟動(dòng)我們的服務(wù),然后訪問(wèn)接口http://localhost:8989/
zipkin就是自動(dòng)創(chuàng)建的隊(duì)列,通過(guò)這個(gè)隊(duì)列進(jìn)行發(fā)送消息的!
打開zipkin仍然可以看到調(diào)用信息。
2.6. Sleuth到底給Zipkin都發(fā)送了哪些數(shù)據(jù)?
想知道這個(gè)其實(shí)非常簡(jiǎn)單,我們只需要將zipkin給停止掉,然后調(diào)用我們的服務(wù)接口即可。這時(shí)候隊(duì)列當(dāng)中的消息就沒(méi)有人消費(fèi)了,然后我們就可以通過(guò)RabbitMQ管理頁(yè)直接獲取消息。
2.7. Zipkin配置持久化
假如不配置zipkin持久化,當(dāng)我們把jar包給停止后,所有收集到的消息會(huì)直接清除!針對(duì)于數(shù)據(jù)持久化zipkin提供了好幾種種方式,常用的有兩種,一種存儲(chǔ)到mysql,另一種是Elasticsearch。
方式一:持久化到mysql
配置持久化相當(dāng)簡(jiǎn)單,只需要在mysql創(chuàng)建一個(gè)庫(kù)和表,然后zipkin啟動(dòng)的時(shí)候指定持久化方式為mysql即可。
java-jarzipkin-server-2.23.18-exec.jar--STORAGE_TYPE=mysql--MYSQL_HOST=127.0.0.1--MYSQL_TCP_PORT=3306--MYSQL_DB=zipkin--MYSQL_USER=root--MYSQL_PASS=root--RABBIT_ADDRESSES=127.0.0.1:5672--RABBIT_USER=guest--RABBIT_PASSWORD=guest
方式二:持久化到Elasticsearch
這一種我就不再演示了
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
三、引入sleuth怎么輸出traceId
首先我們要找到SpringBoot默認(rèn)的logback配置
base.xml引用了console-appender.xml和defaults.xml
我們之所以不配置日志,springboot也可以控制打印日志主要是以下:
CONSOLE_LOG_PATTERN就是springboot默認(rèn)的日志格式:日志格式當(dāng)中使用到了一個(gè)LOG_DATEFORMAT_PATTERN變量
主要是由TraceEnvironmentPostProcessor類當(dāng)中的postProcessEnvironment方法在啟動(dòng)的時(shí)候判斷是否開啟了sleuth,假如開啟了會(huì)直接設(shè)置LOG_DATEFORMAT_PATTERN變量。
四、logback日志問(wèn)題
分布式系統(tǒng)中,如何快速定位某個(gè)用戶的請(qǐng)求日志?
據(jù)我了解 zikpin并沒(méi)有提供詳細(xì)報(bào)錯(cuò)日志,例如是哪行報(bào)錯(cuò),通過(guò)zipkin我們可以知道是鏈路中哪個(gè)服務(wù)報(bào)錯(cuò),這時(shí)候我們可以通過(guò)traceid去日志文件當(dāng)中查看詳細(xì)報(bào)錯(cuò)信息!
但是有時(shí)候我們項(xiàng)目當(dāng)中使用了logback.xml,日志格式里面并沒(méi)有設(shè)置traceid。那到底應(yīng)該如何設(shè)置呢?
我們可以參考springboot默認(rèn)的日志配置,然后配置如下:
《?xml version=“1.0” encoding=“UTF-8”?》
《configuration scan=“true” scanPeriod=“60 seconds” debug=“false”》
《!-- 參考SpringBoot默認(rèn)的logback配置,增加了error日志文件 --》
《!-- org/springframework/boot/logging/logback/base.xml --》
《conversionRule conversionWord=“clr” converterClass=“org.springframework.boot.logging.logback.ColorConverter” /》
《conversionRule conversionWord=“wex” converterClass=“org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter” /》
《conversionRule conversionWord=“wEx” converterClass=“org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter” /》
《property name=“LOG_PATH” value=“。/logs”/》
《property name=“CONSOLE_LOG_PATTERN” value=“${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}”/》
《property name=“FILE_LOG_PATTERN” value=“${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}”/》
《!-- 控制臺(tái)日志 --》
《appender name=“CONSOLE” class=“ch.qos.logback.core.ConsoleAppender”》
《encoder》
《pattern》${CONSOLE_LOG_PATTERN}《/pattern》
《/encoder》
《/appender》
《!--獲取比info級(jí)別高(包括info級(jí)別)但除error級(jí)別的日志--》
《appender name=“file_info” class=“ch.qos.logback.core.rolling.RollingFileAppender”》
《file》${LOG_PATH}/sys-info.log《/file》
《!-- 循環(huán)政策:基于時(shí)間創(chuàng)建日志文件 --》
《rollingPolicy class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”》
《!-- 日志文件名格式 --》
《fileNamePattern》${LOG_PATH}/sys-info.%d{yyyy-MM-dd}.log《/fileNamePattern》
《!-- 日志最大的歷史 60天 --》
《maxHistory》60《/maxHistory》
《/rollingPolicy》
《encoder》
《pattern》${FILE_LOG_PATTERN}《/pattern》
《/encoder》
《filter class=“ch.qos.logback.classic.filter.LevelFilter”》
《level》ERROR《/level》
《onMatch》DENY《/onMatch》
《onMismatch》ACCEPT《/onMismatch》
《/filter》
《/appender》
《appender name=“file_error” class=“ch.qos.logback.core.rolling.RollingFileAppender”》
《file》${LOG_PATH}/sys-error.log《/file》
《!-- 循環(huán)政策:基于時(shí)間創(chuàng)建日志文件 --》
《rollingPolicy class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”》
《!-- 日志文件名格式 --》
《fileNamePattern》${LOG_PATH}/sys-error.%d{yyyy-MM-dd}.log《/fileNamePattern》
《!-- 日志最大的歷史 60天 --》
《maxHistory》60《/maxHistory》
《/rollingPolicy》
《encoder》
《pattern》${FILE_LOG_PATTERN}《/pattern》
《/encoder》
《filter class=“ch.qos.logback.classic.filter.LevelFilter”》
《!-- 過(guò)濾的級(jí)別 --》
《level》ERROR《/level》
《!-- 匹配時(shí)的操作:接收(記錄) --》
《onMatch》ACCEPT《/onMatch》
《!-- 不匹配時(shí)的操作:拒絕(不記錄) --》
《onMismatch》DENY《/onMismatch》
《/filter》
《/appender》
《!-- 異步輸出 --》
《appender name=“ASYNC-INFO” class=“ch.qos.logback.classic.AsyncAppender”》
《!-- 不丟失日志。默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄TRACT、DEBUG、INFO級(jí)別的日志 --》
《discardingThreshold》0《/discardingThreshold》
《!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能。默認(rèn)值為256 --》
《queueSize》512《/queueSize》
《!-- 添加附加的appender,最多只能添加一個(gè) --》
《appender-ref ref=“file_info”/》
《/appender》
《appender name=“ASYNC-ERROR” class=“ch.qos.logback.classic.AsyncAppender”》
《!-- 不丟失日志。默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄TRACT、DEBUG、INFO級(jí)別的日志 --》
《discardingThreshold》0《/discardingThreshold》
《!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能。默認(rèn)值為256 --》
《queueSize》512《/queueSize》
《!-- 添加附加的appender,最多只能添加一個(gè) --》
《appender-ref ref=“file_error”/》
《/appender》
《!-- 日志總開關(guān) --》
《root level=“INFO”》
《appender-ref ref=“CONSOLE” /》
《appender-ref ref=“ASYNC-INFO” /》
《appender-ref ref=“ASYNC-ERROR” /》
《/root》
《!-- 日志過(guò)濾 --》
《logger name=“org.apache.catalina.startup.DigesterFactory” level=“ERROR”/》
《logger name=“org.apache.catalina.util.LifecycleBase” level=“ERROR”/》
《logger name=“org.apache.coyote.http11.Http11NioProtocol” level=“WARN”/》
《logger name=“org.apache.sshd.common.util.SecurityUtils” level=“WARN”/》
《logger name=“org.apache.tomcat.util.net.NioSelectorPool” level=“WARN”/》
《logger name=“org.eclipse.jetty.util.component.AbstractLifeCycle” level=“ERROR”/》
《logger name=“org.hibernate.validator.internal.util.Version” level=“WARN”/》
《/configuration》
五、除了Zipkin還有哪些鏈路跟蹤
CAT是一個(gè)更綜合性的平臺(tái),提供的監(jiān)控功能最全面,國(guó)內(nèi)幾個(gè)大廠生產(chǎn)也都在使用。但研發(fā)進(jìn)度及版本更新相對(duì)較慢。
Zipkin由Twitter開源,調(diào)用鏈分析工具,基于spring-cloud-sleuth得到廣泛使用,非常輕量,使用部署簡(jiǎn)單。
Skywalking專注于鏈路和性能監(jiān)控,國(guó)產(chǎn)開源,埋點(diǎn)無(wú)侵入,UI功能較強(qiáng)。能夠加入Apache孵化器,設(shè)計(jì)思想及代碼得到一定認(rèn)可,后期應(yīng)該也會(huì)有更多的發(fā)展空間及研發(fā)人員投入。目前使用廠商最多。版本更新較快。
Pinpoint專注于鏈路和性能監(jiān)控,韓國(guó)研發(fā)團(tuán)隊(duì)開源,埋點(diǎn)無(wú)侵入,UI功能較強(qiáng),但畢竟是小團(tuán)隊(duì),不知道會(huì)不會(huì)一直維護(hù)著,目前版本仍在更新中
支持的存儲(chǔ):
審核編輯:劉清
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9160瀏覽量
85415 -
RPC
+關(guān)注
關(guān)注
0文章
111瀏覽量
11534 -
HTTP協(xié)議
+關(guān)注
關(guān)注
0文章
61瀏覽量
9721
原文標(biāo)題:Spring Cloud Sleuth 全鏈路日志跟蹤解決方案(強(qiáng)烈推薦)
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論