使用OpenTelemetry搭配Zipkin构建NetCore分布式链路跟踪 | WebAPI + gRPC

OpenTelemetry介绍

OpenTelemetry是一组标准和工具的集合,旨在管理观测类数据,如 trace、metrics、logs 等。

通过标准化不同的应用程序和框架如何收集和发出可观察性遥测数据,OpenTelemetry旨在解决这些环境带来的一些挑战。

OpenTelemetry包括:

  • 可观察性遥测(分布式跟踪、指标等)的供应商中立规范

  • 实现用于检测的公共接口的API

  • 应用程序使用SDK为插件作者配置工具和接口以编写导出器

  • 使你能够将数据发送到你选择的遥测后端的导出器

随着OpenTelemetry对可观察性遥测集合的标准化,你可以选择遥测后端而无需更改检测代码。你可以自由选择可为你提供最有效数据分析的平台。

在本文中,我们选择的是Zipkin。

Zipkin介绍

Zipkin是一个分布式追踪系统。它有助于收集对服务架构中的延迟问题进行故障排除所需的计时数据。功能包括收集和查找这些数据。

下面,我们就来演示,如何使用OpenTelemetry搭配Zipkin来追踪ASP.NET Core服务之间的WebAPI和gRPC请求。

Demo

创建3个应用程序,WebApplication1使用Web API调用WebApplication2,WebApplication2使用gRPC调用GrpcService1。

WebApplication1

引用Nuget包,包括预发行版:

OpenTelemetry.Extensions.Hosting
OpenTelemetry.Instrumentation.AspNetCore
OpenTelemetry.Exporter.Zipkin

新增配置,Endpoint对应Zipkin部署地址:

"Zipkin": {"ServiceName": "WebApplication1","Endpoint": "http://192.168.1.11:9411/api/v2/spans"
}

修改Startup.cs:

public void ConfigureServices(IServiceCollection services)
{...services.AddOpenTelemetryTracing((builder) => builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(this.Configuration.GetValue<string>("Zipkin:ServiceName"))).AddAspNetCoreInstrumentation().AddZipkinExporter(zipkinOptions =>{zipkinOptions.Endpoint = new Uri(Configuration.GetValue<string>("Zipkin:Endpoint"));}));
}

修改WeatherForecastController.cs,访问WebApplication2:

[HttpGet]
public async Task<string> Get()
{var response = await _httpClientFactory.CreateClient().GetStringAsync("http://localhost:5200/WeatherForecast");return response;
}

WebApplication2

引用Nuget包,包括预发行版:

OpenTelemetry.Extensions.Hosting
OpenTelemetry.Instrumentation.AspNetCore
OpenTelemetry.Exporter.Zipkin
Grpc.Net.Client
OpenTelemetry.Instrumentation.GrpcNetClient

新增配置,Endpoint对应Zipkin部署地址:

"Zipkin": {"ServiceName": "WebApplication2","Endpoint": "http://192.168.1.11:9411/api/v2/spans"
}

修改Startup.cs:

public void ConfigureServices(IServiceCollection services)
{...services.AddOpenTelemetryTracing((builder) => builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(this.Configuration.GetValue<string>("Zipkin:ServiceName"))).AddGrpcClientInstrumentation().AddAspNetCoreInstrumentation().AddZipkinExporter(zipkinOptions =>{zipkinOptions.Endpoint = new Uri(Configuration.GetValue<string>("Zipkin:Endpoint"));}));
}

修改WeatherForecastController.cs,访问GrpcService1:

[HttpGet]
public async Task<string>  Get()
{var channel = GrpcChannel.ForAddress("http://localhost:5300");var client = new Greeter.GreeterClient(channel);var response = await client.SayHelloAsync(new HelloRequest { Name = "World" });return response.Message;
}

GrpcService1

引用Nuget包,包括预发行版:

OpenTelemetry.Extensions.Hosting
OpenTelemetry.Instrumentation.AspNetCore
OpenTelemetry.Exporter.Zipkin

新增配置,Endpoint对应Zipkin部署地址:

"Zipkin": {"ServiceName": "GrpcService1","Endpoint": "http://192.168.1.11:9411/api/v2/spans"
}

