原文:https://juejin.im/post/5cd10e81e51d453b560f2d53
skywalking在apache里全票通過成為了apache頂級鏈路追蹤系統
項目地址:github.com/apache/skyw… 官方文檔:github.com/apache/skyw…
雖然官方文檔很全,但是中文文檔目前還沒完全翻譯過來,研究文檔需要花費一些時間,下面作者整理總結了官方文檔,可以幫助讀者快速上手
skywalking擁有豐富的三方庫追蹤支持,參考: apm-sdk-plugin

為了快速啟動項目,會使用docker技術
下載編譯
官方文檔:github.com/apache/skyw… 下載源碼,並下載依賴的git子模塊
git clone https://github.com/apache/skywalking.git
git submodule init
git submodule update
復制代碼
執行編譯
mvn clean package -Dmaven.test.skip=true
復制代碼
首次編譯需要下載依賴,等待的時間可能會久一些 出現下面的提示就是編譯成功了

查看dist目錄里的編譯結果

可以看到skywalking的部署包成功生成了
構建skywalking運行的docker鏡像
docker時區修改為 Asia/Shanghai
進入docker目錄,編輯docker-compose.yml,為elasticsearch, oap, ui服務添加時區環境變量為 Asia/Shanghai 核心代碼如下
environment: TZ: Asia/Shanghai 復制代碼
完整的docker-compose.yml已上傳github,參考:docker-compose.yml
構建docker鏡像
執行命令 make build
開始構建docker鏡像

使用docker images命令查看構建的容器

可以看到skywalking部署需要的ui和oap服務已經構建成功了
啟動skywalking服務
使用命令docker-compose up -d啟動服務

在瀏覽器里打開 ip:8080 查看效果

編寫測試代碼
可以使用現成的spring boot項目,也可以在 start.spring.io/ 創建一個新的spring boot項目
下面編寫幾個請求來試用下skywalking的追蹤功能 核心案例代碼如下
普通請求
@RequestMapping("test1") public String test1() { return "Hello World"; } 復制代碼
異常請求
@RequestMapping("test2") public String test2() { if (true) { throw new RuntimeException("a exception occured"); } return "Hello World2"; } 復制代碼
超時請求
@RequestMapping("test3") public String test3() throws InterruptedException { Thread.sleep(10000); return "Hello World3"; } 復制代碼
將項目打成jar,帶上skywalking啟動
把skywalking項目目錄里的skywalking-agent復制一份到項目里 然后修改skywalking-agent/config/agent.config配置文件

啟動spring boot項目
mvn clean package -Dmaven.test.skip=true java -javaagent:項目所在目錄/skywalking-agent/skywalking-agent.jar -jar target/myskywalking-0.0.1-SNAPSHOT.jar 復制代碼
然后在瀏覽器里請求上面編寫的測試代碼,可以使用curl,比如:
curl -k -vvv http://127.0.0.1:8080/test/test1
curl -k -vvv http://127.0.0.1:8080/test/test2
curl -k -vvv http://127.0.0.1:8080/test/test3
復制代碼
然后在skywalking管理后台查看追蹤到的數據

在追蹤頁面可以看到請求

查看異常的請求

一些注意的點
如果使用的組建沒有內置的追蹤支持,可以自行編寫插件實現,插件編寫參考:Java-Plugin-Development-Guide.md
docker容器里的時區要設置成和瀏覽器所在的機器的時區一致,比如 Aisa/Shanghai,不一致可能無法在瀏覽器里查看追蹤的數據