live-demo
與 skywalking
原始碼聯調
構建專案
找一個目錄執行如下命令
git clone https://github.com/apache/skywalking.git # clone skywalking專案
cd skywalking # 進入skywalking目錄
git checkout v8.4.0 # 切換到v8.4.0版本
git checkout -b new_v8.4.0 # 建立一個新分支
git submodule init # 初始化子模組
git submodule update # 更新子模組,注意:可能因為網路問題失敗,如果失敗多次嘗試即可
./mvnw clean package -DskipTests # 執行maven命令,構建skywalking專案,時間會比較長,耐心等待...
cd .. # 進入上級目錄
git clone https://github.com/SkyAPMTest/skywalking-live-demo # clone live-demo skywalking案例專案
cd skywalking-live-demo # 進入skywalking-live-demo目錄
mvn clean package # 構建demo專案
cd .. # 進入上級目錄
構建成功後會在如下兩個目錄生成安裝包
.
├── skywalking
│ └── dist
│ │ ├── apache-skywalking-apm-bin-es7.tar.gz # es7的安裝包
│ │ └── apache-skywalking-apm-bin.tar.gz
└── skywalking-live-demo
└── live-demo-assembly.tar.gz # demo專案
skywalking
部分模組構建
# 打包 agent 模組,會出現skywalking-agent目錄
./mvnw package -Pagent -DskipTests
# 打包 agent 模組,然後打包到dist目錄
./mvnw package -Pagent,dist -DskipTests
# 打包 backend 模組,然後打包到dist目錄
./mvnw package -Pbackend,dist -DskipTests
# 打包 UI 模組,然後打包到dist目錄
./mvnw package -Pui,dist -DskipTests
將 skywalking
作為模組匯入 skywalking-live-demo
專案
- 在
IDEA
中開啟skywalking-live-demo
專案 - 在開啟的
skywalking-live-demo
專案中使用Module from Existing Sources
的方式匯入Skywalking
- 成功匯入後,會出現如下兩個模組
PS:匯入 skywalking
專案的時候可能會出現 skywalking
的子模組被忽略的情況,可以使用如下方式取消忽略
啟動 OAP
服務
執行 org.apache.skywalking.oap.server.starter.OAPServerStartUp#main
方法,啟動 OAP
服務
生成 skywalking-agent
cd skywalking # 進入skywalking目錄
./mvnw package -Pagent -DskipTests # 打包 agent 模組,會出現skywalking-agent目錄
生成後的 skywalking-agent
目錄結構如下所示:
skywalking
└── skywalking-agent
├── activations
├── bootstrap-plugins
├── config
├── logs
├── optional-plugins
├── optional-reporter-plugins
├── plugins
└── skywalking-agent.jar
配置專案 JVM
啟動引數
ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
專案都需要配置,這裡以 ProjectA
為例
-javaagent:{需要替換成專案目錄}/skywalking/skywalking-agent/skywalking-agent.jar
-Dskywalking.collector.grpc_channel_check_interval=2
-Dskywalking.collector.app_and_service_register_check_interval=2
-Dcollector.discovery_check_interval=2
-Dskywalking.collector.backend_service=localhost:11800
-Dskywalking.agent.service_name=business-zone::projectA
-Dskywalking.logging.level=info
-Dskywalking.plugin.toolkit.log.grpc.reporter.server_host=localhost
-Dskywalking.plugin.toolkit.log.grpc.reporter.server_port=11800
-Dskywalking.plugin.toolkit.log.grpc.reporter.max_message_size=10485760
-Dskywalking.plugin.toolkit.log.grpc.reporter.upstream_timeout=30
驗證
驗證 agent
斷點是否生效
在 org.apache.skywalking.apm.agent.SkyWalkingAgent#premain
方法中任一語句打上斷點,啟動 ProjectA
在 UI
上驗證 trace
是否生成
- 啟動
Kafka
、Eureka
、ProjectB
、ProjectC
、ProjectD
、ProjectA
- 在命令列執行
curl "http://localhost:8764/projectA/test"
$ curl "http://localhost:8764/projectA/test"
{"traceId":"20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
- 使用上一步執行拿到的
traceId
,在UI
中查詢,可以得到如下結果
PS:注意 ProjectA
、 ProjectB
、 ProjectC
、 ProjectD
、 Eureka
都可以在 IDEA
原始碼啟動,但 Kafka
需要通過命令啟動,可以參考 live-demo/bin/startup.sh
指令碼
總結
不管是研究原始碼執行流程還是自己寫一些外掛、擴充套件一些功能, debug
原始碼是最基本的操作。 Skywalking
有些不一樣的是,它的客戶端這塊是無法直接執行,需要附加在其他應用上。
參考文件
分享並記錄所學所見