OpenTracing 介绍 | 学习笔记

简介: 快速学习 OpenTracing 介绍

开发者学堂课程【分布式链路追踪 SkywalkingOpenTracing 介绍】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/743/detail/13167


0pen Tracing 介绍


内容介绍

一、Tracing的概念(最核心的概念)

二、Span的概念

三、Log 的概念

四、Tags 的概念


一、 Trace的概念

在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程,在OpenTracing 标准中,trace 是多个 span 组成一个有向无环图(DAG),每一个 span 代表 trace 中被命名并计时的连续性的执行片段。

详细介绍:在广义上,一个trace,在分布式系统中的执行过程,外部系统前端发起调用,调用的整个运作流程就代表一个 trace。对于外端的开发人员来说,要去定位问题,问题最初的根源是在 trace 上,可以通过 trace 来定位到,弄清楚在 trace当中,哪个部分出现了性能的瓶颈或者调用失败。

trace 是由 span 来组成的一个有向无环图,是定向的,不会出现一个环状物。span 代表 trace 中被命名并计时的连续性的执行片段,就是trace的一个调用过程。

image.png

这张图整体上一笔调用就代表一个trace,然而这张图不是特别的直观,因为它不能标识出每一笔调用的时间,所以就不能知道是在哪一笔调用,就无法知道span的那一个部分出现了一个性能的问题。

opeaing trace 将概念语义化之后,通过它的一个设计可以画出下面这张图。这张图上整体的调用就是一个trace,其中每一个颜色的色块代表一个span,比如说权限服务的调用过程就是一个span,它调用完之后会调用订单服务过程,这也是一个span。

image.png

通过这张图,可以很直观的看到,到底在这个过程中经过了哪几个过程,每个过程都是一个span,那个span耗时最长,一般来说性能的瓶颈可能就在这里。


二、 Span 的概念

一个Span代表系统中具有开始时间和执行时长的逻辑运行单元,span之间通过嵌客或者顺序排列建立逻辑因果关系。

详细介绍:一个Span代表系统中具有开始时间和执行时长的逻辑运行单元,就是一个调用过程,这个过程是有开始时间和持续时长的,可以用来统计执行时间,span之间具有逻辑因果关系。

Span里面的信息包括:操作的名字,开始时间和结束时间,可以附带多个key.value构成的Tags(key必须是String,value可以是String,bool或者数字),还可以附带Logs信息(不一定所有的实现都支持)也是 key.value 形式。

操作的名字:方法的一个名称。

开始时间结束时间:结束时间-开始时间=执行时间。

tags:展示 span 的一些额外信息。tags里面的key必须是 string 。value 可以是string,bool 或者数字。

logs信息:主要是用来打印一些span运行过程中的一些消息。

下面例子是一个 Trace ,里面有8个 Span:

image.png

一个 span 可以和一个或者多个 span 间存在因果关系。OpenTracing 定义了两种关系:Childof 和Followsfrom, 这两种引用类型代表了子节点和父节点间的直接因果关系。未来,OpenTracing 将支持非因果关系的 span 引用关系。(例如:多个 span 被批量处理,span 在同一个队列中,等等)

Childof 很好理解,就是父亲 Span 体段另一个孩子 Span ,比如函数调用,被调用者是调用者的孩子,比如说 RPC 调用,服务端那边的 Span,就是Chidof 客户端的,很多并发的调用,然后将结果聚合起来的操作,就构成了 Childof 关系。

如果父亲 Span 并不依赖于孩子 Span 的返回结果,这时可以说它他构成 FollowsFrom 关系。

例如: span 之间的因果关系,Span A 和 Span C 之间的关系就是 childof,代表 SpanA 调用 Span C , 需要等待 Span C 的返回。

Span F 和 Span G 之间的关系是 FollowsFrom,代表 SpanF 调用 Span G, 不需要等待 SpanG 的返回,就结束了。

image.png

如图所示,左边的每一条追踪代表一个 Trace,而右边时序图中每一个节点就是一个 Span。

左边每一笔的一个调用,就是一个 trace,trace 底下会有多个 span,比如说图片上的一个 span mvc 的出入接口调用就是一个 span,而如果说这个接口内部要调用 dubbo,于是就会出现一个新的 dubbo span,所以用这样一个 span 之间的关系再加上 trace,就能很明显的描述一个追踪链路的关系。


三、 Log 的概念

每个span可以进行多次 Logs 操作,每一次 Logs 操作,都需要一个带时间戳的时间名称,以及可选的任意大小的存储结构。

如下面是一个异常的 Log:

image.png

异常的 logo,本质上是一个 key.value 键值对,比如说 event 就是一个事件类型,key 就是 event,error 就是 value。

图片上面的内容,主要还是为了丰富的span的信息展示,比如说异常可以通过 log 来查看到底是哪个位置出现了问题,这个异常对战到底是怎么样的,用来快速定位一个议程。


