diff --git a/cmd/all-in-one/main.go b/cmd/all-in-one/main.go index 89297fdde2e..34d86f534ce 100644 --- a/cmd/all-in-one/main.go +++ b/cmd/all-in-one/main.go @@ -24,7 +24,6 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - "go.opentelemetry.io/otel" _ "go.uber.org/automaxprocs" "go.uber.org/zap" @@ -105,7 +104,6 @@ by default uses only in-memory database.`, if err != nil { logger.Fatal("Failed to initialize tracer", zap.Error(err)) } - otel.SetTracerProvider(tracer.OTEL) storageFactory.InitFromViper(v, logger) if err := storageFactory.Initialize(metricsFactory, logger); err != nil { diff --git a/cmd/query/app/flags.go b/cmd/query/app/flags.go index faacdb5593b..10c68c5adf5 100644 --- a/cmd/query/app/flags.go +++ b/cmd/query/app/flags.go @@ -47,6 +47,7 @@ const ( queryTokenPropagation = "query.bearer-token-propagation" queryAdditionalHeaders = "query.additional-headers" queryMaxClockSkewAdjust = "query.max-clock-skew-adjustment" + queryEnableTracing = "query.enable-tracing" ) var tlsGRPCFlagsConfig = tlscfg.ServerFlagsConfig{ @@ -85,6 +86,8 @@ type QueryOptions struct { MaxClockSkewAdjust time.Duration // Tenancy configures tenancy for query Tenancy tenancy.Options + // EnableTracing determines whether traces will be emitted by jaeger-query. + EnableTracing bool } // AddFlags adds flags for QueryOptions @@ -98,6 +101,7 @@ func AddFlags(flagSet *flag.FlagSet) { flagSet.String(queryUIConfig, "", "The path to the UI configuration file in JSON format") flagSet.Bool(queryTokenPropagation, false, "Allow propagation of bearer token to be used by storage plugins") flagSet.Duration(queryMaxClockSkewAdjust, 0, "The maximum delta by which span timestamps may be adjusted in the UI due to clock skew; set to 0s to disable clock skew adjustments") + flagSet.Bool(queryEnableTracing, false, "Enables emitting jaeger-query traces") tlsGRPCFlagsConfig.AddFlags(flagSet) tlsHTTPFlagsConfig.AddFlags(flagSet) } @@ -131,6 +135,7 @@ func (qOpts *QueryOptions) InitFromViper(v *viper.Viper, logger *zap.Logger) (*Q qOpts.AdditionalHeaders = headers } qOpts.Tenancy = tenancy.InitFromViper(v) + qOpts.EnableTracing = v.GetBool(queryEnableTracing) return qOpts, nil } diff --git a/cmd/query/main.go b/cmd/query/main.go index 0442dcd06a3..e43d0979346 100644 --- a/cmd/query/main.go +++ b/cmd/query/main.go @@ -23,7 +23,6 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - "go.opentelemetry.io/otel" _ "go.uber.org/automaxprocs" "go.uber.org/zap" @@ -73,15 +72,20 @@ func main() { baseFactory := svc.MetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}) metricsFactory := baseFactory.Namespace(metrics.NSOptions{Name: "query"}) version.NewInfoMetrics(metricsFactory) - jtracer, err := jtracer.New("jaeger-query") - if err != nil { - logger.Fatal("Failed to create tracer:", zap.Error(err)) - } - otel.SetTracerProvider(jtracer.OTEL) + queryOpts, err := new(app.QueryOptions).InitFromViper(v, logger) if err != nil { logger.Fatal("Failed to configure query service", zap.Error(err)) } + + jt := jtracer.NoOp() + if queryOpts.EnableTracing { + jt, err = jtracer.New("jaeger-query") + if err != nil { + logger.Fatal("Failed to create tracer", zap.Error(err)) + } + } + // TODO: Need to figure out set enable/disable propagation on storage plugins. v.Set(bearertoken.StoragePropagationKey, queryOpts.BearerTokenPropagation) storageFactory.InitFromViper(v, logger) @@ -108,7 +112,7 @@ func main() { dependencyReader, *queryServiceOptions) tm := tenancy.NewManager(&queryOpts.Tenancy) - server, err := app.NewServer(svc.Logger, queryService, metricsQueryService, queryOpts, tm, jtracer) + server, err := app.NewServer(svc.Logger, queryService, metricsQueryService, queryOpts, tm, jt) if err != nil { logger.Fatal("Failed to create server", zap.Error(err)) } @@ -128,7 +132,7 @@ func main() { if err := storageFactory.Close(); err != nil { logger.Error("Failed to close storage factory", zap.Error(err)) } - if err = jtracer.Close(context.Background()); err != nil { + if err = jt.Close(context.Background()); err != nil { logger.Fatal("Error shutting down tracer provider", zap.Error(err)) } }) diff --git a/examples/memstore-plugin/main.go b/examples/memstore-plugin/main.go index 36a9b31bb07..d8b7dcd4337 100644 --- a/examples/memstore-plugin/main.go +++ b/examples/memstore-plugin/main.go @@ -23,7 +23,6 @@ import ( "github.com/hashicorp/go-plugin" "github.com/spf13/viper" "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" - "go.opentelemetry.io/otel" googleGRPC "google.golang.org/grpc" "github.com/jaegertracing/jaeger/pkg/jtracer" @@ -62,7 +61,6 @@ func main() { panic(fmt.Errorf("failed to initialize tracer: %w", err)) } defer tracer.Close(context.Background()) - otel.SetTracerProvider(tracer.OTEL) memStorePlugin := grpcMemory.NewStoragePlugin(memory.NewStore(), memory.NewStore()) service := &shared.PluginServices{ diff --git a/pkg/jtracer/jtracer.go b/pkg/jtracer/jtracer.go index eca142b543b..103e208a676 100644 --- a/pkg/jtracer/jtracer.go +++ b/pkg/jtracer/jtracer.go @@ -88,6 +88,8 @@ func initOTEL(ctx context.Context, svc string) (*sdktrace.TracerProvider, error) )) }) + otel.SetTracerProvider(tracerProvider) + return tracerProvider, nil }