美文网首页
otel 源码阅读(二)

otel 源码阅读(二)

作者: 迪克dike | 来源:发表于2022-03-07 18:08 被阅读0次

    这里主要讲一下 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而不用再次生成。

    相关文章

      网友评论

          本文标题:otel 源码阅读(二)

          本文链接:https://www.haomeiwen.com/subject/xlpnrrtx.html