架构师_程序员_码农网

查看: 636|回复: 2

[.NET Core] ASP.NET Core 链路追踪(四)接入 Jaeger 链路追踪

[复制链接]
发表于 2021-1-26 13:17:27 | 显示全部楼层
在查看本文章之前,需要部署 Jaeger 环境,参考如下:

使用 Docker 部署 Jaeger 分布式链路追踪教程
https://www.itsvse.com/thread-9526-1-1.html
ASP.NET Core 链路追踪(一)安装 Skywalking 教程
https://www.itsvse.com/thread-9456-1-1.html

ASP.NET Core 链路追踪(二)使用 SkyAPM 集成
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core 链路追踪(三)SkyAPM 基于 Consul 动态配置
https://www.itsvse.com/thread-9468-1-1.html



OpenTracing 协议

OpenTracing 是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。Zipkin、Jaeger都遵循OpenTracing协议


OpenTelemetry OpenTracing OpenCensus 信息收集和数据采集
https://www.itsvse.com/thread-9525-1-1.html
204912423-59e8cb5ee2bc2_articlex.png

分布式追踪系统 Jaeger

Jaeger是Uber开发的一套分布式追踪系统,已在Uber大规模使用。并在2017-9-13 加入CNCF 开源组织。使用Jaeger可以非常直观的展示整个分布式系统的调用链,由此可以很好发现和解决问题:

作用

  • 分布式环境下信息传播
  • 分布式交易监控
  • 展示跨进程调用链
  • 性能优化
  • 定位问题



特性

  • 使用udp传输数据,相对于HTTP,优点在于,不用担心Jaeger服务宕机或者网络传输有问题而影响正常的业务。缺点就是丢包,影响了整条调用链。
  • 数据通过Thrift或者protobuf(gRPC传输)进行序列化,默认是:Thrift。



采集策略

  • ConstSampler,全量采集
  • ProbabilisticSampler ,概率采集,默认万份之一
  • RateLimitingSampler ,限速采集,每秒只能采集一定量的数据
  • RemotelyControlledSampler ,一种动态采集策略,根据当前系统的访问量调节采集策略



ASP.NET Core 接入 Jaeger 链路追踪

项目是 .NET Core 3.1 的框架,nuget 安装如下包:

其中,OpenTracing.Contrib.NetCore 是为基于 .NET Core 的应用程序提供 OpenTracing 工具,简单说就是一个扩展,主要监控如下:

  • ASP.NET Core
  • Entity Framework Core
  • System.Net.Http (HttpClient)
  • System.Data.SqlClient
  • Microsoft.Data.SqlClient



在 Startup 文件 ConfigureServices 方法配置如下:

在 HomeController 控制器调用 ITracer 记录日志和耗时,代码如下:

启动网站,访问 /Home/Index 页面,然后,通过在线 Jaeger UI 查看链路情况,访问:http://127.0.0.1:16686/,可以通过 tags 标签搜素,如下图:

http.url=http://localhost:27138/
如下图:

QQ截图20210126131339.jpg QQ截图20210126131407.jpg QQ截图20210126131432.jpg

源码下载:

游客,如果您要查看本帖隐藏内容请回复


参考资料:

https://help.aliyun.com/document_detail/99880.html
https://github.com/jaegertracing/jaeger-client-csharp




上一篇:ASP.NET Core 查看应用状态和统计
下一篇:the default discovery settings are unsuitable for production use...
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-1-26 13:20:32 | 显示全部楼层
var operationName = "Get::api/values/";
var builder = tracer.BuildSpan(operationName);
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-1-27 16:51:17 | 显示全部楼层
群主大大真厉害
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-5-17 16:35

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表