在spring boot中三分鐘上手apache頂級分佈式鏈路追蹤系統skywalking

skywalking在apache裏全票經過成爲了apache頂級鏈路追蹤系統java

項目地址:github.com/apache/skyw… 官方文檔:github.com/apache/skyw…git

雖然官方文檔很全,可是中文文檔目前還沒徹底翻譯過來,研究文檔須要花費一些時間,下面做者整理總結了官方文檔,能夠幫助讀者快速上手github

skywalking擁有豐富的三方庫追蹤支持,參考: apm-sdk-plugin spring

經常使用的組件好比dubbo, httpclient, rocketmq, jdbc, hystrix等都已官方支持了

爲了快速啓動項目,會使用docker技術docker

下載編譯

官方文檔:github.com/apache/skyw… 下載源碼,並下載依賴的git子模塊shell

git clone https://github.com/apache/skywalking.git
git submodule init
git submodule update
複製代碼

執行編譯apache

mvn clean package -Dmaven.test.skip=true
複製代碼

首次編譯須要下載依賴,等待的時間可能會久一些 出現下面的提示就是編譯成功了 瀏覽器

查看dist目錄裏的編譯結果 bash

能夠看到skywalking的部署包成功生成了app

構建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 查看效果

Snipaste_2019-05-07_09-18-50
使用默認的用戶名和密碼 admin admin登錄管理後臺

編寫測試代碼

可使用現成的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配置文件

skywalking-config
主要是修改上圖裏的項目名稱,這樣在控制後臺就好標識出這個項目了,好比把配置 agent.service_name修改爲myskywalking

啓動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管理後臺查看追蹤到的數據

在追蹤頁面能夠看到請求

默認skywalking會抓取100%的請求,能夠修改agent.config配置文件中的agent.sample_n_per_3_secs配置項配置抓取的請求的百分比

查看異常的請求

能夠看到異常請求調用的堆棧信息被記錄,這個在排查問題的過程當中通常都會用到

一些注意的點

若是使用的組建沒有內置的追蹤支持,能夠自行編寫插件實現,插件編寫參考:Java-Plugin-Development-Guide.md

docker容器裏的時區要設置成和瀏覽器所在的機器的時區一致,好比 Aisa/Shanghai,不一致可能沒法在瀏覽器裏查看追蹤的數據

相關文章
相關標籤/搜索