七、.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
数据存储用ES,搭建ES
复制代码
 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
搭建skywalking-oap服务,这里用的是8.9.1版本,oap服务需要关联ES
复制代码
复制代码
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
搭建skywalking-ui界面,需要关联oap服务
复制代码

  搭建完成,打开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"
      }
    }
  }
}
launchSettings.json
复制代码
Environment.SetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUPASSEMBLIES", "SkyAPM.Agent.AspNetCore");
Environment.SetEnvironmentVariable("SKYWALKING__SERVICENAME", "Service1");
如果不在launchSettings.json加,也可以在Program.cs加

  生成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则无法跑得起来。

 

posted @   冼润伟  阅读(1118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示