追踪结构
追踪是以树形结构组织的遥测数据。追踪由 Span(例如,一个 Span 树)构成;存在一个根 Span,它可以有零个或多个分支,这些分支称为子 Span。每个子 Span 本身又可以是一个或多个子 Span 的父 Span,依此类推。
在 Tempo 和 TraceQL 查询语言的特定上下文中,Span 具有以下相关字段
- name: Span 名称
- duration: Span 结束时间与开始时间之间的差值
- status: 枚举类型:
{ok, error, unset}
。详情请参考 OTel Span 状态文档。 - kind: 枚举类型:
{server, client, producer, consumer, internal, unspecified}
。更多详情请参考 OTel Span 类型文档。 - 属性
前四个属性是内在属性(intrinsics)。它们是 Span 的基础。
属性是以键值对形式存在的自定义 Span 元数据。属性分为四种类型:Span 属性、资源属性、事件属性和链接属性。
Span 属性是键值对,包含可用于注释 Span 以携带其跟踪操作信息的元数据。例如,在电子商务应用中,如果一个 Span 跟踪用户向购物车添加商品的操作,则用户 ID、添加的商品 ID 和购物车 ID 可被捕获并作为 Span 属性附加到 Span 上。
资源属性代表生成 Span 的实体信息。例如,由 Kubernetes 部署在容器中运行的进程创建的 Span 可以链接一个资源,该资源指定集群名称、命名空间、Pod 和容器名称。资源属性是描述资源的相关元数据(键值对)。
事件属性代表 Span 持续期间的唯一时间点。更多信息,请参考关于 Span 事件的一切和 OTEL 文档中的Span 事件部分。
链接属性允许您查询 Span 中的链接数据。Span 链接将一个 Span 与一个或多个具有因果关系的其他 Span 相关联。更多关于 Span 链接的信息,请参考 Open Telemetry 项目文档中的Span 链接部分。
OpenTelemetry 规范定义了 Span 和资源的追踪语义约定(Trace Semantic Conventions)和资源语义约定(Resource Semantic Conventions)。语义 Span 属性是跨语言、框架和运行时共享的一组属性命名方案。详情请参考“追踪语义约定”和“资源语义约定”。