采样

采样(Sampling) 是一种限制系统生成的 span 数量的机制,你应根据自身的需求选择合适的采样器(Sampler),但是一般建议在一个链路(trace)开始时就做出采样决策,并将该决策传递到其他服务中。

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

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

AlwaysSampleNeverSample 顾名思义,AlwaysSample 表示对每个 span 都会进行采样,而 NeverSample 表示不对任何 span 进行采样。

其他采样器还包括:

  • TraceIDRatioBased:它按一定比例采样 span,这个比例根据提供给采样器的数值决定。例如设置为 0.5 表示采样 50% 的 span。
  • ParentBased: 是一种采样器装饰器,它的行为会根据当前 span 是否有父 span,以及父 span 的采样状态来决定。如果 span 没有父级,那么就使用传入的默认采样器来决定是否采样;如果有父 span,默认情况下:若父 span 被采样了,则当前 span 也被采样;若父 span 没被采样,则当前 span 也不会被采样。

默认情况下,Tracer Provider 将 ParentBased 采样器和 AlwaysSample 采样器结合在一起使用。

在生产环境中,建议将 ParentBased 采样器与 TraceIDRatioBased 采样器搭配使用。