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

当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?的更多相关文章

  1. 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?

    作者 | 元毅  阿里巴巴高级开发工程师 阿里巴巴云原生公众号后台回复 Knative,免费下载<Knative 云原生应用开发指南>电子书! 想必大家都比较了解 RocketMQ 消息服 ...

  2. MVC遇上bootstrap后的ajax表单模型验证

    MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...

  3. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  4. 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)

        我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...

  5. 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)

    邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...

  6. 初识genymotion安装遇上的VirtualBox问题

    想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...

  7. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  8. 当创业遇上O2O,新一批死亡名单,看完震惊了!

    当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...

  9. LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)

    当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...

随机推荐

  1. node使用xlsx导入导出excel

    1.安装和引入xlsx 安装  npm install xlsx 引入:let xlsx = require('xlsx');2.读取excel数据function readFile(file) {  ...

  2. 四、hive安装

    一.安装方式(内嵌模式,本地模式远程模式) 安装环境以及前提说明: Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境. 本例中使用的hadoop版本为2 ...

  3. 8. 格式化器大一统 -- Spring的Formatter抽象

    目录 ✍前言 本文提纲 版本约定 ✍正文 Printer&Parser Formatter 时间日期格式化 Date类型 代码示例 JSR 310类型 整合DateTimeFormatter ...

  4. 通过show profile分析sql语句

    set profling=1; select count(*) from xuehao; show profiles; show profile for query 1; mysql> set ...

  5. Sqli - Labs 靶场笔记(一)

    Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...

  6. 深度解读设备的“万能语言”HarmonyOS的分布式软总线能力

    摘要:本文分享鸿蒙分布式软总线,并对相关源代码进行解析,为在鸿蒙系统平台上工作的相关人员的信息参考和指导. 总线是一种内部结构,在计算机系统中,主机的各个部件通过总线相连,外部设备通过相应的接口电路再 ...

  7. 2020 CSP&NOIP 游记

    CSP初赛 CSP初赛 Day -1 早上打了模拟赛,T2寒假正好做过,然而还是还是被踩Orz,郑外NB!.中午出校吃了大盘鸡和拉面,还带回来了三瓶可乐. 初赛知识点看了两页不(看)想(不)看(懂)了 ...

  8. U盘UEFI+GPT模式安装CentOS7.X系统

    1.制作CentOS7安装盘 还是老套路,开局先制作安装盘,UltraISO软碟通,上图   (1) 打开UltraISO软件,选择"文件"-> "打开" ...

  9. 30分钟带你了解「消息中间件」Kafka、RocketMQ

    消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...

  10. MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历

    背景 1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,心里想着周末的生活怎么安排. 突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来,本周的版本已经发布过了,这时候打电话一般来说是线 ...