SkyWalking 6.x 原始碼分析 —— 除錯環境搭建
從官方倉庫 ofollow,noindex" target="_blank">https://github.com/apache/incubator-skywalking Fork
出屬於自己的倉庫。為什麼要 Fork
?既然開始閱讀、除錯原始碼,我們可能會寫一些註釋,有了自己的倉庫,可以進行自由的提交。:smiling_imp:
使用 IntelliJ IDEA
從 Fork
出來的倉庫拉取程式碼。拉取完成後, Maven
會下載依賴包,可能會花費一些時間,耐心等待下。
本文基於 master
分支,使用 SkyWalking 6.0.0-beta-SNAPSHOT
版本。
3. 編譯 SkyWalking
-
開啟 IntelliJ IDEA Terminal 中,執行輸入命令:
-
git submodule init
,初始化子模組。 -
git submodule update
,更新子模組。 -
mvn package -Dmaven.test.skip=true
,進行編譯。這個編譯的過程中,依賴 npm 環境。一般情況下,我們不需要編譯 SkyWalking UI 專案,所以我們可以把apm-webapp/pom.xml
的如下部分,進行註釋掉。
-
-
設定 RPC/">gRPC 的 自動生成 的程式碼目錄,為 原始碼 目錄 :
- 將
apm-protocol/apm-network/target/generated-sources/protobuf
目錄下面grpc-java
和java
目錄 右鍵 設定為Generated Rources Root
。 - 將
oap-server/server-core/target/generated-sources/protobuf
目錄下面grpc-java
和java
目錄 右鍵 設定為Generated Rources Root
。 - 將
oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/target/generated-sources/protobuf
目錄下面grpc-java
和java
目錄 右鍵 設定為Generated Rources Root
。
- 將
4. 啟動 SkyWalking OAP Server
-
安裝 ElasticSearch 6.x 因為 SkyWalking 的 Tracing 的資料儲存在它上面。具體的安全過程,胖友看看 《ElasticSearch 6.x 學習筆記:1.下載安裝與配置》 。
-
執行
oap-server
的server-starter
的org.apache.skywalking.oap.server.starter.OAPServerStartUp
的#main(args)
方法,啟動 SkyWalking OAP Server 。 -
啟動成功日誌。
2018-11-19 17:12:26,331 - org.eclipse.jetty.server.Server - 71 [main] INFO[] - Started @5389ms
5. 啟動 SkyWalking UI
- 執行
apm-webapp
的org.apache.skywalking.apm.webapp.ApplicationStartUp
的#main(args)
方法,啟動 SkyWalking UI 。 - 瀏覽器開啟
http://127.0.0.1:8080
,輸入賬號密碼admin / admin
進行登入。
6. 啟動 SkyWalking Agent
- 在
skywalking-agent
目錄下,我們可以看到編譯出來的skywalking-agent.jar
: -
使用 Spring Boot 建立一個簡單的 Web 專案,注意埠不要使用 8080 ,因為 SkyWalking UI 使用了 8080 埠。類似如下 :
友情提示 : 這裡一定要注意下 。建立的 Web 專案,使用 IntelliJ IDEA 的 選單 File / New / Module 或 File / New / Module from Existing Sources , 保證 Web 專案和 SkyWalking 專案平級 。這樣,才可以使用 IntelliJ IDEA 除錯 Agent 。
-
-
在
org.skywalking.apm.agent.SkyWalkingAgent
的#premain(...)
方法,打上除錯斷點。 - 執行 Web 專案的 Application 的
#main(args)
方法,並增加 JVM 啟動引數,-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
。/path/to
引數值 為上面我們編譯出來的 /packages/skywalking-agent 目錄的絕對路徑。如下圖 : - 如果在【 第三步 】的除錯斷點停住,說明 Agent 啟動 成功 。
考慮到可能我們會在 Agent 上增加程式碼註釋,這樣每次不得不重新編譯 Agent 。可以配置如下圖,自動編譯 Agent :
-
-T 1C clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true
。
另外,使用 IntelliJ IDEA Remote 遠端除錯,也是可以的。如下圖 :
666. 彩蛋
SkyWalking 環境搭建完成,胖友們可以起飛,原始碼讀起來。
如下是筆者在 SkyWalking 3.x 對程式碼量和用途的簡單整理,完善度比較低,可能有一丟丟的幫助:
因為準備重新讀 SkyWalking 6.x 的程式碼,所以又簡單的整理了下,這次的完成度更低,哈哈哈哈:
另外,超級推薦看看胖友在錄製的 SkyWalking 的視訊,快來點選傳送門 。