Asp.Net Core使用Skywalking實現分布式鏈路追蹤,你學會了嗎?
介紹
Skywalking 是 Apache 基金會下面的一個開源 APM 項目,是一套(APM)分布式追蹤系統(tǒng),提供了很多數據存儲列如:Mysql,H2,Elasticsearch7 等。其中APM 全稱是應用性能監(jiān)測軟件,主要是用來處理以及追蹤分布式系統(tǒng)中的應用程序的性能問題,從而快速找出問題的根源,進而可以讓開發(fā)者定位問題從而提升應用程序性能。
當我們用很多服務相互調用時,各個服務單調用的順序\時間性能怎么樣?這些問題我們怎么監(jiān)測,以前的方式是各個系統(tǒng)自己單獨做日志,出了問題在一個一個服務的排查,有點刀耕火種的感覺。好在現在有Skywalking鏈路追蹤系統(tǒng),可以不用寫任何代碼,就追蹤到各個服務間的調用關系和性能狀態(tài)等。
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文件,在其中的環(huán)境變量中加入 "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