OpenTracing开放式分布式追踪规范说明介绍整理
一.OpenTracing:开放式分布式追踪规范两个组成部分Trace:调用链,追踪链路,由span组成。Span:跨度点,一次跨方法调用span属性Operationname:操作名词Starttimestamp:开始时间Finishtimestamp:完成时间SpanTag:标签集合,一组键值对,键必须为字符串,值为字符串/数字或布尔SpanLog: 日志集合,没条日志包含一个键值对和一个时间
一.OpenTracing:开放式分布式追踪规范
两个组成部分
- Trace:调用链,追踪链路,由span组成。
- Span:跨度点,一次跨方法调用
span属性
- Operation name:操作名词
- Start timestamp:开始时间
- Finish timestamp:完成时间
- Span Tag:标签集合,一组键值对,键必须为字符串,值为字符串/数字或布尔
- Span Log: 日志集合,没条日志包含一个键值对和一个时间错。
- SpanContext:上下文
-
OpenTracing实现,需要将调用链的状态(如:trace和span的id),依赖一个特殊的span去跨进程传输。
-
Baggage items:trace的随行数据,是一组键值对,也需要跨进程传输。
- References:span间的连接关系,通过SpanContext建立关系
-
一个span可以与多个spancontext存在关系
-
关系类型有ChildOf父子关系和FollowsFrom跟随关系。
-
ChildOf父span依赖子span结果的关系
-
FollowsFrom 父span不依赖子span结果的关系。
二.OpenTracing API
包含三个相互关联的类型 Tracer/span/spanContext
Tracer API
用于创建span,以及处理跨进程传递中的序列化。
创建span
- 参数:
- 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
SpanContext API
可以根据需要自定一套SpanContext api,用于资金的opentracing实现。
遍历SpanContext中的Baggage
NoopTracer API
用于对OpenTracing API进行操作,用于外部操作或测试等,可以进行无害的注入等。
如OpenTracing-Java视线中,NoopTracer就在其模块中。
可选的API元素
在一些OpenTracing实现中,可以实现一些工具类,通过Context.Context机制设置和获取活跃的Span。
参考:
https://github.com/opentracing-contrib/opentracing-specification-zh
更多推荐
所有评论(0)