我眼中的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

目录
相关文章
|
7月前
|
消息中间件 Kubernetes Cloud Native
iLogtail 开源两周年:感恩遇见,畅想未来
凡是过往,皆为序章;iLogtail 社区,是我们共同编织的果实。所有将来,皆为可盼;LoongCollector,是我们共筑的未来。
542 71
|
6月前
|
前端开发 Java UED
"揭秘!如何以戏剧性姿态,利用SpringCloud铸就无懈可击的异常处理铁壁,让你的微服务架构稳如泰山,震撼业界!"
【9月更文挑战第8天】随着微服务架构的普及,Spring Cloud作为一套完整的微服务解决方案被广泛应用。在微服务架构中,服务间调用频繁且复杂,异常处理成为保障系统稳定性和用户体验的关键。传统的异常处理方式导致代码冗余,降低系统可维护性和一致性。因此,基于Spring Cloud封装统一的异常处理机制至关重要。这样不仅可以减少代码冗余、提升一致性,还增强了系统的可维护性,并通过统一的错误响应格式优化了用户体验。具体实现包括定义全局异常处理器、自定义业务异常以及在服务中抛出这些异常。这种方式体现了微服务架构中的“服务治理”和“契约先行”原则,有助于构建健壮、可扩展的系统。
98 2
|
8月前
|
安全 Java 区块链
matic马蹄链合约DAPP项目系统开发技术(成熟语言)
Matic Network是一种基于侧链的公共区块链扩展解决方案。它的基础是Plasma框架的调整实施。Matic提供了可扩展性,同时以安全和分散的方式确保了卓越的用户体验。它在KovanTestnet上为Etalum提供了一个工作实现。Matic打算在未来支持其他区块链,这将使它能够提供互操作性功能,同时为现有的公共区块链提供可伸缩性。
|
9月前
|
监控 Java API
Java日志框架的纷争演进与传奇故事
Java日志框架的纷争演进与传奇故事
|
安全 IDE jenkins
十年磨一剑,墨菲安全正式发布开源项目murphysec(二)
十年磨一剑,墨菲安全正式发布开源项目murphysec
十年磨一剑,墨菲安全正式发布开源项目murphysec(二)
|
JSON 供应链 安全
十年磨一剑,墨菲安全正式发布开源项目murphysec(一)
十年磨一剑,墨菲安全正式发布开源项目murphysec
十年磨一剑,墨菲安全正式发布开源项目murphysec(一)
|
区块链 开发者
深入分析Metaforce/Forsage/魔豹联盟/Polygon马蹄链Matic/佛萨奇2.0系统开发实现技术原理丨成熟及源码
 智能合约dapp开发技术主要由以太坊区块链网络提供支持,该网络提供了一系列的智能合约技术,这些智能合约可以让开发者快速、安全地构建出功能强大的dapp。智能合约dapp开发技术主要包括以太坊智能合约语言Solidity,以太坊智能合约框架Truffle,Web3.js,以太坊区块链浏览器Mist等
|
缓存 前端开发 数据可视化
记一次APM产品开发经历
记一次APM产品开发经历
293 0
记一次APM产品开发经历
|
设计模式 监控 IDE
探析Java日志框架
        目前,几乎所有的应用程序中,都会用到日志框架来记录程序的运行信息。日志虽然不影响应用程序的运行结果,但是没有日志的应用程序是不健全,不完整的。良好的日志系统可以帮助我们快速的定位到程序问题,包括近几年火起来的日志分析系统,比如ELK,日志在我们系统中被重视起来,也起到了举足轻重的作用
152 0