otel 源码阅读(二)

这里主要讲一下 TracerProvider

先来看看New方法

func NewTracerProvider(opts ...TracerProviderOption) *TracerProvider {
    o := tracerProviderConfig{}

    o.spanLimits.parsePotentialEnvConfigs()  // 通过环境变量获取span的一些限制等
    for _, opt := range opts {  // 自定义配置
        o = opt.apply(o)
    }

    o = ensureValidTracerProviderConfig(o)  // 如果没有自定义配置,则使用默认配置

    tp := &TracerProvider{
        namedTracer: make(map[instrumentation.Library]*tracer),
        sampler:     o.sampler,  // 采样方法
        idGenerator: o.idGenerator,  // id生成器
        spanLimits:  o.spanLimits,  
        resource:    o.resource,  // 可以忽略
    }

    global.Info("TracerProvider created", "config", o)

    for _, sp := range o.processors {
        tp.RegisterSpanProcessor(sp)
    }

    return tp
}

可以看到tp里面重要的功能就这些:

  1. sampler取样器;
  2. idGenerator ID生成器,用于生成TraceID和SpanID
  3. spanProcessors 用于处理span

至于spanLimits等只是一个限制作用,没有什么大的用处。后续生成的Tracer、Span等都会用到tp中的上述三样功能。

除次之外,官方提供了WithSampler/WithIDGenerator等方法用于自定义自己的方法。

tp中的namedTracer,用于保存当前系统中的已经生成的Tracer信息,当下次调用的使用,同一个Tracer会返回map中已经存在的Tracer而不用再次生成。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容