链路追踪学习一:OpenTracing

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
简介: 链路追踪学习一:OpenTracing

关于Metrics、Tracing和Logging

监控(Metrics),链路(Tracing),日志(Logging) 都是用于监测系统在运行时的情况,在这3个领域中都有着不同的解决方案,同时3点也可能会重合在一起进行使用.

监控

监控指标的定义特征是它们是可聚合的:它们是在一段时间内组成单个逻辑指标、计数器或直方图的原子。

通俗来讲就是监控主要记录的是系统一定时间内的指标次数,例如请求次数,失败次数,系统状态情况等

链路

链路将记录处理请求范围内的信息--任何可以绑定到系统中单个事务对象的生命周期的数据或元数据。

例如一次请求的请求栈,栈运行时间,运行数据等

日志

日志的定义特征是它处理离散事件。

日志无法直接定义一个请求事件情况,因为它是异步,乱序,离散的记录集合,如果需要提取有用的信息,则需要对日志进行下一步的处理,例如找出日志中的traceId进行分组统计,这样就得到了一个链路数据,如果对请求状态码的日志进行统计,这样就得到了请求次数

在实际的使用中,日志作为流量最大的数据,是无法直接使用的,只能进行二次清理汇总,根据汇总的需求,和汇总的数据压缩性,可以得到 单次请求的执行日志(链路),得到一段时间内的请求次数(监控),这3者区别在于对数据的分类汇总

而openTracing记录的,就是基于 部分日志+链路 的聚合体

OpenTracing是什么

Opentracing 是分布式链路追踪的一种规范标准,是 CNCF(云原生计算基金会)下的项目之一。和一般的规范标准不同,Opentracing 不是传输协议,消息格式层面上的规范标准,而是一种语言层面上的 API 标准。以 Go 语言为例,只要某链路追踪系统实现了 Opentracing 规定的接口(interface),符合Opentracing 定义的表现行为,那么就可以说该应用符合 Opentracing 标准。这意味着开发者只需修改少量的配置代码,就可以在符合 Opentracing 标准的链路追踪系统之间自由切换。

openTracing模型

span


span是一条链路追踪的基本组成要素,一个span表示一个独立的工作单元(可以用于表示一次函数调用,一次http请求调用,mysql语句调用等等)

span将记录以下字段:

1:服务名称(operation name)

2:服务的开始时间和结束时间

3:key->value 的tags

4:key->value 的logs

5:span的上下文 (spanContext)

6:该span对一个或多个span的引用 (References)

tags

tags以key->value形式记录了该span的自定义标签,主要用于链路追踪结果的查询过滤,该tag不会传给下一个span.

logs

logs与tags 类似,但是logs将记录时间

SpanContext

spancontext携带了用于跨服务/跨进程 通信数据,主要为:

1:标识该span的信息,例如span_id(自身的span_id),trace_id(链路id)

2:Baggage Items 例如tags,但是此数据将会传递给后续所有的span,用于给整条链路保存用户自定义数据

References

References分为了2种方式:

1:childOf,表示该span作为父级span的引用,同步调用,例如父级span调用此span,需要等待span执行成功才能进行下一步执行

2:followFrom,表示该span只是被span调用(大多数为异步调用)了,不在乎此span的执行结果,也不会影响父span的执行时间

Trace

Trace表示一次完整的链路追踪,由多个span组成:

image.png

请求流程为:

image.png

本文参考:

https://www.lixueduan.com/post/tracing/01-opentracing/

https://zhuanlan.zhihu.com/p/83654617

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
相关文章
|
中间件
链路追踪学习四:gin集成jaeger
链路追踪学习四:gin集成jaeger
587 0
|
中间件 Go API
Go语言微服务框架 - 9.分布式链路追踪-OpenTracing的初步引入
我们从API层到数据库层的链路已经打通,简单的CRUD功能已经可以快速实现。 随着模块的增加,我们会越发感受到系统的复杂性,开始关注系统的可维护性。这时,有个名词会进入我们的视野:**分布式链路追踪**
141 0
|
存储 消息中间件 Ubuntu
链路追踪学习二:Jaeger
链路追踪学习二:Jaeger
562 0
链路追踪学习二:Jaeger
链路追踪学习三:跨服务,跨进程追踪
链路追踪学习三:跨服务,跨进程追踪
187 0
链路追踪学习三:跨服务,跨进程追踪
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1224 0
分布式链路追踪- SkyWalking使用手册
|
3月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
6月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
1008 0
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
消息中间件 监控 安全
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
147 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
|
消息中间件 Java Kafka
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
145 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)