Dubbo學習系列之十八(Skywalking服務跟蹤)

  咱們知道,微服務不是獨立的存在,不然就不須要微服務這個架構了,那麼當發起一次請求,如何知道此次請求的軌跡,或者說遇到響應緩慢、java

請求出錯的狀況,咱們該如何定位呢?這就涉及到APM(Application Performance Management)組件了,主流的選型有Zipkin、Pinpoint、Jaeger、git

Skywalking,我在VehicleAdmin項目中試用了Dubbo+Zipkin組合,但發現當服務既是生產者又是消費者時有不兼容問題,因而我在此作了個Dubbo+github

Skywalking的演示版本,僅供參考。web

 

原創文章,謝絕一切形式轉載,違者必究!redis

 

準備sql

Idea2019.03/Gradle6.0.1/Maven3.6.3/JDK11.0.4/Lombok0.28/SpringBoot2.2.4RELEASE/mybatisPlus3.3.0/Soul2.1.2/Dubbo2.7.5/Druid1.2.21/apache

Zookeeper3.5.5/Mysql8.0.11/Redis5.0.5/Skywalking7.0.0bootstrap

難度 新手--戰士--老兵--大師瀏覽器

目標緩存

  1. Skywalking作微服務鏈路監控

步驟

爲了碰見各類問題,同時保持時效性,我儘可能使用最新的軟件版本。源碼地址:https://github.com/xiexiaobiao/vehicle-shop-admin

1 原理

JavaAgent開啓java探針(使用ASM字節碼技術開發的工具),即運行在main方法以前的攔截器,簡單講就是動態代理和方法攔截器的組合,攔截並分析

請求/響應的信息。更多關於java探針的內容,在此不展開,略!

2 步驟

2.1 下載

下載Skywalking,略!7.0.0版本以後編譯好的二進制文件就是一個Window/Linux通用的包了,直接解壓便可。

2.2 開發環境使用

IDE開發環境Idea下的使用舉例,JVM參數行添加:

-javaagent:C:\apache-skywalking-apm-bin-7.0\agent\skywalking-agent.jar -DSW_AGENT_NAME=authority-service -Dskywalking.collector.servers=localhost:10800

 

以上javaagent地址爲skywalking-agent.jar地址,能夠爲相對/絕對路徑:

而後其餘每一個服務都相似操做,修改DSW_AGENT_NAM內容爲具體的服務名。

若是服務打包成Jar文件,啓動時加參數便可,這裏給個實例:

java -jar -javaagent:$AGENT_PATH/skywalking-agent.jar -Dskywalking.agent.application_code=dubbo-consumer -Dskywalking.collector.servers=localhost:10800 authority-1.0-SNAPSHOT.jar

 

服務名稱也能夠在config文件中配置,但只能配一個!!感受這配置就是個雞肋。

2.3 運行Skywalking

若是沒有在apache-skywalking-apm-bin-7.0\webapp\webapp.yml中對 server: port: 8080 修改端口號,運行解壓包下的 bin/startup 文件,

便可啓動 Skywalking Server 端,打開瀏覽器地址便可:http://localhost:8080/

2.4 運行項目

啓動vehicleadmin項目,順序:souladmin—>soulbootstrap—>redis—>authority—>customer—>stock—>order —>business, 進入WEBUI儀表盤總覽:

 

服務拓撲圖,能夠展現服務、DB、緩存、網關信息,能夠獨立出單個服務顯示:

 

調用鏈追蹤,能夠樹形、表格、列表方式展現,好比顯示 /order/list的跨度(span)信息和調用鏈信息,能夠了解鏈路總耗時和span耗時:

 

點擊一個鏈對象後展現的span信息,如下爲一個dubbo調用實例:

2.5 日誌接入

若是須要在日誌中打印,即手動埋點,也可使用API,對任何須要追蹤的方法,使用 @Trace 標註,則此方法會被加入到追蹤鏈中,

經過TraceContext.traceId() 在應用任意位置獲取traceId,還能夠經過ActiveSpan.tag() 自定義標籤,例如我在com.biao.shop.authority.controller.SystemUserController中:

 

輸出示例:

 

另外,還能夠結合Logback進行日誌處理,例如我在vehicle-shop-admin\authority\src\main\resources\config\logback-dev.xml中添加一個appender專用於skywalking:


 

總結

Skywalking鏈路監控已爲Apache頂級項目,UI界面豐富,監控範圍廣、維度多,對代碼零侵入,系統性能損失低,還支持接入 ELK 進行存儲展現,喜歡的就趕忙拿去用吧。

 

全文完!

 

原創文章,謝絕一切形式轉載!

 


個人其餘文章:

     只寫原創,敬請關注 

相關文章
相關標籤/搜索