前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Opentracing概念介绍——Span

Opentracing概念介绍——Span

作者头像
windealli
发布于 2023-10-13 03:35:47
发布于 2023-10-13 03:35:47
52500
代码可运行
举报
文章被收录于专栏:windealliwindealli
运行总次数:0
代码可运行

引言

作为分布式跟踪系统的标准化API,OpenTracing提供了一种通用的方式来追踪和分析分布式系统中的请求和操作。

在Opentracing中,Span是基本的跟踪单元,用于描述在分布式系统中的一个操作或事件。通过收集和分析Span数据,我们可以更好地理解和优化分布式系统的性能和可靠性。

文中将深入探讨Opentracing中的Span,包括Span的定义、结构体、属性、操作、上下文等方面的内容。帮助读者更好地理解和应用Opentracing。

Span的简介

在OpenTracing中,跟踪数据通常由许多小的跨度(Span)组成 。 Span代表应用程序处理过程中的某个操作,例如 SQL 查询、HTTP 接口调用或函数调用等。每个Span都有一个开始时间和结束时间,并记录了其他元数据,例如跨度所属的节点、跨度的父子关系、错误信息和跨度的标签等。

Span的作用

Span作为分布式跟踪系统中的基本跟踪单元,具有以下作用:

  1. 追踪请求路径:在分布式系统中,一个请求通常会经过多个服务和组件,Span可以用于追踪请求在分布式系统中的路径。
  2. 监控系统状态:Span可以用于记录分布式系统中的事件和状态变化,例如服务调用、数据库查询、HTTP请求等。
  3. 分析性能指标:Span可以记录请求在分布式系统中的耗时和性能指标,例如响应时间、吞吐量、错误率等。
  4. 建立关联关系:Span可以用于建立Span之间的关联关系,例如父子关系、兄弟关系等,从而更好地理解和分析分布式系统中的请求和操作。

Tracer中的Span

Span是OpenTracing中具有开始时间和执行时长的逻辑运行单元。一条完整的追踪链可能包含多个span。 span之间通过嵌套或者顺序排列建立逻辑因果关系。

从继承维度看,一个Tracer的span一般如下图所示

从时间维度看,上面的Tracer的span的生命周期如下图所示

Span的基本属性

在OpenTracing中,Span对象具有以下几个基本属性:

  1. Operation Name(操作名称):指Span正在干什么的简短、描述性的名称。例如,"get_users"或"place_order"等。
  2. Start Time(开始时间)和Finish Time(完成时间):表示Span的开始和结束时间,用于确定Span的执行时间。Start Time和Finish Time以Unix时间戳形式存储。
  3. Duration(执行时间):Span执行所需的时间长度。Duraction可以通过Start Time和Finish Time计算得到。
  4. Parent Span ID(父Span ID)和Span ID(Span ID):分别表示Span在调用链路中的相对位置和唯一标识符。一个Span的Span ID是唯一的,而Parent Span ID则表示Span在调用链路中的父Span的Span ID。
  5. Tags(标签):可用于添加关于Span的元数据,例如Span所执行操作的请求方法、响应状态码、HTTP请求路径等。
  6. Logs(日志):可用于记录Span对象执行期间出现的某些动作和状态,例如某个操作的输入、输出等信息。

Span的上下文信息

在OpenTracing中,Span的上下文可以包括以下信息:

  • Trace ID:表示跟踪的唯一标识符,重新启动或创建的一系列Span将共享该值。
  • Parent Span ID:表示父Span的唯一标识符。
  • Span ID:表示Span的唯一标识符。

通过Span的上下文,我们可以了解Span在调用链中的位置、关系以及它们之间传递的上下文数据,以便更好地了解操作执行过程和状态,并能够快速排除分布式系统中的性能和问题。

Span的结构体

在Opentracing中,Span通常被表示为一个结构体,包含了Span的各种元数据和属性。

Span的结构体在不同的语言和实现中可能会有所不同,但是大致的结构和属性应该是类似的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Span struct {
 SpanContext   SpanContext    // Span的上下文信息,包括Trace ID、Span ID、Trace Flags等。
 OperationName string     // Span的名称,用于标识Span所代表的操作或事件。
 StartTime     time.Time     // Span的开始时间。
 Duration      time.Duration    // Span的持续时间。
 Tags          map[string]interface{} // Span的标签和附加信息等。
 Logs          []LogRecord    // Span的日志和事件,用于记录Span上发生的事件和状态变化等。
 References    []SpanReference   // Span的引用,用于建立Span之间的关联关系。
 Tracer        Tracer      // 创建该Span的Tracer对象。
}

Span的常见操作

Span的开始和结束

Span可以分为两个阶段:开始()和结束()。我们可以调用start_span()函数创建一个新的Span,并使用finish()函数来标记Span的完成。Span的开始和结束对于我们跟踪分布式系统中的操作的执行时间和路径非常重要。

Span的日志和标记

