0%

微服务 Trace

Spection Trace 语义

Trace

代表一个调用链.

通常, 一个 Trace 可以被理解为一系列span 组成的有向无环图(DAG), span 之间的边称为 Reference.

Span

Span 表示一个跨进程的 RPC 或者进程内部的一个过程.

每个span 可以包含一些状态:
operate_name
start_timestampe
end_timestamp
Tags: 一系列 kv 集合
Logs: 一系列 kv 集合,并且携带时间戳
SpanContext:
Reference: 通过 SpanContext 关联其他 Span

SpanContext

SpanContext 封装了一个可以用来指向特定 Span 的状态,用于在进程间(内)传递. 通过在进程间传递,在分布式环境中构建一个DAG图.

span 必须去提供方法访问 SpanContext,SpanContext 代表跨越进程边界,传递到下级Span的状态.(包含 trace_id span_id sampled 元组).

SpanContext 在跨越进程边界,和在追踪图中创建边界的时候会使用.

Logs

每个Span可以进行多次Logs操作,每一次Logs操作, 都需要一个带时间戳的时间名称, 以及可选的任意大小的存储结构.
Standard LogKeys

Tags

每个 Span 可以有多个键值对(key:value)形式的Tags, Tags是没有时间戳的,支持简单的对Span进行注解和补充.

Standard Tags

Baggage

Baggage 是存储在 SpanContext 中的一个键值对(SpanContext)集合. 它会在一条追踪链路上的所有span内全局传输. 在这种情况下, Baggage会随着Trace一同传播.(Baggage可理解为随着trace运行过程传送的行李).

Baggage 拥有强大功能,也会有很大的消耗. 由于Baggage的全局传输,如果包含的数量量太大,或者元素太多,它将降低系统的吞吐量或增加RPC的延迟.

Reference

Reference 有两种类型:

  • ChildOf
  • FollowsFrom

OpenTracing语义标准
The OpenTracing Semantic Specification
The OpenTracing Semantic Specification-github

欢迎关注我的其它发布渠道