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

相关文章
|
5月前
|
存储 数据可视化 搜索推荐
Kratos微服务轻松对接EFK日志系统
EFK 是一个完整的分布式日志收集系统,很好地解决了上述提到的日志收集难,检索和分析难的问题。EFK=Elasticsearch+Fluentd+Kibana
91 0
|
7月前
|
SQL 监控 测试技术
搭建Jaeger
搭建Jaeger
76 0
|
中间件
链路追踪学习四:gin集成jaeger
链路追踪学习四:gin集成jaeger
473 0
|
存储 Prometheus Kubernetes
OpenTelemetry 简析
OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。 2021.02.10,OpenTelemetry 的 tracing spec 达到 1.0 版本 (link),基于这个里程碑,笔者对 OpenTelemetry 进行了探索,判断在可观测性领域带来的价值和发展前景。 下面给出笔者对 OpenTelemetry 的理解,抛砖引玉。由于笔者能力有限,理解不当的地方请大家指正。
OpenTelemetry 简析
|
4月前
|
编译器 Shell Go
|
5月前
|
Go API 微服务
Golang微服务框架Kratos轻松集成并使用Swagger UI
在我们的开发当中,调试接口,测试接口,提供接口文档给前端,那都是非常频繁的工作内容。 那么,我们需要用什么方法和工具来实施这些工作内容呢? Swagger,或者说OpenAPI。
113 0
|
5月前
|
存储 Prometheus Cloud Native
OpenTelemetry项目
OpenTelemetry项目
|
9月前
|
存储 监控 Cloud Native
opentracing(开放分布式追踪) + jaeger初探
以下是小马整理总结的入门理解笔记,助于入门和理解分布式链路追踪,opentracing(开放分布式追踪) + jaeger。
131 0
opentracing(开放分布式追踪) + jaeger初探
|
9月前
|
Prometheus 监控 Cloud Native
Go微服务架构实战 下篇:1. gRPC + Opentracing + Zipkin实现分布式链路追踪系统
Go微服务架构实战 下篇:1. gRPC + Opentracing + Zipkin实现分布式链路追踪系统
|
11月前
|
存储 Prometheus 监控
(16)go-micro微服务jaeger链路追踪
(16)go-micro微服务jaeger链路追踪
176 0

热门文章

最新文章