修改Startup.cs:

private IConfiguration Configuration { get; }public Startup(IConfiguration configuration)
{Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{...services.AddOpenTelemetryTracing((builder) => builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(this.Configuration.GetValue<string>("Zipkin:ServiceName"))).AddAspNetCoreInstrumentation().AddZipkinExporter(zipkinOptions =>{zipkinOptions.Endpoint = new Uri(Configuration.GetValue<string>("Zipkin:Endpoint"));}));
}

运行效果

启动3个应用程序:

  • WebApplication1 http://localhost/5100

  • WebApplication2 http://localhost/5200

  • GrpcService1        http://localhost/5300

访问WebApplication1后,即可在Zipkin上查看调用链:

2d36ef2dd68fa6f500d2d65a2787efeb.png

结论

使用OpenTelemetry搭配Zipkin,可以轻松实现监控WebAPI/gRPC调用链。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云cloudlite认证_【腾讯云】考个证...大数据开发工程师认证

作为一个大数据行业的从业者&#xff0c;考个腾讯云大数据开发工程师认证总比考个消防证 easy 吧…&#xff1f;关于考这个认证的意义其实主要在于全面复习一下大数据相关的知识点&#xff0c;另外有个腾讯云的认证&#xff0c;也许大概也会对你找工作有点帮助的吧&#xff1f;…

kernel shell bash简介

还记得我们在Linux启动的时候。首先会启动内核 (kernel)&#xff0c;内核是一段计算机程序&#xff0c;这个程序直接管理管理硬件&#xff0c;包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。为了我们方便调用内核&#xff0c;我们将内核…

最高调恋爱方式,简直“公开处刑”......

1 我拿到了剑桥的offer...▼2 当空乘专业第一次穿高跟鞋...▼3 是我没错了▼4 笑出鹅叫▼5 现场表演一下&#xff0c;一秒落汤鸡&#xff01;▼6 那个红/黄毛起来一下&#xff01;▼7 最高调的恋爱方式▼7 数学可以多好玩▼你点的每个赞&#xff0c;我都认真当成了喜欢

C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件

01—概述ObservableCollection继承了INotifyPropertyChanged接口&#xff0c;在属性变更时可以通知界面&#xff0c;当我把ObservableCollection集合绑定到界面的DataGrid后&#xff0c;我希望在界面修改表格数值后&#xff0c;可以触发一个 事件来验证我界面设定数据的有效性&…

数据挖掘算法之决策树算法总结

机器学习中&#xff0c;决策树是一个预测模型&#xff1b;它代表的是对象属性值与对象值之间的一种映射关系。树中每个节点表示某个对象&#xff0c;每个分叉路径则代表的某个可能的属性值&#xff0c;而每个叶结点则对应具有上述属性值的子对象。决策树仅有单一输出&#xff1…

win7升级win10正式版_win7告退在即,如何升级到win10?

Win7即将停更&#xff0c;小伙伴们也差不多要进行自己系统的更新啦&#xff0c;今天小白就教大家如何将Win7升级到Win10第一步&#xff1a;首先在官网 www.xiaobaixitong.com 下载“小白软件”第二步&#xff1a;选好我们要下载的系统&#xff0c;然后安装即可。第三步&#xf…

在24小时内学完所有的数学是种什么体验?我们做了这个大胆的尝试……

全世界只有3.14 % 的人关注了爆炸吧知识人还好就是没了而已其实&#xff0c;在此时&#xff0c;还有一件事情发生了。22:00&#xff0c;我们发出了这篇文章&#xff0c;不仅将2600多年的数学简史浓缩成24小时&#xff0c;还将2600多年数学简史浓缩成54张卡牌。每张卡牌背后都有…

Server Develop (八) IOCP模型

IOCP模型 IOCP全称I/O Completion Port&#xff0c;中文译为I/O完成端口。IOCP是一个异步I/O的Windows API&#xff0c;它可以高效地将I/O事件通知给应用程序&#xff0c;类似于Linux中的Epoll。 简介 IOCP模型属于一种通讯模型&#xff0c;适用于Windows平台下高负载服务器的一…

理解RESTful架构

