1. 程式人生 > 其它 >.NetCore從零開始使用Skywalking分散式鏈路追蹤系統

.NetCore從零開始使用Skywalking分散式鏈路追蹤系統

.NetCore從零開始使用Skywalking分散式鏈路追蹤系統

當我們用很多服務時,各個服務間的呼叫關係是怎麼樣的?各個服務單呼叫的順序\時間效能怎麼樣?服務出錯了,到底是哪個服務引起的?這些問題我們用什麼方案解決呢,以前的方式是各個系統自己單獨做日誌,出了問題從暴出問題的服務開始一個一個服務的排查,耗時耗力,有些日誌不全的,還不一定查得出來。好在現在有Skywalking鏈路追蹤系統,可以不用寫任何程式碼,就追蹤到各個服務間的呼叫關係和效能狀態等。

本文將從0開始搭建兩個webapi專案,使用Skywalking來追蹤他們之間的呼叫關係及響應時間。開發環境為VisualStudio2019

1:安裝Skywalking,可參考:https://www.cnblogs.com/sunyuliang/p/11422576.html,本列中搭建好後的Skywalking伺服器地址為:192.168.150.134

2:開啟VS建立一個demo1的webapi專案。 2.1:為專案新增NuGet程式包SkyAPM.Agent.AspNetCore的引用   2.2,在專案根目錄新增skyapm.json檔案,並新增下以內容,其中的Servers結點的IP地址根據實際情況換成自己的伺服器IP
{
  "SkyWalking": {
    "ServiceName": "Demo01",
    "Namespace": "",
    "HeaderVersions": [
      "sw6"
    ],
    "Sampling": {
      "SamplePer3Secs": -1,
      "Percentage": -1.0
    },
    "Logging": {
      "Level": "Debug",
      "FilePath": "logs/skyapm-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      "ProtocolVersion": "v6",
      "QueueSize": 30000,
      "BatchSize": 3000,
      "gRPC": {
        "Servers": "192.168.150.134:11800", 
        "Timeout": 10000,
        "ConnectTimeout": 10000,
        "ReportTimeout": 600000
      }
    }
  }
}

  2.3: 將skyapm.json檔案的屬性”複製到輸出目錄“ 修改為 ”如果較新則複製”

2.4:展開專案的Properties,開啟launchSettings.json檔案,在其中的環境變數中加入"SKYWALKING__SERVICENAME":"asp-net-core-frontend"

  2.5:到目前skywalking就已經成功引入到系統中了。接下來我們來驗證一下是否正常,直接Ctrl+F5啟動專案,訪問https://localhost:44313/api/values

        

  2.6:訪問Skywalking管理後臺(記得替換一下IP)

http://192.168.150.134:8080/trace。手動選一下時間範圍,結束時間選明天(選當時時間會搜尋不到資料,不知道是時區還是skywalking的bug),點選搜尋。可以看到本次訪問的追蹤資訊已經同步到了Skywalking中。

     

以上單個系統的追蹤就完成了,接下來我們再建立一個專案,步驟和第2步基本一樣,看看多系統的追蹤,這個才是Skywalking的價值所在。

3:另外再開啟一個VS建立一個demo02的webapi專案。 3.1:為專案新增NuGet程式包SkyAPM.Agent.AspNetCore的引用   3.2,在專案根目錄新增skyapm.json檔案,並新增下以內容,其中的Servers結點的IP地址根據實際情況換成自己的伺服器IP。其中ServiceName結點設定為:Demo02
{
  "SkyWalking": {
    "ServiceName": "Demo02",
    "Namespace": "",
    "HeaderVersions": [
      "sw6"
    ],
    "Sampling": {
      "SamplePer3Secs": -1,
      "Percentage": -1.0
    },
    "Logging": {
      "Level": "Debug",
      "FilePath": "logs/skyapm-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      "ProtocolVersion": "v6",
      "QueueSize": 30000,
      "BatchSize": 3000,
      "gRPC": {
        "Servers": "192.168.150.134:11800", 
        "Timeout": 10000,
        "ConnectTimeout": 10000,
        "ReportTimeout": 600000
      }
    }
  }
}

  3.3: 將skyapm.json檔案的屬性”複製到輸出目錄“修改為 ”如果較新則複製”

3.4:展開專案的Properties,開啟launchSettings.json檔案,在其中的環境變數中加入"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES":"SkyAPM.Agent.AspNetCore"

  3.5:在ValuesController.cs中新增引用:System.Net.Http,通過HttpClient依次呼叫Demo01的兩個方法,裡面的https://localhost:44313對應為我們的Demo01專案。具體Get方法程式碼如下:

        // GET api/values
        [HttpGet]
        public async Task<string> Get()
        {
            var client = new HttpClient();
            await client.GetStringAsync("https://localhost:44313/api/values/1");
            return  await client.GetStringAsync("https://localhost:44313/api/values");
        }

3.6:Ctrl+F5啟動專案,訪問http://localhost:21143/api/values

  3.7:訪問Skywalking管理後臺(記得替換一下IP)http://192.168.150.134:8080/trace。手動選一下時間範圍,結束時間選明天(選當時時間會搜尋不到資料,不知道是時區還是skywalking的bug),點選搜尋。可以看到本次訪問兩系統單的呼叫關係圖已經同步到了Skywalking中

以上多個系統間的追蹤也就都完成了,完全不用寫程式碼,配置一下就好了。