Opentracing概念介绍——Span

news2025/2/23 6:44:09

文章首发公众号:海天二路搬砖工

引言

作为分布式跟踪系统的标准化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的结构体在不同的语言和实现中可能会有所不同,但是大致的结构和属性应该是类似的。

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跟踪分布式系统的重要概念。

公众号

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1203975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

csdn2023必看系列:最牛最全面的JMeter实现接口自动化测试教程

【文章末尾给大家留下了大量的福利哦】 一、JMETER的环境搭建 参考:https://www.cnblogs.com/qmfsun/p/4902534.html 二、JMETER的汉化 临时汉化方法:打开jmeter,options-->choose language-->选择语言 可以根据自己的需要选择简体…

【Python小程序】浮点矩阵加减法

一、内容简介 本文使用Python编写程序,实现2个m * n矩阵的加、减法。具体过程如下: 给定两个m*n矩阵A和B,返回A与B的和或差。 二、求解方法 将两个矩阵对应位置上的元素相加。 三、Python代码 import numpy as np# 用户输入两个矩阵的维…

Leetcode—67.二进制求和【简单】

2023每日刷题&#xff08;二十八&#xff09; Leetcode—67.二进制求和 实现代码 void reverse(char *a, int len) {for(int i 0; i < len / 2; i) {char tmp a[i];a[i] a[len - 1 - i];a[len - 1 - i] tmp;} }char* addBinary(char* a, char* b) {int len1 strlen(a…

微信小程序:仅前端实现对象数组的模糊查询

效果 核心代码 //对数组进行过滤&#xff0c;返回数组中每一想满足name值包括变量query的 let result array.filter(item > { return item.name.includes(query); }); 完整代码 wxml <input type"text" placeholder"请输入名称" placeholder-styl…

YOLO目标检测——番茄数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;番茄检测数据集说明&#xff1a;番茄目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt)三种格式标签…

YashanDB服务端个人版安装部署

介绍 崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统&#xff0c;融入原创理论&#xff0c;支持单机/主备、共享集群、分布式等多种部署方式&#xff0c;覆盖OLTP/HTAP/OLAP交易和分析混合负载场景&#xff0c;为客户提供一站式的企业级融合数据…

2023年11月最新视频号下载提取工具?

视频号下载提取器教程&#xff1a; 1. 首先&#xff0c;在微信客户端中搜索并添加"下载小助手儿"并关注获取推送的消息。然后添加视频下载助手为好友&#xff0c;可以帮助你解析视频号链接。 2. 打开微信&#xff0c;并找到你想要提取链接的视频号。进入该视频页面后…

YOLO目标检测——红花数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;红花检测数据集可以用于监测和分析红花的生长情况&#xff0c;包括生长速度、叶面积、花朵数量等&#xff0c;为农民提供精确的决策支持&#xff0c;以提高红花产量和品质。数据集说明&#xff1a;红花检测数据集&#xff0c;真实场景的高质量图片数据…

我国陆地遥感卫星发展现状与展望

一、引言 从20世纪90年代末至今&#xff0c;我国陆地遥感卫星事业历经二十多年&#xff0c;实现了从无到有、从小到大、从弱到强的跨越发展。随着高分辨率对地观测系统重大专项&#xff08;高分专项&#xff09;、《陆海观测卫星业务发展规划&#xff08;2011—2020年&#xff…

CountDownLatch使用

常用于多线程场景&#xff0c;待多线程都结束后方可继续主线程逻辑处理 CodeConstant 常量类 import java.util.HashMap; import java.util.Map;public class CodeConstant {public static final Map<String, Map<String, String>> CODE new HashMap<>();…

零基础快速上手STM32开发(手把手保姆级教程)

零基础快速上手STM32开发&#xff08;手把手保姆级教程&#xff09; 1. 前言 作为一名嵌入式工程师&#xff0c;STM32 是必须要学习的一款单片机&#xff0c;同时这款单片机资料足够多&#xff0c;而且比较简单&#xff0c;非常适合初学者入门。 STM32 是一款由 STMicroelec…

酷柚易汛ERP - 商品库存余额表操作指南

1、应用场景 商品库存余额表用于查询商品在各仓库的实际结存量、单位成本以及成本等明细。 2、主要操作 打开【仓库】-【商品库存余额表】&#xff0c;可筛选仓库、商品、商品类别&#xff0c;导出/打印等操作见【销货单】不再赘述。 3、分享操作 库存余额分享&#xff0c;…

win7纯净版没有网卡驱动怎么办(msdn重装的系统)

当电脑重新安装Windows7系统之后&#xff0c;发现无法连接网络的情况&#xff0c;可以找一台能正常上网使用的电脑&#xff0c;打开浏览器软件&#xff0c;搜索“360驱动大师”&#xff0c;下载360驱动大师网卡版到U盘&#xff0c;然后拷贝到自己的win7电脑上安装网卡驱动&…

C++ final

参考:https://blog.csdn.net/qq_45358642/article/details/124232686#t2 不想让类继承 方式一&#xff1a;将类的构造函数设置为私有 子类不能调用父类构造函数初始化来实例化对象&#xff0c;所以不能继承 缺点&#xff1a;我们自己也不能够实例化出对象 class A { privat…

酷柚易汛ERP - 序列号跟踪表

1、应用场景 对于3C数码、医疗器械等行业&#xff0c;商品价值高且需要进行售后服务&#xff0c;需要对商品进行序列号管理&#xff0c;通过序列号跟踪表可查询每个序列号入库、出库、退货、调拨、盘点等流向。 2、主要操作 打开【仓库】-【序列号跟踪表】&#xff08;系统设…

2023.11.14-hive之表操作练习和文件导入练习

目录 需求1.数据库基本操作 需求2. 默认分隔符案例 需求1.数据库基本操作 -- 1.创建数据库test_sql,cs1,cs2,cs3 create database test_sql; create database cs1; create database cs2; create database cs3; -- 2.1删除数据库cs2 drop database cs2; -- 2.2在cs3库中创建…

洗地机哪个牌子最好用?洗地机品牌排行榜

近年来&#xff0c;洗地机相当热门&#xff0c;洗地机结合了扫地拖地吸地为一体的多功能清洁工具&#xff0c;让我们告别了传统方式打扫卫生&#xff0c;让我们清洁不再费劲&#xff0c;可是市面上的洗地机五花八门&#xff0c;怎么挑选到一个洗地机也是一个问题&#xff0c;下…

Xmind 24 for Mac思维导图软件

XMind是一款流行的思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 以下是XMind的主要特点&#xff1a; - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大…

酷柚易汛ERP - 其他出库单操作指南

1、应用场景 处理其他非销售类型的出库单据&#xff0c;比如内部领用福利、赔偿、借出、领用材料、以货抵债等不参与销售管理的出库类业务。 2、主要操作 2.1 新增其他出库单 打开【仓库】-【其他出库单】&#xff0c;新增单据 出库单位成本及出库成本不能录入&#xff1b;…

45 深度学习(九):transformer

文章目录 transformer原理代码的基础准备位置编码Encoder blockmulti-head attentionFeed Forward自定义encoder block Deconder blockEncoderDecodertransformer自定义loss 和 学习率mask生成函数训练翻译 transformer 这边讲一下这几年如日中天的新的seq2seq模式的transform…