zoukankan      html  css  js  c++  java
  • 当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?

    OpenTelemetry 介绍

    我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到

    OpenTelemetry - 云原生下可观测性的新标准

    深入研究 .NET 5 的开放式遥测

    OpenTelemetry是谷歌和微软共同推进的云原生监控的新规范, 兼容OpenTracing和OpenCensus

    支持的语言和组件

    OpenTelemetry的终极目标是:实现Metrics、Tracing、Logging的融合及大一统,作为APM的数据采集终极解决方案。

    因为现在正式版本还没有发布,我们现在只能使用rc版本,所以在Nuget开启 包括预发行版,你可以在这里看到里程碑,https://github.com/open-telemetry/opentelemetry-dotnet/milestones

    在webapi中接入OpenTelemetry服务

    创建一个webapi项目,.NET 版本选5.0, 创建完成后,需要安装下边几个包,选最新版本就好

    OpenTelemetry.Extensions.Hosting 提供服务扩展
    OpenTelemetry.Instrumentation.AspNetCore 采集AspNetCore诊断数据
    OpenTelemetry.Instrumentation.Http 采集Http诊断数据

    安装完成后,修改Startup.cs的 ConfigureServices() 方法

     public void ConfigureServices(IServiceCollection services)
            { 
                services.AddOpenTelemetryTracing((builder) => builder
                    .AddAspNetCoreInstrumentation()
                    .AddHttpClientInstrumentation()
                 );  
    	 
    	          ....
            }
    

    接下来,修改 WeatherForecastController, 来模拟简单的接口调用

        [HttpGet]
        public async Task<IActionResult> Get()
        {
            HttpClient client = new HttpClient();
    
            await Task.Delay(new Random().Next(1000, 3000));
    
            _ = await client.GetStringAsync("http://www.baidu.com");
    
            await Task.Delay(new Random().Next(1000, 3000));
    
            _ = await client.GetStringAsync("http://www.baidu.com");  
    
            return Ok();
               
        }
    

    上面的工作完成以后,我们还需要一个导出 Exporter 的组件,把数据导出到外部平台,比如Jaeger, Zipkin, Prometheus 等,然后这些平台会处理数据,然后展示出来。

    ConsoleExporter

    ConsoleExporter 是最简单的导出数据的实现,它会把诊断数据输出到控制台

    安装包 OpenTelemetry.Exporter.Console,然后修改 ConfigureServices 如下:

    services.AddOpenTelemetryTracing((builder) => builder
    	.AddAspNetCoreInstrumentation()
    	.AddHttpClientInstrumentation()
    	.AddConsoleExporter()
    );
    

    然后启动我们的项目,访问 http://localhost:5000/WeatherForecast 接口,控制台会输出下面的信息:

    这些是诊断数据的基础格式,如果你了解OpenTracing,你会发现,为什么这里是 Activity,而不是 Span,这不符合规范。 确实是这样,因为.NET 中已经有了 Activity 类型,所以.NET 团队决定重用它,并且在 .NET 5增强为 ActivitySource, 所以在.NET 中,你可以把 Span 和 Activity 概念互换。

    JaegerExporter

    Jaeger 是Uber推出的一款开源分布式追踪系统。

    安装包 OpenTelemetry.Exporter.Jaeger,然后修改 ConfigureServices 如下:

    
    services.AddOpenTelemetryTracing((builder) => builder
        .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("webapi-demo"))
        .AddAspNetCoreInstrumentation()
        .AddHttpClientInstrumentation()
        .AddJaegerExporter(options => {
    
            options.AgentHost = "localhost";
            options.AgentPort = 6831;
    
        })
    );
    
    

    在Docker中,执行下边的命令,安装Jaeger

    docker run -d --name jaeger  
      -p 5775:5775/udp 
      -p 6831:6831/udp 
      -p 6832:6832/udp 
      -p 5778:5778 
      -p 16686:16686 
      -p 14268:14268 
      -p 14250:14250  
      jaegertracing/all-in-one:1.21
    

    稍等片刻,安装完成以后,访问 http://localhost:16686 可以看到Jaeger的页面

    然后启动我们的项目,访问几次 http://localhost:5000/WeatherForecast 接口,然后再访问Jaeger的页面,选择我们的服务查询,可以看到下边的请求信息:

    ZipkinExporter

    Zipkin 是Twitter推出的一款开源分布式追踪系统。

    安装包 OpenTelemetry.Exporter.Zipkin,然后修改 ConfigureServices 如下:

    services.AddOpenTelemetryTracing((builder) => builder 
        .AddAspNetCoreInstrumentation()
        .AddHttpClientInstrumentation()
        .AddZipkinExporter(options => {
    
            options.ServiceName  = "webapi-demo";
            options.Endpoint = new Uri("http://localhost:9411/api/v2/spans");
    
        })
    );
    

    在Docker中,执行下边的命令,安装Zipkin

    docker run -d -p 9411:9411 openzipkin/zipkin
    

    安装完成后,访问 http://localhost:9411 可以看到Zipkin的首页:

    然后启动我们的项目,访问几次 http://localhost:5000/WeatherForecast 接口,然后再回到Zipkin的页面, 可以看到下面的请求信息:

    trace的页面:

    总结

    本文尝试在.NET 5 中引入了 OpenTelemetry,可以看到使用起来非常的方便,对接第三方的分布式追踪平台,我们只需要改动极少的代码,这就是OpenTelemetry大一统的标准。

    最后

    欢迎扫码关注我们的公众号 【全球技术精选】,可以加入到.NET APM Group 微信群, 一起来交流APM和监控相关的技术。

  • 相关阅读:
    一些常用的表单验证的代码
    JQuery 在线参考手册
    jQuery ajax
    DIV+CSS专题:十天学会DIV+CSS
    wordpress调用函数大全
    WordPress 主题教程:从零开始制作 WordPress 主题
    全面提升WordPress前台和后台的 打开速度的方案
    详细的图文介绍如何利用XAMPP本地建站的环境配置教程
    2014年,daliu_it 年末文章汇总清单
    再见,2014;您好,2015!
  • 原文地址:https://www.cnblogs.com/myshowtime/p/14363735.html
Copyright © 2011-2022 走看看