博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?
阅读量:4036 次
发布时间:2019-05-24

本文共 3430 字,大约阅读时间需要 11 分钟。

OpenTelemetry 介绍

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

  

 

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
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和监控相关的技术。

转载地址:http://csudi.baihongyu.com/

你可能感兴趣的文章
如何打开ipynb文件
查看>>
[Leetcode BY python ]190. Reverse Bits
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
Phone双模修改涉及文件列表
查看>>
android UI小知识点
查看>>
Android之TelephonyManager类的方法详解
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>