Skywalking-03:Skywalking本地調試

live-demo 與 skywalking 源碼聯調

構建項目

找一個目錄執行以下命令java

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 .. # 進入上級目錄

構建成功後會在以下兩個目錄生成安裝包git

.
├── 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 項目

  1. IDEA 中打開 skywalking-live-demo 項目
  2. 在打開的 skywalking-live-demo 項目中使用 Module from Existing Sources 的方式導入 Skywalking

file

  1. 成功導入後,會出現以下兩個模塊

file

PS:導入 skywalking 項目的時候可能會出現 skywalking 的子模塊被忽略的狀況,可使用以下方式取消忽略github

file

file

啓動 OAP 服務

執行 org.apache.skywalking.oap.server.starter.OAPServerStartUp#main 方法,啓動 OAP 服務shell

生成 skywalking-agent

cd skywalking # 進入skywalking目錄
./mvnw package -Pagent -DskipTests # 打包 agent 模塊,會出現skywalking-agent目錄

生成後的 skywalking-agent 目錄結構以下所示:apache

skywalking
└── skywalking-agent
    ├── activations
    ├── bootstrap-plugins
    ├── config
    ├── logs
    ├── optional-plugins
    ├── optional-reporter-plugins
    ├── plugins
    └── skywalking-agent.jar

配置項目 JVM 啓動參數

ProjectA 、 ProjectB 、 ProjectC 、 ProjectD 項目都須要配置,這裏以 ProjectA 爲例bootstrap

-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

file

驗證

驗證 agent 斷點是否生效

org.apache.skywalking.apm.agent.SkyWalkingAgent#premain 方法中任一語句打上斷點,啓動 ProjectA網絡

file

UI 上驗證 trace 是否生成

  1. 啓動 Kafka 、 Eureka 、 ProjectB 、 ProjectC 、 ProjectD 、 ProjectA
  2. 在命令行執行 curl "http://localhost:8764/projectA/test"
$ curl "http://localhost:8764/projectA/test"
{"traceId":"20b7bb868a384b7bac5130efb5f76f17.82.16244120942450001"}%
  1. 使用上一步執行拿到的 traceId ,在 UI 中查詢,能夠獲得以下結果

file

PS:注意 ProjectA 、 ProjectB 、 ProjectC 、 ProjectD 、 Eureka 均可以在 IDEA 源碼啓動,但 Kafka 須要經過命令啓動,能夠參考 live-demo/bin/startup.sh 腳本app

總結

無論是研究源碼執行流程仍是本身寫一些插件、擴展一些功能, debug 源碼是最基本的操做。 Skywalking 有些不同的是,它的客戶端這塊是沒法直接執行,須要附加在其餘應用上。curl

參考文檔

  1. skywalking-live-demo

分享並記錄所學所見jvm

相關文章
相關標籤/搜索