zoukankan      html  css  js  c++  java
  • asp.net core5 使用Skywalking APM

    参考:https://zhuanlan.zhihu.com/p/114178089

    组件的git地址:https://github.com/SkyAPM/SkyAPM-dotnet

    1、nuget先安装一下

    SkyAPM.Agent.AspNetCore

    2、配置一下环境变量

    ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
    SKYWALKING__SERVICENAME=sample_app

    比如在launchSettings.json里添加代码,或者是通过界面配置,在调试处添加2个环境变量。

    SKYWALKING__SERVICENAME可以根据项目的名称来定义,比如我们可以定义 sysinfo_api。

    3、安装CLI(SkyAPM.DotNet.CLI)

    dotnet tool install -g SkyAPM.DotNet.CLI

    4、自动生成skyapm.json文件

    cmd命令,cd到站点的web目录下,执行如下命令:

    dotnet skyapm config [service name] [server]:11800

    server name指的就是您刚才配置的SKYWALKING__SERVICENAME,server指的是您Skywalking的ip地址。

    执行命令后,会自动生成一个skywalking.json 。

    5、配置完成,F5运行项目,多点击几下,就会在skywalking的trace里看到信息。

    5、获取tracId的方法:

    应用:

    using SkyApm.Tracing;

    构造函数依赖注入:

            private readonly IEntrySegmentContextAccessor _segContext;
            public HealthController(ILogger<HealthController> logger,   IEntrySegmentContextAccessor  segContext)
            {
                _logger = logger;
                
                _segContext = segContext;
            }

    方法里获取:

            [HttpGet]
            public async Task<IActionResult> SkywalkingTest()
            {
                var TraceId = _segContext.Context.TraceId; 
                return Ok($"Ok,SkywalkingTest-TraceId={TraceId}");
            }

    6、在代码里写链路信息记录:(一般不用)

    构造函数依赖注入:

     private readonly ILogger _logger;
            readonly IConfiguration _conf;
            private readonly ITracingContext _tracingContext;
            private readonly IEntrySegmentContextAccessor _segContext;
            public HealthController(ILogger<HealthController> logger, IConfiguration conf,ITracingContext tracingContext, IEntrySegmentContextAccessor  segContext)
            {
                _logger = logger;
                _conf = conf;
                _tracingContext = tracingContext;
                _segContext = segContext;
            }

    方法:

     [HttpGet]
            public async Task<IActionResult> SkywalkingTest()
            {
                //获取全局的skywalking的TracId
                var TraceId = _segContext.Context.TraceId;
                Console.WriteLine($"TraceId={TraceId}");
    
                //手写记录链路信息
                var context = _tracingContext.CreateEntrySegmentContext(nameof(SkywalkingTest), new TextCarrierHeaderCollection(new Dictionary<string, string>()));
                context.Span.AddLog(LogEvent.Message($"SkywalkingTest---Worker running at: {DateTime.Now}"));
                var TracId2 = context.TraceId;
                _tracingContext.Release(context);
    
                return Ok($"Ok,SkywalkingTest-TraceId={TraceId},TracId2={TracId2}");
            }

    7、链路信息追加日志:

     [HttpGet]
            public async Task<IActionResult> SkywalkingTest()
            {
                //获取全局的skywalking的TracId
                var TraceId = _segContext.Context.TraceId;
                Console.WriteLine($"TraceId={TraceId}");
                _segContext.Context.Span.AddLog(LogEvent.Message($"SkywalkingTest---Worker running at: {DateTime.Now}"));
    
                System.Threading.Thread.Sleep(1000);
               
                _segContext.Context.Span.AddLog(LogEvent.Message($"SkywalkingTest---Worker running at--end: {DateTime.Now}"));
    
                return Ok($"Ok,SkywalkingTest-TraceId={TraceId} ");
            }

     

    8、Skywalking链路的思路 :主要是基于DiagnosticSource机制来实现对特定组件的观测。

    以对httpclient的诊断流程示例,大概其画了个草图:

     

    补充:

    dockerfile的写法。

     设置环境变量。

    ENV ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
    ENV SKYWALKING__SERVICENAME=sysinfo_api

    补充2:

    开发过程中,有一个项目,完全按照上面的操作,但是死活无法将数据写入到skywalking。原因是 没有将skywalking的包加载到项目里。但是为找到上面情况所致。

    最后只能手动添加代码解决。

    在StartUp的ConfigureServices里添加一句代码:

      //加skywalking监控链路
      services.AddSkyAPM(ext => ext.AddAspNetCoreHosting());

     参考:

    https://www.jianshu.com/p/ae634ffb21ff

    https://www.cnblogs.com/vickey-wu/p/11079813.html

    若时使用windows环境安装skywalking,

    (1)则ui的访问的端口是8080

    http://127.0.0.1:8080/trace

    (2)项目代码里配置地址:

     "Servers": "127.0.0.1:11800"
  • 相关阅读:
    阿里云HBase携X-Pack再进化,重新赋能轻量级大数据平台
    CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
    傻瓜神经网络入门指南
    一起来看 rxjs
    阿里云ACE共创空间——MQ消息队列产品测试
    阿里毕玄:技术人应如何选择职业发展路线?
    MyBatsi学习
    UEditor学习
    fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
    JS获取当前年份月
  • 原文地址:https://www.cnblogs.com/puzi0315/p/15597975.html
Copyright © 2011-2022 走看看