天天看點

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

  我們知道,微服務不是獨立的存在,否則就不需要微服務這個架構了,那麼當發起一次請求,如何知道這次請求的軌迹,或者說遇到響應緩慢、

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

Skywalking,我在VehicleAdmin項目中試用了Dubbo+Zipkin組合,但發現當服務既是生産者又是消費者時有不相容問題,于是我在此做了個Dubbo+

Skywalking的示範版本,僅供參考。

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

本文隻發表在"公衆号"和"部落格園",其他均屬複制粘貼!如果覺得排版不清晰,請檢視公衆号文章。 

準備:

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/

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

難度: 新手--戰士--老兵--大師

目标:

  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 進行存儲展示,喜歡的就趕緊拿去用吧。

全文完!

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

我的其他文章:

  • 1 Spring優雅整合Redis緩存
  • 2 SOFARPC模式下的Consul注冊中心
  • 3 八種控制線程順序的方法
  • 4 移動應用APP購物車(店鋪系列二)
  • 5 H5開發移動應用APP(店鋪系列一)

     隻寫原創,敬請關注