四、 Tags 的概念

每个 span 可以有多个健值对 (key.value) 形式的 Tags, Tags 是没有时间截的,支持简单的对 span 进行注解和补充。

如下图就是一个 Tags 的详细信息,其中记录了数据库访问的 SQL 语句等内容。

image.png

课堂概念总结:

image.png

trace 是一个大的调用,比如说从前端发起请求到后端,那么直到后端返回这整个时间,就是发起了一次 trace 的调用。在 trace 内部,可能有很多span。

如左图所示,一个 span 是 spring mvc,响应到一个外部需求进行处理。span 内部会有一些 tags,tags 标明了请求类型,请求类型是键值对的形式:spring mvc。

如果报错了,就会有一个 log,log也是键值对形式:event:info 和 message:abc。

一个 trace 会有多个 span,如右图所示,另一个 span,是 dubbo span,是一个 dubbo 调用的 span ,请求类型是 dubbo。

如果报错,键值对形式:event:error 和 stack:堆栈信息。

在 span 的额外的信息里,还包括开始时间和结束时间。通过这些信息就可以看到 span 的一个业路的情况。

在 span 与 span 之间呢,它是有一个通过 dubbo 调用的关系存在,这个关系是 childof。

Open Tracing 就是基于这样的一些概念来把它的数据进行分类并且存储,那么通过这些数据的组合,就可以去画出分布式业路追踪的一张图了。

相关文章
|
2月前
|
数据采集 人工智能 自然语言处理
重磅干货|《AI时代数据治理白皮书》正式发布!
AI时代,数据质量决定智能上限。阿里巴巴Dataphin推出《AI时代数据治理白皮书》,提出“好数据×好知识=真智能”,详解面向AI的四层治理体系,揭示如何以高质量数据驱动智能化转型,助力企业构建核心竞争力。
356 0
|
4月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
637 0
|
7月前
|
人工智能 编解码 搜索推荐
通义万相新模型开源,首尾帧图一键生成特效视频!
通义万相首尾帧生视频14B模型正式开源,作为首个百亿级参数规模的开源模型,可依据用户提供的开始与结束图片生成720p高清衔接视频,满足延时摄影、变身等定制化需求。用户上传两张图片或输入提示词即可完成复杂视频生成任务,支持运镜控制和特效变化。该模型基于Wan2.1架构改进,训练数据专门构建,确保高分辨率和流畅性。
716 21
|
存储 Java 测试技术
一文彻底搞懂阿里开源TransmittableThreadLocal的原理和使用
【10月更文挑战第2天】在Java多线程编程中,线程本地变量(ThreadLocal)是一个非常有用的工具,它能够在每个线程中保存一个独立的变量副本,从而避免多线程环境下的数据竞争问题。然而,在使用线程池等高级多线程技术时,ThreadLocal却面临着一些挑战。为了解决这个问题,阿里巴巴开源了TransmittableThreadLocal(TTL),它扩展了ThreadLocal的功能,使其能够在复杂的多线程环境中正确传递值。本文将深入探讨TTL的原理和使用,帮助读者彻底理解这一技术干货。
2138 0
|
XML 网络协议 机器人
ROS1 Noetic主从机通信使用详解
这篇文章详细介绍了在ROS1 Noetic环境下配置主从机通信的步骤,包括获取IP和主机名、设置`/etc/hosts`文件、配置ROS环境变量以及测试通信是否成功。同时,文章还提供了一些ROS环境变量的相关知识和参考资料链接。
988 0
|
人工智能 运维 安全
智能体(Agent)平台介绍
2023年11月9日,比尔盖茨先生发布了《人工智能即将彻底改变你使用计算机的方式》文章,详尽阐明了Agent(智能体)这个新一代智能应用的技术理念。在个人助理、卫生保健、教育、生产率、娱乐购物、科技等领域有着广泛的应用场景,对于开发者而言是个巨大的机会, 本篇文章尝试从系统化的角度解决构建Agent的问题,探讨Agent平台化的方案。
9990 2
智能体(Agent)平台介绍
|
存储 缓存 Java
|
网络协议 小程序 测试技术
ChaoBlade 的实现原理
【4月更文挑战第6天】ChaoBlade 的实现原理
477 3
ChaoBlade 的实现原理
|
监控 Go 开发工具
【可观测性系列】 Opentelemetry 介绍
大家好,我是蓝胖子,随着微服务的流行,服务的可观测性概念被越来越多人提及到,究竟什么是可观测性?我们应该如何构建服务的可观测性?我将会在这篇文章中逐步提及到,并对和可观测性相关的工具 Opentelemetry做一个大致的介绍。
【可观测性系列】 Opentelemetry 介绍
|
Java API Nacos
spring.config.import 是一个 Spring Cloud Config Server 的属性,
spring.config.import 是一个 Spring Cloud Config Server 的属性,【1月更文挑战第25天】【1月更文挑战第123篇】
2726 1