采样

采样是限制系统中生成的 Span 数量的过程。您应该使用的确切采样器取决于您的具体需求,但总的来说,您应该在跟踪的开始时做出决定,并允许采样决定传播到其他服务。

可以使用 Sampler 在 Tracer Provider 上进行设置,使用 WithSampler 选项,如下所示:

provider := trace.NewTracerProvider(
    trace.WithSampler(trace.AlwaysSample()),
)

AlwaysSampleNeverSample 是不言自明的。AlwaysSample 意味着所有 Span 都被采样,而 NeverSample 意味着没有 Span 被采样。当您刚开始时,或在开发环境中,请使用 AlwaysSample

其他采样器包括:

  • TraceIDRatioBased,它根据采样器给定的比例对一部分 Span 进行采样。如果您设置为 0.5,则所有 Span 的一半都会被采样。
  • ParentBased 是一个采样器装饰器,它的行为根据 Span 的父级而有所不同。如果 Span 没有父级,则使用装饰后的采样器根据 Span 的父级来做出采样决定。默认情况下,ParentBased 会对有被采样的父级的 Span 进行采样,而不会对其父级未被采样的 Span 进行采样。

默认情况下,Tracer Provider 使用 ParentBased 采样器,并附带 AlwaysSample 采样器。

在生产环境中,请考虑使用 ParentBased 采样器并附带 TraceIDRatioBased 采样器。