菜单
文档breadcrumb arrow Grafana Tempobreadcrumb arrow TraceQLbreadcrumb arrow 跟踪结构和 TraceQL
开源

跟踪结构和 TraceQL

TraceQL 的语法和语义受到了 PromQL 和 LogQL 的启发,但在搜索 Span 和跟踪方面存在本质差异。

跟踪结构

跟踪是以树状结构组织的遥测数据。跟踪由 Span 组成(例如,一个 Span 树);有一个根 Span,它可以有零个到多个分支,称为子 Span。每个子 Span 本身又可以是零个或多个子 Span 的父 Span,依此类推。

Trace_and_spans_in_tree_structure

在 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 和资源的语义属性。语义 Span 属性是一组跨语言、框架和运行时共享的属性命名方案。更多详情,请参阅跟踪语义约定资源语义约定

TraceQL 查询

TraceQL 的目的是搜索或查询 Span。查询返回一组 Span,也称为 Span 集(spanset)。

TraceQL 查询可以根据以下条件选择跟踪:

  • Span 属性、时间和持续时间
  • Span 之间的结构关系
  • 跟踪中 Span 的聚合数据

与 PromQL 和 LogQL 一样,查询结构是一系列操作(过滤器和聚合器)的管道。查询表达式一次评估一个跟踪,从结果中选择或丢弃 Span。在查询管道的每个阶段,为跟踪选择的 Span 被分组到一个 Span 集(set of spans)中。相关的跟踪也会被返回。查询结果是所有评估过的跟踪的 Span 集(及其相关的跟踪)。

最简单的查询是这个:

{ }

花括号包含选择/过滤条件。理论上,每个符合这些条件的 Span(及其所属的跟踪)都会被查询返回。在前面的示例中,由于没有过滤条件,所有 Span 都匹配,因此连同其关联的跟踪一起返回。

实际上,查询是针对定义的时间间隔执行的,可以是相对的(例如,最近 3 小时)或绝对的(例如,从 X 日期时间到 Y 日期时间)。查询响应还受跟踪数量(Limit)和每个 Span 集中的 Span 数量(Span Limit)的限制。

TraceQL in Grafana

  1. TraceQL 查询编辑器
  2. 查询选项:LimitSpan Limit表格格式(Traces 或 Spans)。
  3. 跟踪(按跟踪 ID)。NameService 列显示跟踪的根 Span 名称和关联的服务。
  4. 与跟踪关联的 Span