介紹
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" }; }
跑起來,可以看到對應的鍊路調用關系
源碼位址:
https://github.com/conanl5566/mydemo/tree/master/SkyWalking