我眼中的OpenTracing

简介: 我眼中的OpenTracing

一、OpenTracing 是什么?

分布式链路跟踪最先由 Google在 Dapper论文中提出的一套链路追踪的 API 规范,支持多种编程语言,与平台无关、与厂商无关,使得开发人员能够方便的添加(或更换)链路跟踪系统的实现,虽然OpenTracing不是一个标准规范,但现在大多数链路跟踪系统都在尽量兼容OpenTracing。目前符合这API标准的就有 SkyWalking,Jaeger,Zipkin,Open Telemetry,Pinpoint、CAT等等

Opentracing 核心接口

Tracer:调用链,追踪链路,一个trace是由若干span组成的有向无环图,Tracer 对象可以用来创建 Span 对象(记录分布式操作时间)、跨机器透传数据(Extract/Inject 方法),或设置当前 Span(activeSpan)。Tracer对象还配置了上报数据的网关地址、本机 IP、采样率、服务名等数据。您可以通过调整采样率来减少因上报数据产生的开销

Span Tracer 中的基本单元,一个span代表应用中的一个逻辑操作,

span属性

Operation name:操作名
Start timestamp:开始时间
Finish timestamp:完成时间
Span Tag:标签集合,一组键值对,键必须为字符串,值为字符串/数字或布尔
Span Log: 日志集合,没条日志包含一个键值对和一个时间错。
SpanContext:上下文
Baggage items:trace的随行数据,是一组键值对,也需要跨进程传输。

SpanContext : Span 上下文,用于跨进程传递 Span,以及数据共享

ScopeManager:用于获取当前上下文中 Span,或者将 Span 设置到当前上下文

Scope:与 ScopeManager 配合使用,

Span 之间的关系分父子关系ChildOf和跟随关系FollowsFrom。

OpenTracing API 介绍

包含三个相互关联的类型 Tracer/span/spanContext

Tracer API

用于创建span,以及处理跨进程传递中的序列化。

tracer.buildSpan

参数:

Operation name:必填,操作名,span的具体工作,如getUserInfo

SpanContext:关联关系,包括关系类型

Start timestamp:默认为当前时间

Tag:0或多个

返回值:返回一个已启动且未结束的span。

将SpanContext注入inject到Carrier中

参数:

SpanContext实例

Format:格式化描述,一般就是字符串

Carrier:将format的后的数据序列化到carrier中

将SpanContext从Carrier中提取extract

参数:

Format:格式化描述

Carrier:从carrier中根据format反序列化出SpanContext。

返回值:SpanContext

Format结构:

Text Map:字符串Map

HTTP Headers:header信息,基于字符串Map

Binary:二进制大对象,SpanContext信息。

Span API

当Span结束span.finish后,除了获取span的SpanContext,其他操作都不被允许。

获取SpanContext

修改operation name

参数:new operation name,新的操作名词。

结束span finsh

参数:finish timestamp,完成时间

设置tag

参数:

tag key

tag value

设置结构化Log数据

参数

一个或多个log键值对,必填

时间戳,选填

设置Baggage随行数据

键值对集合,存入spancontext进行传递,会对io和cpu带来额外开销,谨慎使用。

参数:

Baggage key:字符串

Baggage value:字符串

获取Baggage元素

参数:baggage key

返回值:Baggage value

参考:

https://github.com/opentracing-contrib/opentracing-specification-zh

目录
相关文章
Apifox测试导出excel接口
Apifox测试导出excel接口
1721 0
|
Java 应用服务中间件
VsCode 运行Java Web 项目(Tomcat)
使用VsCode 运行Java Web 项目(Tomcat)
3441 0
VsCode 运行Java Web 项目(Tomcat)
|
10月前
|
人工智能 前端开发 JavaScript
纯干货!如何用Cursor+宜搭,3天完成三周开发量(附超详细视频教学)
Cursor是热门代码编辑器之一,通过与宜搭(Yida)结合,提供了强大的低代码页面和自定义组件生成能力。方案利用Claude模型的代码生成能力及MCP支持,大幅提升开发效率。开发者可通过Cursor连接宜搭表单设计器或自定义组件设计器,实现React源码的生成与同步,并支持二次编辑。现有功能涵盖文本、数字、图片、链接等多种字段类型,以及属性面板配置、JS代码生成等。
2101 83
|
12月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
855 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
10月前
|
机器学习/深度学习 自然语言处理 算法
PyTorch PINN实战:用深度学习求解微分方程
物理信息神经网络(PINN)是一种将深度学习与物理定律结合的创新方法,特别适用于微分方程求解。传统神经网络依赖大规模标记数据,而PINN通过将微分方程约束嵌入损失函数,显著提高数据效率。它能在流体动力学、量子力学等领域实现高效建模,弥补了传统数值方法在高维复杂问题上的不足。尽管计算成本较高且对超参数敏感,PINN仍展现出强大的泛化能力和鲁棒性,为科学计算提供了新路径。文章详细介绍了PINN的工作原理、技术优势及局限性,并通过Python代码演示了其在微分方程求解中的应用,验证了其与解析解的高度一致性。
3676 5
PyTorch PINN实战:用深度学习求解微分方程
|
Java 测试技术 API
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
在 Spring Framework 5.0 及更高版本中,RestTemplate 已被弃用,取而代之的是 WebClient。WebClient 提供了非阻塞 I/O、函数式编程风格、更好的错误处理和流式传输支持等优势。本文介绍了如何在 Spring Boot 3 中使用 WebClient 发送同步和异步请求,并处理各种错误。虽然 RestTemplate 仍可用于某些场景,但 WebClient 是现代 Spring 应用程序的更好选择。
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
|
自动驾驶 算法 5G
5G中的超可靠低延迟通信(URLLC)
【8月更文挑战第31天】
2397 0
|
存储 测试技术 Linux
Docker技术仓库
本文详细介绍了Docker中数据卷的作用、特点、管理方式,包括bindmounts和volumes挂载、Dockerfile中的数据卷使用、Docker仓库(公有与私有)以及DockerCompose在多容器应用中的应用。
|
设计模式 Java 开发者
吐血整理!最全Spring设计模式总结
吐血整理!最全Spring设计模式总结
1507 0
吐血整理!最全Spring设计模式总结