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 }