github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/tracing/tracer.go (about)

     1  package tracing
     2  
     3  import (
     4  	"github.com/opentracing/opentracing-go"
     5  	"github.com/pkg/errors"
     6  	"github.com/rs/zerolog"
     7  	"github.com/uber/jaeger-client-go/config"
     8  	"github.com/uber/jaeger-client-go/rpcmetrics"
     9  	"github.com/uber/jaeger-lib/metrics"
    10  	jprom "github.com/uber/jaeger-lib/metrics/prometheus"
    11  	ddconfig "github.com/unionj-cloud/go-doudou/framework/internal/config"
    12  	logger "github.com/unionj-cloud/go-doudou/toolkit/zlogger"
    13  	"github.com/unionj-cloud/go-doudou/toolkit/stringutils"
    14  	"io"
    15  )
    16  
    17  // Init returns an instance of Jaeger Tracer.
    18  func Init() (opentracing.Tracer, io.Closer) {
    19  	cfg := &config.Configuration{
    20  		Sampler:  &config.SamplerConfig{},
    21  		Reporter: &config.ReporterConfig{},
    22  	}
    23  	service := ddconfig.DefaultGddServiceName
    24  	if stringutils.IsNotEmpty(ddconfig.GddServiceName.Load()) {
    25  		service = ddconfig.GddServiceName.Load()
    26  	}
    27  	cfg.ServiceName = service
    28  	cfg.Sampler.Type = "const"
    29  	cfg.Sampler.Param = 1
    30  	cfg.Reporter.LogSpans = true
    31  	_, err := cfg.FromEnv()
    32  	if err != nil {
    33  		logger.Panic().Err(errors.Wrap(err, "[go-doudou] cannot parse Jaeger env vars")).Msg("")
    34  	}
    35  	jaegerLogger := jaegerLoggerAdapter{logger: logger.Logger}
    36  	metricsRoot := ddconfig.DefaultGddTracingMetricsRoot
    37  	if stringutils.IsNotEmpty(ddconfig.GddTracingMetricsRoot.Load()) {
    38  		metricsRoot = ddconfig.GddTracingMetricsRoot.Load()
    39  	}
    40  	metricsFactory := jprom.New().Namespace(metrics.NSOptions{Name: metricsRoot, Tags: nil})
    41  	tracer, closer, err := cfg.NewTracer(
    42  		config.Logger(jaegerLogger),
    43  		config.Metrics(metricsFactory),
    44  		config.Observer(rpcmetrics.NewObserver(metricsFactory, rpcmetrics.DefaultNameNormalizer)),
    45  	)
    46  	if err != nil {
    47  		logger.Panic().Err(errors.Wrap(err, "[go-doudou] cannot initialize Jaeger Tracer")).Msg("")
    48  	}
    49  	return tracer, closer
    50  }
    51  
    52  type jaegerLoggerAdapter struct {
    53  	logger zerolog.Logger
    54  }
    55  
    56  func (l jaegerLoggerAdapter) Error(msg string) {
    57  	l.logger.Error().Msg(msg)
    58  }
    59  
    60  func (l jaegerLoggerAdapter) Infof(msg string, args ...interface{}) {
    61  	l.logger.Info().Msgf(msg, args...)
    62  }
    63  
    64  func (l jaegerLoggerAdapter) Debugf(msg string, args ...interface{}) {
    65  	l.logger.Debug().Msgf(msg, args...)
    66  }