七、.NET6接入Skywalking链路追踪
一、Skywalking介绍
skywalking是国产开源框架,一款分布式观察性分析平台和应用性能管理系统,提供分布式追踪,服务网格遥测分析,量度集合和可视化;对于一个大型的几十个,上百个微服务,skywalking能解决什么问题:
1.如何串联整个调用链路,快速定位问题?
2.如何缕清各个微服务之间的关系?
3.如何进行各个微服务之间的性能分析?
4.如何跟踪整个业务流程的调用处理顺序?
链路追踪框架对比
skywalking的主要功能特性
1.多种监控手段,开源通过语言探针和service mesh获得监控的数据;
2.支持多种语言自动探针,包括Java,net core等;
3.轻量级
4.模块化,ui,存储,集群管理多种机制可选
5.支持告警
SkyWalking 原理架构图如下:
1. Skywalking Agent:链路数据采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
2. Skywalking Collector : 链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
3. Storage: Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等主流存储作为存储介质进行数据存储,H2仅作为临时演示单机用。
二、skywalking搭建

docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx256m" elasticsearch:7.7.0

1 docker run --name skywalking-oap \ 2 --restart always \ 3 -p 11800:11800 -p 12800:12800 -d \ 4 -e TZ=Asia/Shanghai \ 5 -e SW_ES_USER= \ 6 -e SW_ES_PASSWORD= \ 7 -e SW_STORAGE=elasticsearch \ 8 -e SW_STORAGE_ES_CLUSTER_NODES=192.168.101.10:9200 \ 9 -v /etc/localtime:/etc/localtime:ro \ 10 apache/skywalking-oap-server:8.9.1

docker run -d \ --name skywalking-ui \ --restart always \ -p 8080:8080 \ --link skywalking-oap:skywalking-oap \ -e TZ=Asia/Shanghai \ -e SW_OAP_ADDRESS=http://skywalking-oap:12800 \ -v /etc/localtime:/etc/localtime:ro \ apache/skywalking-ui:8.9.1
搭建完成,打开ip:8080查看skywalking界面(当然端口号是可以变更的)
三、.NET6接入Skywalking
1、单个服务接入
新建一个.NET6站点,安装Nuget包
SkyAPM.Agent.AspNetCore
Properties下launchSettings.json增加
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore", //必须配置
"SKYWALKING__SERVICENAME": "Service1" // 必须配置,在skywalking做标识,服务名称

{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:6413", "sslPort": 44308 } }, "profiles": { "NET6AndSkyWalking": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "http://localhost:5025", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore", //必须配置 "SKYWALKING__SERVICENAME": "Service1" // 必须配置,在skywalking做标识,服务名称 } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }

Environment.SetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUPASSEMBLIES", "SkyAPM.Agent.AspNetCore"); Environment.SetEnvironmentVariable("SKYWALKING__SERVICENAME", "Service1");
生成skywalking.json文件
1、安装CLI(SkyAPM.DotNet.CLI),cmd命令: dotnet tool install -g SkyAPM.DotNet.CLI 2、自动生成skyapm.json文件,cmd命令: 1.dotnet skyapm config [service name] [server]:11800 2.eg: dotnet skyapm config service1 192.168.101.10:11800
执行了命令会生成skywalking.json文件,把skywalking.json放到项目根目录,设置较新复制到输出目录,然后修改ServiceName设置为项目名,和上面的SKYWALKING__SERVICENAME一致。 skyapm.json文件
{ "SkyWalking": { "ServiceName": "service1", "Namespace": "", "HeaderVersions": [ "sw8" ], "Sampling": { "SamplePer3Secs": -1, "Percentage": -1.0 }, "Logging": { "Level": "Information", "FilePath": "logs\\skyapm-{Date}.log" }, "Transport": { "Interval": 3000, "ProtocolVersion": "v8", "QueueSize": 30000, "BatchSize": 3000, "gRPC": { "Servers": "192.168.101.10:11800", "Timeout": 10000, "ConnectTimeout": 10000, "ReportTimeout": 600000, "Authentication": "" } } } }
SamplePer3Secs:每三秒采样的Trace数量 ,默认为负数,代表在保证不超过内存Buffer区的前提下,采集所有的Trace
Percentage:采样率,默认负数,采集全部,其它数值格式:0.5,0.8...
然后在program.cs 的var app=builder.Build();之前增加
builder.Services.AddSkyApmExtensions(); //添加Skywalking相关配置
接下来我们看看运行效果
自定义链路日志

private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger, IEntrySegmentContextAccessor segContext) { _logger = logger; _segContext = segContext; } [HttpGet] public async Task<string> Get() { _segContext.Context.Span.AddLog(LogEvent.Message("自定义日志1")); var client = new HttpClient(); //调用Service2 var response = await client.GetAsync("http://119.29.92.184:5000/WeatherForecast"); var result = await response.Content.ReadAsStringAsync(); return result; }
2、多服务追踪
总结:
警告等功能可参考博主https://www.cnblogs.com/wl-blog/p/16448914.html,在搭建skywalking时要注意的是服务器配置,因为如果使用es存储,那么服务器的内存必须大于8G,本人亲测如果小于8G则无法跑得起来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!