在Span对象上添加日志和标记的功能是OpenTracing的一项重要特性。Span的标记通常是键值对,用于记录元数据。我们可以使用Span对象上的set_tag()方法来为Span添加标记。Span的日志通常是与Span所代表的事物的相关事件,例如记录SQL查询中的参数等。我们可以使用Span对象上的log()方法来记录关于Span的这些事件。

Span的嵌套和链接

有时,我们需要对操作进行更详细的跟踪。通过嵌套和链接Span对象,我们可以更好的跟踪分布式系统的操作执行路径。嵌套的Span表示一个操作的详细过程,其开始和结束都在外部Span开始和结束与之相关联。而Linked Span是一种用于表示两个Span对象之间的关系,例如父Span和子Span之间的关系。Linked Span可以通过在创建Span对象时引用旧的Span ID或创建一个新的Span ID来实现。

其他操作

  • 设置Span的名称 Span的名称表示它正在记录的事件的名称和类型。我们在创建Span对象时可以指定Span的名称。
  • 设置Span的时间戳 OpenTracing允许我们手动设置Span的开始和结束时间戳,以便记录分布式系统中的常见情况。
  • 设置Span的上下文 我们可以使用Span对象上的set_()方法来设置Span对象的上下文,例如Span对象在哪个线程中执行。

总结