2019独角兽企业重金招聘Python工程师标准>>> 原文&#xff1a;http://www.ruanyifeng.com/blog/2011/09/restful.html?20160826000527 越来越多的人开始意识到&#xff0c;网站即软件&#xff0c;而且是一种新型的软件。 这种"互联网软件"采用客户端/服务…

凡是过往,皆为序章。

凡是过往&#xff0c;皆为序章今天是元旦假期的最后一天&#xff0c;这三天我一直在想&#xff0c;21年的年终总结应该如何下笔。其实心里面想表达和记录的事情很多&#xff0c;可当真正坐在电脑前时&#xff0c;却发现没有头绪。贵有恒&#xff0c;何必三更起五更眠。最无益&a…

查看操作系统版本linux_LINUX操作系统常用操作收录(二):查看文件内容命令小结...

先整体了解一下如何查看文件内容的命令vi 兼有修改功能的查看方式&#xff0c;会单独打开整个文件vim 可修改文件内容并且显示当前查看位置在文件中的%多少cat 由第一行开始显示内容&#xff0c;并将所有内容输出tac 从最后一行倒序显示内容&#xff0c;并将所有内容输出more…

crond定时任务详细分析

一、定时任务crond的介绍 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下&#xff0c;我们安装文成系统之后&#xff0c;默认变回启动crond任务调度服务&#xff0c;crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。…

OCS2007R2升级LyncSrv2013 PART4:关联边缘

完成拓扑的合并后&#xff0c;由于边缘服务器尚未做迁移和升级&#xff0c;所以此时我们的Lync Server没有边缘服务、联盟路由等。我们就可以把OCS的边缘服务器与Lync Server前端进行关联&#xff0c;暂时使用OCS的联盟路由和边缘服务。要关联OCS边缘服务器&#xff0c;需要打开…

2021技术文大盘点 | 打包过去,​面向未来

先用四句诗词快速描述 一下我的写作心得1. 只在此山中&#xff0c;云深不知处作为开发人员&#xff0c;常执着于机器0,1代码&#xff0c;非假既真&#xff1b;真实世界是很主观的&#xff0c;需要精致细节&#xff0c;更多时候需要全局把控。带着问题写作&#xff0c;对事物理解…

Ansible 一步一步从入门到精通(一)

一&#xff1a;安装ansiblemac&#xff1a;1. 安装 Homebrew (get the installation command from the Homebrew website).2. 安装Python 2.7.x ( brew install python ).3. 安装 Ansible ( sudo pip install ansible ).linux&#xff1a;如果系统中安装了python-pip和python-d…

客户细分总结

随着营销方式的多变、客户需求各异、营销增长受阻等多方面影响&#xff0c;企业的营销面临前所未有的挑战和机遇&#xff0c;精准化营销似乎已成为很多公司的选择&#xff0c;本文针对以下客户细分五大模块进行总结&#xff1a; 一&#xff1a;客户细分的必要性&#xff1a; 顾…

Linux操作系统备份之二:通过tar拷贝分区实现Linux操作数据的在线备份

http://www.tektea.com/archives/2163.html。 在《Linux操作系统备份之一&#xff1a;使用LVM快照实现Linux操作系统数据的在线备份》文章中&#xff0c;我们介绍了使用LVM快照实现操作性系统在线备份的方法&#xff0c;LVM快照可以实现在线操作系统数据的备份&#xff0c;在线…

cad快捷命令大全_最全CAD快捷键命令大全(图文版、文字版、键盘版)

在 CAD操作中我们常用一些快捷键来代替鼠标操作从而提高绘图效率&#xff0c;以下是小编为大家整理的常用快捷键大全&#xff0c;涵盖图文版、文字版、键盘版。图文版&#xff1a;文字版&#xff1a;一、常用功能键F1: 获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对…

WEB API:语音识别

2019独角兽企业重金招聘Python工程师标准>>> x-webkit-speech 语音输入功能&#xff1a; http://www.iinterest.net/2012/01/07/x-webkit-speech/ HTML5语音输入&#xff08;淘宝语音搜索&#xff09;x-webkit-speech方法 支持webkit内核&#xff1a; http://www.wu…