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. 当无人机遇上5G,将碰撞出怎样的火花?

    你是否也想拥有一台无人机? 如今,无人机已日渐成为科技潮人的标配.无论是外出旅游还是毕业庆典,无人机航拍视角带来的全新摄影体验让人叹为观止,欲罢不能. 在日常生活娱乐外,无人机在农业.工业.特种作业和 ...

  2. vins中imu融合_基于非线性优化算法—当视觉SLAM遇到VINS会碰撞出怎样的火花?

    今天来给大家分享一个视觉SLAM中比较综合且复杂的系统-VINS.VINS旨在通过融合两个传感器测量数据获得移动机器人的位姿和特征点在空间中的位置,在现代控制理论学科中属于最优估计问题.在移动智能机器 ...

  3. 从初级程序员到CEO,汤鹏与时代碰撞出的那些“火花”

    作者 | 杨阳 出品 |  <新程序员>编辑部 二十多年间,汤鹏从8848到阿里巴巴,再从易到用车到量子保,完成了从开发者.管理者到创业者的蜕变,走出的每一步都在完成其内心对技术的深度理解 ...

  4. 餐饮加盟推广遇到抖音下拉词框会碰撞出什么样的火花

    疑问:餐饮加盟推广遇到抖音下拉词框会碰撞出什么样的火花? 1.前言 大伙都知道现在抖音.快手等上面,探店的,大胃王挑战.美食制作,美食加盟的视频特别多,那特别多说明了一点什么呢? 说明的现在大家开始重 ...

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

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

  6. 区块链遇上精准脱贫,会碰撞出怎样的火花?

    虽然区块链是个难理解的概念,但是你只需要知道,区块链作为新一代的互联网技术,具备难以篡改.共享账本.分布式的特性,在精准脱贫方面有广泛的运用前景.在你对区块链还摸不着头脑的时候,深圳对口帮扶河源指挥部 ...

  7. 当科技遇上中秋,会碰撞出怎样的火花?

    ↑↑ 点击上方蓝色字关注我↑↑ 还有几天就是中秋了, 各个大厂也相继开始发月饼, 当科技遇到了中秋, 会是什么样呢? 1.阿里巴巴 阿里今年出了三款月饼 集团月饼.蚂蚁金服月饼.菜鸟月饼 每个员工至少 ...

  8. AI遇上建筑设计,是出圈还是翻车?

    AIGC 落地,始于场景,终于价值. 去年以来出现了 AIGC 热潮,引发了 AIGC 及其应用话题的爆发性增长,不少人感慨强人工智能的时代已经离我们不那么遥远了.但是在热潮的另一面,我们看到真正能落 ...

  9. 知识图谱、深度学习、AutoML,推荐系统与新技术结合将碰撞出怎样的火花?

    近日,来自意大利米兰理工大学 Maurizio 团队发表的一篇极具批判性的文章火了.这篇文章剑指推荐系统领域的其他数十篇论文,并通过多项试验证明这些论文中基于深度学习的推荐算法大部分都存在不同程度的数 ...

最新文章

  1. usaco Shaping Regions
  2. 服务器架设笔记——编译Apache及其插件
  3. Arcgis for JS之Cluster聚类分析的实现
  4. js php 正则差别,正则表达式(括号)、[中括号]、{大括号}的区别小结,正则表达式小结...
  5. s5 android5.0内存泄漏,android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)...
  6. Android模拟器运行慢的解决方案
  7. 故障error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “
  8. 用计算机解决问题 评课稿,总结反思:二年级数学lbrack;解决问题rsqb;评课稿
  9. 14.初步解析document的核心元数据以及图解剖析index创建反例
  10. clinux 防火墙增加白名单_linux增加iptables防火墙规则的示例
  11. 01分数规划解析(转载)
  12. 彻底搞懂SSD网络结构
  13. 楼天城楼教主的acm心路历程
  14. 卓越风险管理 护航普惠金融
  15. 完整的十字架(漫画)
  16. 解密通往元宇宙的三大入口,VR先上AR紧跟,但脑机接口才是未来
  17. 新零售背景下“农村淘宝“线下和线上服务
  18. tex liv模板_微软向所有人开放Liv​​e Mesh
  19. php时间戳 中文,PHP时间戳-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
  20. pythonpost四种方式自杀未遂_自测练习十二

热门文章

  1. ZooKeeper相关资料集锦
  2. 个人站立会议-----20181216
  3. Enable Authentication on MongoDB
  4. Java基础 深拷贝浅拷贝
  5. iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”
  6. Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信
  7. 【C++ Primer学习笔记】第2章:变量和基本类型
  8. FireFox与IE的兼容
  9. Linux之ACL权限控制
  10. 深入OKHttp源码分析(二)----OkHttp任务调度核心类Dispatcher解析