opentracing(开放分布式追踪) + jaeger初探

简介: 以下是小马整理总结的入门理解笔记,助于入门和理解分布式链路追踪,opentracing(开放分布式追踪) + jaeger。

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

以下是小马整理总结的入门理解笔记,助于入门和理解分布式链路追踪,opentracing(开放分布式追踪) + jaeger。

一、背景

举个例子,一个场景下,一个请求进来,入口服务是 serviceA, serviceA 接到请求后访问数据库读取用户数据,然后向 serviceB 发起 rpc,serviceB 收到 rpc 请求时同时向后端服务 serviceC 和 serviceD 发起请求,等待请求回复后再返回 serviceA 的 rpc 调用。如果我们发现发起的请求失败,或者请求的时延很大,我们该如何去定位呢?

基于这个需求,我们将服务介入追踪系统。相比单体的系统,在分布式,微服务系统中似乎更能发挥重要性。

二、OpenTracing

opentracing(中文文档)是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。

语义规范: 描述定义的数据模型 Tracer,Span和 SpanContext 等;

语义惯例: 罗列出 tag 和 logging 操作时,标准的key值;

trace和span:

小马把它通俗理解为这两为追踪系统的数据结构。用于传递链路调用中的信息。
image.png

三、Jaeger

那么这个数据结构/协议怎么在整个系统调用链路中穿梭呢?借助Jaeger来看看。

Jaeger (?yā-g?r) 是Uber开源的一个基于Go的分布式追踪系统,受启发于 dapper 和 OpenZipkin,兼容 OpenTracing 标准,CNCF的开源项目。(这段百科是没有的哈)
image.png

组成部分


image.png

和上图一个意思


什么意思呢?借用一下别的朋友整理的内容来看。整个过程说起来非常简单,Client写入trace数据,传递到正在监听的Agent,Agent将span等数据发到Collector, Collector将数据存储,后面就是提供UI和query了。

四、代码中实现

如何部署呢?集成后镜像安装比较简单,这里就不赘述了。GO语言为例,来看下调用,以下样例代码来自其他文章,仅供参考理解,非小马亲践,感谢作者分享,原文传送门。

小马理解为就是在解决span数据的传递。

1、单体中通过上下文调用
image.png

关键代码


2、跨应用通过grpc中间件使用

在单体程序中, 父子Span通过context关联, 而context是在内存中的, 显而易见这样的方法在垮应用的场景下是行不通的。跨应用通讯使用的方式通常是"序列化", 在jaeger-client-go库中也是通过类似的操作去传递信息, 它们叫:Tracer.Inject() 与 Tracer.Extract()。

其中inject方法支持将span系列化成几种格式:

Binary: 二进制

TextMap: key=>value

HTTPHeaders: Http头, 其实也是key=>value

正好grpc支持传递metadata也是string的key=>value形式, 所以我们就能通过metadata实现在不同应用间传递Span了。

写好服务端,客户端后,在业务代码中封装方法监控到程序中的代码片段(如方法):
image.png

关键代码


调用:
image.png

可见,使用trace会入侵部分代码,特别是追踪一个方法,但这是不可避免的。甚至需要每个方法都需要添加上ctx。

思考:日志流水号是如何传递的,每条链路全局name还是span父级名称还是span中的某个数据?

image.png

相关文章
|
5天前
|
存储 数据采集 监控
SkyWalking全景解析:从原理到实现的分布式追踪之旅
SkyWalking全景解析:从原理到实现的分布式追踪之旅
445 1
|
5天前
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
36 5
|
5天前
|
数据采集 存储 运维
如何使用SkyWalking收集分析分布式系统的追踪数据
通过以上步骤,你可以使用 SkyWalking 工具实现对分布式系统的数据采集和可视化。SkyWalking 提供了强大的追踪和度量功能,帮助开发者和运维人员更好地理解系统的性能状况。欢迎关注威哥爱编程,一起学习成长。
EMQ
|
5天前
|
存储 NoSQL API
EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
新版本提供 OpenTelemetry 分布式追踪与日志集成功能,新增了开放充电协议 OCPP 协议接入能力,并为数据集成添加了 Confluent 支持。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。
EMQ
1124 2
EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
|
7月前
|
存储 监控 数据可视化
使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
73 0
|
7月前
|
前端开发 Cloud Native JavaScript
《深入分布式追踪:OpenTracing 实践手册》
《深入分布式追踪:OpenTracing 实践手册》
133 0
|
8月前
|
存储 监控 Java
Spring Boot 中的分布式追踪
Spring Boot 中的分布式追踪
|
8月前
|
JSON Java 数据格式
springboot 集成tlog 实现分布式日志标记追踪
springboot 集成tlog 实现分布式日志标记追踪
764 0
|
10月前
|
存储 机器学习/深度学习 人工智能
一文读懂分布式追踪:过去、现在和未来
Hello folks,我是 Luga,今天我们来聊一下云原生生态体系可观测性核心之——分布式追踪技术。
245 0
|
5天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
132 2
http://www.vxiaotou.com