轨迹采样

本文档介绍了抽样的概念,即“抽样” span 的数据发送到 Cloud Trace。当一个 span 上 发送到 Cloud Trace,然后对该 span 进行采样。当每个 跟踪记录中的 span,则跟踪记录完整。但经常跟踪 缺少 span,因为分布式跟踪中的每个插桩组件 系统会自动决定是否记录 处理对象。

虽然每个组件都会自行决定要处理的跨度是否要进行抽样,但该决定可能会受到父级的抽样决定的影响。例如,假设每个组件都有一条规则, "如果对父级 span 进行采样,则对当前 span 采样;否则 “示例 50% 的 span”在这种情况下,以下为真:

  • 根 span 决定对跟踪记录中的所有 span 是否进行采样。
  • 在对根 span 采样时,对跟踪记录中的所有 span 进行采样。因此,轨迹已完成。

组件可以使用上下文将其抽样决策传递给子项。例如,在万维网联盟 (W3C) traceparent 标头中,sampled 标志会存储父级的抽样决策。

请勿将采样与上下文传播混淆。抽样是指组件是否记录有关跨度的相关数据。上下文传播是指是否将有关 span 的信息(例如 span ID)传递给子组件。

抽样策略

采样决策可以基于头部或尾部。 在基于头的采样中,当处理该跨度的组件收到请求时,系统会做出采样决策。在基于尾部的采样中,系统会延迟采样决策,直到整个轨迹可用为止。

您可能会遇到“100% 抽样”这样的短语文档 分布式跟踪系统此字词可能适用于轨迹或组件。如果应用于跟踪记录,则意味着已对所有 span 采样, (等同于跟踪完成)应用于组件时,表示该组件会对其处理的每个跨度进行采样。

头部采样

基于头的采样器通常配置为始终采样跨度或使用概率采样策略:

  • 使用始终采样配置时,所有服务跨度且可以写入轨迹数据的组件都会对其处理的跨度进行采样。理想情况下,所有轨迹都已完成,因此您拥有排查失败问题所需的信息。这种类型的配置可能会导致您超出配额, 或存储空间费用上限

  • 使用概率抽样时,系统不会抽取所有跨度。 此方法的实际行为取决于组件的实现方式。在某些实现中,所有 span 相同的采样概率。在其他情况下, 父项会影响 span 是否采样。

跟踪记录可能不包含所有 span。这是意料之中的, 概率抽样,也可能是因为配额或部分 处理请求,但不对 span 进行采样。

尾部抽样

Cloud Trace 不支持基于尾部的抽样;必须在向 Cloud Trace 发送数据的组件中做出抽样决策。

如果您想使用基于尾部的抽样,则可以使用中间服务器,该服务器会接收跟踪信息,并在做出抽样决策后将数据转发到 Cloud Trace。例如,您可以将 OpenTelemetry Collector尾随抽样处理器搭配使用,以做出延迟抽样决策。

如果您打算使用尾部抽样,请考虑以下事项:

  • 在做出采样决策之前,您必须将所有 span 存储在跟踪记录中。 因此,您可能需要大量的临时存储空间 或产生其他开销
  • 一般来说,所有可以为轨迹生成 span 的组件都需要协调。通常,使用 OpenTelemetry 的开发者会将具有相同轨迹 ID 的所有跨度路由到同一采集器。

抽样和 Google Cloud 服务

每项 Google Cloud 服务都会自行做出抽样决定,并且并非所有 Google Cloud 服务都会进行抽样。也就是说,服务可能永远不会向 Cloud Trace 发送数据。

如果某项 Google Cloud 服务支持采样,则该服务通常 实现以下各项:

  • 默认采样率。
  • 一种机制,用于将父级的抽样决策用作是否要对跨度进行抽样的提示。
  • 最大采样率。

如需请求 Google Cloud 服务添加对抽样的支持,请执行以下操作: 使用 Google 问题跟踪器

后续步骤