OpenTracing是一个用于在分布式系统中跟踪代码路径的工具。在OpenTracing中,Span是一个核心概念,代表分布式操作和服务调用的执行路径。Span的开始和结束、日志和标记、嵌套和链接是常见的Span操作,用于帮助我们更完整地记录Span对象的上下文,以便于进行应用程序的调试、排错和优化。Span的上下文信息、基本属性、结构体和常用操作等是掌握OpenTracing跟踪分布式系统的重要概念。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天二路搬砖工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin
在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法。想看看方法的指标,却无处下手?
sunsky
2020/08/20
1.7K0
带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin
链路跟踪之Jaeger简介,架构,opentracing解析,安装
Jaeger Client - 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。
iginkgo18
2021/07/13
2.2K0
微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪
咱们以前单体应用里面有很多的应用和功能,依赖各个功能之间相互调用,使用公共的代码包等等,排查问题,使用类似于 gdb/dlv 工具或者直接查看代码日志,进行定位和分析
阿兵云原生
2023/09/28
4160
微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪
洞若观火:使用OpenTracing增强Istio的调用链跟踪
相比传统的“巨石”应用,微服务的一个主要变化是将应用中的不同模块拆分为了独立的进程。在微服务架构下,原来进程内的方法调用成为了跨进程的RPC调用。相对于单一进程的方法调用,跨进程调用的调试和故障分析是非常困难的,很难用传统的调试器或者日志打印来对分布式调用进行查看和分析。
赵化冰
2022/08/01
4990
洞若观火:使用OpenTracing增强Istio的调用链跟踪
基于opentracing + jaeger 实现全链路追踪
当代互联网服务,通常都是用复杂,大规模分布式集群来实现,微服务化,这些软件模块分布在不同的机器,不同的数据中心,由不同团队,语言开发而成。因此,需要工具帮助理解,分析这些系统、定位问题,做到追踪每一个请求的完整调用链路,收集性能数据,反馈到服务治理中,链路追踪系统应运而生。
orientlu
2019/06/14
3K0
《深入分布式追踪:OpenTracing 实践手册》
🐯 猫头虎博主报道!随着微服务的流行,分布式追踪已经成为了维护大规模系统的关键工具。我发现有很多技术同仁在搜索 “分布式追踪基础”、“OpenTracing 教程” 或 “如何配置 OpenTracing”。因此,我决定深入探讨 OpenTracing,并与大家分享如何在实际环境中应用它。无论你是刚接触还是想进一步掌握,这篇文章都会给你提供所需的知识。🚀
猫头虎
2024/04/09
7450
监控系统-OpenTracing
在all in拥抱云原生的大环境中,分布式系统已经成为标配,传统的服务器逐渐弹性化,上层接触到的跟多的是虚拟资源模式。然而,随着系统规模和复杂度的增加,分布式系统中的问题变得越来越难以排查和修复。在这种情况下,分布式追踪技术成为了必不可少的工具,以帮助开发者理解系统行为和性能,并快速识别和解决问题。
五分钟学SRE
2023/12/05
3760
监控系统-OpenTracing
OpenTracing语义标准规范及实现
OpenTracing(http://opentracing.io/)是分布式跟踪系统,当我们把系统拆成服务化,分布式系统的时候,查询一个问题,很可能需要多个登录多台机器。
小程故事多
2018/08/22
7.2K0
OpenTracing语义标准规范及实现
一文读懂微服务监控之分布式追踪
现在越来越多的应用迁移到基于微服务的云原生的架构之上,微服务架构很强大,但是同时也带来了很多的挑战,尤其是如何对应用进行调试,如何监控多个服务间的调用关系和状态。如何有效的对微服务架构进行有效的监控成为微服务架构运维成功的关键。用软件架构的语言来说就是要增强微服务架构的可观测性(Observability)。
yuanyi928
2019/08/08
1.1K0
一文读懂微服务监控之分布式追踪
链路追踪技术在分布式系统性能瓶颈分析与故障恢复中的应用
在现代分布式系统中,调试与监控变得尤为重要。随着微服务架构的普及,系统的复杂性和服务间的依赖关系急剧增加,导致传统的调试和监控手段难以满足需求。因此,链路追踪作为一种有效的调试与监控手段,帮助开发者追踪请求的完整生命周期,识别系统瓶颈和故障。Jaeger 和 SkyWalking 是两款常用的链路追踪工具,它们能够帮助开发者实时查看请求流转路径,快速定位性能瓶颈和潜在问题。
一键难忘
2025/02/23
1380
分布式链路追踪
微服务架构 作为云原生核心技术之一,提倡将单一应用程序划分成一组小的服务(微服务),服务之间互相协调、互相配合,为用户提供最终价值。
gopher云原生
2021/10/18
1.3K1
OpenTracing入门与 Jaeger的实现
目前很多的大中小公司都在探索和实践着微服务这种软件开发架构,将复杂庞大的重量型项目通过明确定义的 API 拆分成多个小型可复用的独立服务单元或者说是服务组件,这样让应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。但是复用和拆分依旧简化不了系统的复杂度,虽然微服务架构拆分了业务单元,但是各种组件之间的调用也是错中复杂,因此带来一系列的问题:
公众号: 云原生生态圈
2021/11/15
6050
OpenTracing入门与 Jaeger的实现
Istio最佳实践系列:如何实现方法级调用跟踪?
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher 管理委员,Istio 项目贡献者,热衷于开源、网络和云计算。目前主要从事服务网格的开源和研发工作。 引言 TCM(Tencent Cloud Mesh)是腾讯云上提供的基于Istio 进行增强,和 Istio API 完全兼容的 Service Mesh 托管服务,可以帮助用户以较小的迁移成本和维护代价快速利用到 Service Mesh 提供的流量管理和服务治理能力。本系列文章将介绍 TCM 上的最佳实践,本文将介绍如何利用
腾讯云原生
2021/04/12
1.2K0
[源码分析] OpenTracing之跟踪Redis
本文将通过研究OpenTracing的Redis埋点插件来进一步深入理解OpenTracing。
罗西的思考
2020/09/16
1.4K0
[源码分析] OpenTracing之跟踪Redis
Envoy架构概览(8):统计,运行时配置,追踪和TCP代理
统计 特使的主要目标之一是使网络可以理解。特使根据配置如何发出大量的统计数据。一般来说,统计分为两类: 下游:下游统计涉及传入的连接/请求。它们由侦听器,HTTP连接管理器,TCP代理过滤器等发出 上游:上游统计涉及传出连接/请求。它们由连接池,路由器过滤器,TCP代理过滤器等发出 单个代理场景通常涉及下游和上游统计信息。这两种类型可以用来获得特定网络跳跃的详细图片。来自整个网格的统计数据给出了每一跳和整体网络健康状况的非常详细的图片。所发出的统计数据在操作指南中详细记录。 特使使用statsd作为统计
架构师研究会
2018/04/09
2.2K0
Envoy架构概览(8):统计,运行时配置,追踪和TCP代理
分布式链路追踪框架的基本实现原理
柠檬(Lemon丶)大佬在一月份开业了柠檬研究院,研究院指导成员学习分布式和云原生技术,本月课题是分布式链路追踪,学习 Dapper 论文、Jaeger 的使用,以及完成一个兼容 Jaeger 的链路追踪框架。
痴者工良
2021/04/26
1.2K0
快速了解分布式链路追踪系统 zipkin
和市面上其它分布式链路追踪系统一样,Zipkin 也是根据 Google 论文《Dapper,大规模分布式系统的跟踪系统》(https://bigbully.github.io/Dapper-translation/) 作为理论,进行设计。
高楼Zee
2021/10/14
1.4K0
快速了解分布式链路追踪系统 zipkin
分布式链路追踪要怎么玩?
最近公司服务出现了一个bug,问题一直没有查出来在哪里,主要是某个接口调用两个应用的日志输出都没有问题,并且在整个请求链路较长,仅仅定位这个问题就定位了很久,效率奇低,于是'在moon的强烈要求下',准备在各服务接入分布式链路追踪框架了。
moon聊技术
2021/07/28
5460
分布式链路追踪要怎么玩?
几款符合 OpenTracing 规范的分布式链路追踪组件介绍与选型
Tracing 是在上世纪 90 年代就已出现的技术,但真正让该领域流行起来的还是源于 Google 的一篇 Dapper 论文。分布式追踪系统发展很快,种类繁多,但无论哪种组件,其核心步骤一般有 3 步:代码埋点、数据存储和查询展示,如下图所示为链路追踪组件的组成。
aoho求索
2021/01/28
9.2K1
几款符合 OpenTracing 规范的分布式链路追踪组件介绍与选型
OpenTelemetry架构介绍
摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/
charlieroro
2020/10/30
5.7K0
OpenTelemetry架构介绍
推荐阅读
相关推荐
带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文