溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Cloud Sleuth整合Zipkin的方法

發(fā)布時(shí)間:2021-06-26 09:12:04 來源:億速云 閱讀:185 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Spring Cloud Sleuth整合Zipkin的方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Sleuth是一個(gè)Spring Cloud的分布式跟蹤解決方案。它由以下幾個(gè)方面組成

  • Span(跨度):Sleuth的基本工作單元,它由一個(gè)64位的id唯一標(biāo)識(shí)。除ID外,span還包含其他數(shù)據(jù),例如描述、時(shí)間戳事件、鍵值對的注解(標(biāo)簽)、span ID,span父ID等。

  • trace(跟蹤):一組span組成的樹狀結(jié)構(gòu)稱為trace.

  • Annotation(標(biāo)注)

  1. CS(Client Sent客戶端發(fā)送) 客戶端發(fā)起一個(gè)請求,該annotation描述了span的開始。

  2. SR(Server Received服務(wù)端接收) 服務(wù)端獲得請求,并準(zhǔn)備處理它。

  3. SS(Server Sent服務(wù)器端發(fā)送) 該annotation表明完成請求處理,當(dāng)響應(yīng)發(fā)回客戶端時(shí)。

  4. CR(Client Received客戶端接收) span結(jié)束的標(biāo)識(shí)。客戶端成功接收到服務(wù)端到相應(yīng)。

現(xiàn)在我們來具體看一下Sleuth的作用是什么,當(dāng)我們沒有加Sleuth依賴的時(shí)候,假設(shè)我們要訪問這樣一個(gè)接口

@GetMapping(value = "/users-anon/internal", params = "username")public LoginAppUser findByUsername(String username) {return appUserService.findByUsername(username);}

Spring Cloud Sleuth整合Zipkin的方法

在日志中,我們可以看到是這個(gè)樣子的

2019-11-01 00:17:05.402 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==>  Preparing: select u.* from app_user u inner join user_credentials c on c.userId = u.id where c.username = ?
2019-11-01 00:17:05.426 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==> Parameters: admin(String)
2019-11-01 00:17:05.503 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : <==      Total: 1
2019-11-01 00:17:05.522  INFO 805 --- [nio-8001-exec-1] c.c.u.service.impl.AppUserServiceImpl    : {"createTime":1516179419000,"enabled":true,"headImgUrl":"","id":1,"nickname":"測試1","password":"$2a$10$3uOoX1ps14CxuotogUoDreW8zXJOZB9XeGdrC/xDV36hhaE8Rn9HO","phone":"","province":"廣東","receiveAddress":"廣州天河珠村東橫五路紅噗公寓367","sex":1,"type":"APP","updateTime":1516179421000,"userIdentity":"SERVICEOPERATOR","username":"admin"}
2019-11-01 00:17:05.528 DEBUG 805 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==>  Preparing: select r.* from sys_role_user ru inner join sys_role r on r.id = ru.roleId where ru.userId = ?
2019-11-01 00:17:05.529 DEBUG 805 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==> Parameters: 1(Long)
2019-11-01 00:17:05.584 DEBUG 805 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : <==      Total: 1
2019-11-01 00:17:05.605 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==>  Preparing: select p.* from sys_permission p inner join sys_role_permission rp on p.id = rp.permissionId WHERE rp.roleId in ( ? )
2019-11-01 00:17:05.606 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==> Parameters: 1(Long)
2019-11-01 00:17:06.245 DEBUG 805 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : <==      Total: 31

除了mybatis的sql代碼外,就只能看到類似nio-8001-exec-1這樣的線程名了?,F(xiàn)在我們加入依賴

<dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-sleuth</artifactId></dependency>

重啟服務(wù),我們再來看一下日志

