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

  • 2019 年 10 月 3 日
  • 筆記

 

當我們用很多服務時,各個服務間的調用關係是怎麼樣的?各個服務單調用的順序時間性能怎麼樣?服務出錯了,到底是哪個服務引起的?這些問題我們用什麼方案解決呢,以前的方式是各個系統自己單獨做日誌,出了問題從暴出問題的服務開始一個一個服務的排查,耗時耗力,有些日誌不全的,還不一定查得出來。好在現在有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中

                                  

 

 

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