SpringCloudSleuth整合Zipkin的方法

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

成都創(chuàng)新互聯(lián)專注于中大型企業(yè)的成都網(wǎng)站設(shè)計、成都做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上千,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!

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

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

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

  • Annotation(標(biāo)注)

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

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

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

  4. CR(Client Received客戶端接收) span結(jié)束的標(biāo)識??蛻舳顺晒邮盏椒?wù)端到相應(yīng)。

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

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

Spring Cloud Sleuth整合Zipkin的方法

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

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這樣的線程名了。現(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很好理解,就是我們的項目名稱。

  • 第一個d406e2f823a1c2a3為traceID

  • 第二個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ù)據(jù),從而跟蹤系統(tǒng)的調(diào)用問題。

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

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

然后啟動它

java -jar zipkin.jar

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

docker pull openzipkin/zipkin

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

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

Spring Cloud Sleuth整合Zipkin的方法

在我們的項目中添加依賴

<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)在我們重新啟動項目,進(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é)果記錄

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

Spring Cloud Sleuth整合Zipkin的方法

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

Spring Cloud Sleuth整合Zipkin的方法

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

Spring Cloud Sleuth整合Zipkin的方法

這里只有SR,SC的兩條數(shù)據(jù),因為我們是使用瀏覽器訪問的,而瀏覽器并沒有集成zipkin,它不會上報自己的數(shù)據(jù),所以這里沒有CS,CR的數(shù)據(jù)。如果我們在多個微服務(wù)之間都配置了zipkin,此處就會把所有的SR,SC,CS,CR的數(shù)據(jù)都上報上來。

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

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

elasticsearch的docker安裝可以參考elasticsearch中文分詞器的安裝和體驗

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

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

如果使用docker,啟動方式如下

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)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

新聞名稱:SpringCloudSleuth整合Zipkin的方法
分享鏈接:http://www.muchs.cn/article30/ijcppo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站營銷外貿(mào)建站、網(wǎng)站收錄標(biāo)簽優(yōu)化、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站