2019-11-01 00:23:01.469 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==>  Preparing: select u.* from app_user u inner join user_credentials c on c.userId = u.id where c.username = ?
2019-11-01 00:23:01.487 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==> Parameters: admin(String)
2019-11-01 00:23:01.649 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : <==      Total: 1
2019-11-01 00:23:01.671  INFO [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.service.impl.AppUserServiceImpl    : {"createTime":1516179419000,"enabled":true,"headImgUrl":"","id":1,"nickname":"測試1","password":"$2a$10$3uOoX1ps14CxuotogUoDreW8zXJOZB9XeGdrC/xDV36hhaE8Rn9HO","phone":"","province":"廣東","receiveAddress":"廣州天河珠村東橫五路紅噗公寓367","sex":1,"type":"APP","updateTime":1516179421000,"userIdentity":"SERVICEOPERATOR","username":"admin"}
2019-11-01 00:23:01.679 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==>  Preparing: select r.* from sys_role_user ru inner join sys_role r on r.id = ru.roleId where ru.userId = ?
2019-11-01 00:23:01.679 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==> Parameters: 1(Long)
2019-11-01 00:23:01.834 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : <==      Total: 1
2019-11-01 00:23:01.852 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==>  Preparing: select p.* from sys_permission p inner join sys_role_permission rp on p.id = rp.permissionId WHERE rp.roleId in ( ? )
2019-11-01 00:23:01.852 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==> Parameters: 1(Long)
2019-11-01 00:23:01.980 DEBUG [user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false] 816 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : <==      Total: 31

現(xiàn)在我們可以看到類似于user-center,d406e2f823a1c2a3,d406e2f823a1c2a3,false的東西。

  • user-center很好理解,就是我們的項(xiàng)目名稱。

  • 第一個(gè)d406e2f823a1c2a3為traceID

  • 第二個(gè)d406e2f823a1c2a3為spanID

  • false表示是否將此數(shù)據(jù)上傳給zipkin

當(dāng)然要打印這些日志,我們需要在配置文件中加入如下配置信息

logging:  level:    root: infocom.cloud: debug  file: logs/${spring.application.name}.log

現(xiàn)在我們來看一下zipkin。

  • Zipkin是Twitter開源的分布式跟蹤系統(tǒng),主要用來收集系統(tǒng)的時(shí)序數(shù)據(jù),從而跟蹤系統(tǒng)的調(diào)用問題。

要使用zipkin我們需要先下載zipkin server,下載方式為

curl -sSL https://zipkin.io/quickstart.sh | bash -sx --

然后啟動(dòng)它

java -jar zipkin.jar

當(dāng)然我們也可以使用docker,建議在服務(wù)器上使用

docker pull openzipkin/zipkin

 docker run -d --name zipkin -p 9411:9411 openzipkin/zipkin

啟動(dòng)之后,我們可以訪問zipkin的UI界面http://127.0.0.1:9411/zipkin/

Spring Cloud Sleuth整合Zipkin的方法

在我們的項(xiàng)目中添加依賴

<dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-zipkin</artifactId></dependency>

這里zipkin的依賴已經(jīng)包含了sleuth的依賴,所以我們可以去掉了之前sleuth的依賴。

添加配置

spring:
  zipkin:
#。 在服務(wù)器上填入服務(wù)器的IP    base-url: http://localhost:9411 enabled: truesender:      type: web  sleuth:    sampler:#      抽樣率,默認(rèn)是0.1(10%),現(xiàn)在取100%,只為測試方便,生產(chǎn)環(huán)境勿設(shè)100%      probability: 1.0

現(xiàn)在我們重新啟動(dòng)項(xiàng)目,進(jìn)行一次請求訪問,日志為

2019-11-01 01:04:03.187 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==>  Preparing: select u.* from app_user u inner join user_credentials c on c.userId = u.id where c.username = ?
2019-11-01 01:04:03.203 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : ==> Parameters: admin(String)
2019-11-01 01:04:03.276 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.U.findUserByUsername             : <==      Total: 1
2019-11-01 01:04:03.290  INFO [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.service.impl.AppUserServiceImpl    : {"createTime":1516179419000,"enabled":true,"headImgUrl":"","id":1,"nickname":"測試1","password":"$2a$10$3uOoX1ps14CxuotogUoDreW8zXJOZB9XeGdrC/xDV36hhaE8Rn9HO","phone":"","province":"廣東","receiveAddress":"廣州天河珠村東橫五路紅噗公寓367","sex":1,"type":"APP","updateTime":1516179421000,"userIdentity":"SERVICEOPERATOR","username":"admin"}
2019-11-01 01:04:03.294 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==>  Preparing: select r.* from sys_role_user ru inner join sys_role r on r.id = ru.roleId where ru.userId = ?
2019-11-01 01:04:03.294 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : ==> Parameters: 1(Long)
2019-11-01 01:04:03.347 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.dao.UserRoleDao.findRolesByUserId  : <==      Total: 1
2019-11-01 01:04:03.367 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==>  Preparing: select p.* from sys_permission p inner join sys_role_permission rp on p.id = rp.permissionId WHERE rp.roleId in ( ? )
2019-11-01 01:04:03.368 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : ==> Parameters: 1(Long)
2019-11-01 01:04:03.433 DEBUG [user-center,d7fa432636d9df52,d7fa432636d9df52,true] 956 --- [nio-8001-exec-1] c.c.u.d.R.findPermissionsByRoleIds       : <==      Total: 31

這里我們可以看到所有的user-center,d7fa432636d9df52,d7fa432636d9df52,true都已經(jīng)為true了,表示全部提交給zipkin了。

我們多刷新訪問幾次,來看一下zipkin的結(jié)果記錄

在頁面中點(diǎn)查找,結(jié)果如下

Spring Cloud Sleuth整合Zipkin的方法

由于我們這個(gè)接口在數(shù)據(jù)庫中進(jìn)行了3次查詢,并且我這里連接的是云端數(shù)據(jù)庫,所以時(shí)間會(huì)比較長一點(diǎn),但無論如何,這里都會(huì)記錄下每次調(diào)用的時(shí)間,它是按降序排序的,這樣我們就可以很輕松的插看到每次調(diào)用的情況,知道調(diào)用訪問哪里耗時(shí)。我們點(diǎn)擊某一個(gè)進(jìn)去,可以看到

Spring Cloud Sleuth整合Zipkin的方法

再點(diǎn)擊如上的service,可以看到更加詳細(xì)的信息

Spring Cloud Sleuth整合Zipkin的方法

這里只有SR,SC的兩條數(shù)據(jù),因?yàn)槲覀兪鞘褂脼g覽器訪問的,而瀏覽器并沒有集成zipkin,它不會(huì)上報(bào)自己的數(shù)據(jù),所以這里沒有CS,CR的數(shù)據(jù)。如果我們在多個(gè)微服務(wù)之間都配置了zipkin,此處就會(huì)把所有的SR,SC,CS,CR的數(shù)據(jù)都上報(bào)上來。

zipkin數(shù)據(jù)持久化

一般我們會(huì)使用elasticsearch來做zipkin的數(shù)據(jù)持久化。

elasticsearch的docker安裝可以參考elasticsearch中文分詞器的安裝和體驗(yàn)

安裝好elasticsearch后,我們可以用如下命令啟動(dòng)zipkin服務(wù)端

STORAGE_TYPE=elasticsearch ES_HOSTS=192.168.1.219:9200 java -jar zipkin.jar

如果使用docker,啟動(dòng)方式如下

docker run -d --name zipkin -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.1.219:9200 openzipkin/zipkin

“Spring Cloud Sleuth整合Zipkin的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI