天天看點

Asp.Net Core使用Skywalking實作分布式鍊路追蹤

作者:opendotnet

介紹

Skywalking 是 Apache 基金會下面的一個開源 APM 項目,是一套(APM)分布式追蹤系統,提供了很多資料存儲列如:Mysql,H2,Elasticsearch7 等。其中APM 全稱是應用性能監測軟體,主要是用來處理以及追蹤分布式系統中的應用程式的性能問題,進而快速找出問題的根源,進而可以讓開發者定位問題進而提升應用程式性能。

當我們用很多服務互相調用時,各個服務單調用的順序\時間性能怎麼樣?這些問題我們怎麼監測,以前的方式是各個系統自己單獨做日志,出了問題在一個一個服務的排查,有點刀耕火種的感覺。好在現在有Skywalking鍊路追蹤系統,可以不用寫任何代碼,就追蹤到各個服務間的調用關系和性能狀态等。

ASP.NET Core 內建

1、安裝Skywalking,搭建好後的Skywalking伺服器位址為:127.0.0.1:11800

2、建立項目SkyWalkingA,為項目添加NuGet程式包SkyAPM.Agent.AspNetCore的引用

3、在項目根目錄添加skyapm.json檔案

{              "SkyWalking": {              "ServiceName": "WebApplication4",              "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": "127.0.0.1:11800",              "Timeout": 10000,              "ConnectTimeout": 10000,              "ReportTimeout": 600000              }              }              }              }           

4、打開launchSettings.json檔案,在其中的環境變量中加入 "SKYWALKING__SERVICENAME"

{              "$schema": "http://json.schemastore.org/launchsettings.json",              "iisSettings": {              "windowsAuthentication": false,              "anonymousAuthentication": true,              "iisExpress": {              "applicationUrl": "http://localhost:20467",              "sslPort": 0              }              },              "profiles": {              "IIS Express": {              "commandName": "IISExpress",              "launchBrowser": true,              "launchUrl": "api/values",              "environmentVariables": {              "ASPNETCORE_ENVIRONMENT": "Development",              "SKYWALKING__SERVICENAME": "WebApplication4",              "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"              }              },              "WebApplication4": {              "commandName": "Project",              "launchBrowser": true,              "launchUrl": "api/values",              "applicationUrl": "http://localhost:5000",              "environmentVariables": {              "ASPNETCORE_ENVIRONMENT": "Development",              "SKYWALKING__SERVICENAME": "WebApplication4",              "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"              }              }              }              }           

5、建立項目SkyWalkingB,重複上面步驟2、3、4

在A項目通路B項目

// GET api/values              [HttpGet]              public async Task<ActionResult<IEnumerable<string>>> Get()              {              var client = new HttpClient();              await client.GetStringAsync("http://localhost:20467/api/values/1");              await client.GetStringAsync("http://localhost:20467/api/values");                  return new string[] { "value1", "value2" };              }           

跑起來,可以看到對應的鍊路調用關系

Asp.Net Core使用Skywalking實作分布式鍊路追蹤

源碼位址:

https://github.com/conanl5566/mydemo/tree/master/SkyWalking

繼續閱讀