From ac087d0daee4f1605e3508238421c9f7d439eccb Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Mon, 9 Aug 2021 17:28:00 +0200 Subject: [PATCH] replace opencensus everywhere --- glauth/pkg/tracing/tracing.go | 109 +++++++++-------------- graph-explorer/pkg/tracing/tracing.go | 109 +++++++++-------------- graph/pkg/tracing/tracing.go | 109 +++++++++-------------- idp/pkg/middleware/static.go | 23 ++--- onlyoffice/pkg/tracing/tracing.go | 109 +++++++++-------------- settings/pkg/tracing/tracing.go | 120 ++++++++------------------ web/pkg/tracing/tracing.go | 109 +++++++++-------------- webdav/pkg/tracing/tracing.go | 109 +++++++++-------------- 8 files changed, 287 insertions(+), 510 deletions(-) diff --git a/glauth/pkg/tracing/tracing.go b/glauth/pkg/tracing/tracing.go index 74034fb61..6778a0127 100644 --- a/glauth/pkg/tracing/tracing.go +++ b/glauth/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/glauth/pkg/config" "github.com/owncloud/ocis/ocis-pkg/log" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("glauth")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/graph-explorer/pkg/tracing/tracing.go b/graph-explorer/pkg/tracing/tracing.go index 3ee186c18..9f9318e0f 100644 --- a/graph-explorer/pkg/tracing/tracing.go +++ b/graph-explorer/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/graph-explorer/pkg/config" "github.com/owncloud/ocis/ocis-pkg/log" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("graph-explorer")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/graph/pkg/tracing/tracing.go b/graph/pkg/tracing/tracing.go index 124d9238b..8d8701761 100644 --- a/graph/pkg/tracing/tracing.go +++ b/graph/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/graph/pkg/config" "github.com/owncloud/ocis/ocis-pkg/log" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("graph")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/idp/pkg/middleware/static.go b/idp/pkg/middleware/static.go index eeff356c5..e053f248a 100644 --- a/idp/pkg/middleware/static.go +++ b/idp/pkg/middleware/static.go @@ -4,7 +4,9 @@ import ( "net/http" "strings" - "go.opencensus.io/trace" + idpTracing "github.com/owncloud/ocis/idp/pkg/tracing" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" ) // Static is a middleware that serves static assets. @@ -22,7 +24,7 @@ func Static(root string, fs http.FileSystem) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx, span := trace.StartSpan(r.Context(), "serve static asset") + ctx, span := idpTracing.TraceProvider.Tracer("idp").Start(r.Context(), "serve static asset") defer span.End() r = r.WithContext(ctx) @@ -30,25 +32,18 @@ func Static(root string, fs http.FileSystem) func(http.Handler) http.Handler { if strings.HasPrefix(r.URL.Path, "/signin/v1/static/") { if strings.HasSuffix(r.URL.Path, "/") { // but no listing of folders - span.AddAttributes(trace.StringAttribute("asset not found", r.URL.Path)) - span.SetStatus(trace.Status{ - Code: 1, - Message: "asset not found", - }) + span.SetAttributes(attribute.KeyValue{Key: "path", Value: attribute.StringValue(r.URL.Path)}) + span.SetStatus(codes.Error, "asset not found") http.NotFound(w, r) } else { r.URL.Path = strings.Replace(r.URL.Path, "/signin/v1/static/", "/signin/v1/identifier/static/", 1) - span.AddAttributes(trace.StringAttribute("served", r.URL.Path)) + span.SetAttributes(attribute.KeyValue{Key: "server", Value: attribute.StringValue(r.URL.Path)}) static.ServeHTTP(w, r) } return } - span.AddAttributes(trace.StringAttribute("served", r.URL.Path)) - span.SetStatus(trace.Status{ - Code: 0, - Message: "ok", - }) - next.ServeHTTP(w, r) + span.SetAttributes(attribute.KeyValue{Key: "path", Value: attribute.StringValue(r.URL.Path)}) + span.SetStatus(codes.Ok, "ok") }) } } diff --git a/onlyoffice/pkg/tracing/tracing.go b/onlyoffice/pkg/tracing/tracing.go index 5310e3951..96cd3d890 100644 --- a/onlyoffice/pkg/tracing/tracing.go +++ b/onlyoffice/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/onlyoffice/pkg/config" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("onlyoffice")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/settings/pkg/tracing/tracing.go b/settings/pkg/tracing/tracing.go index 3cb6c446a..7d15f2efb 100644 --- a/settings/pkg/tracing/tracing.go +++ b/settings/pkg/tracing/tracing.go @@ -1,102 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/settings/pkg/config" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) -// Configure tracing from config func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - - return err - } - - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) - case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("settings")), + ), + ) - return err + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - - trace.RegisterExporter(exporter) - + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - - return err - } - - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - - trace.RegisterExporter(exporter) - + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/web/pkg/tracing/tracing.go b/web/pkg/tracing/tracing.go index 3a8f64d04..7e15196b6 100644 --- a/web/pkg/tracing/tracing.go +++ b/web/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/web/pkg/config" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("web")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled") diff --git a/webdav/pkg/tracing/tracing.go b/webdav/pkg/tracing/tracing.go index ab66129f6..d0aaf0879 100644 --- a/webdav/pkg/tracing/tracing.go +++ b/webdav/pkg/tracing/tracing.go @@ -1,87 +1,58 @@ package tracing import ( - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/ocagent" - "contrib.go.opencensus.io/exporter/zipkin" - openzipkin "github.com/openzipkin/zipkin-go" - zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/webdav/pkg/config" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + // Propagator ensures the entire module uses the same trace propagation strategy. + Propagator propagation.TextMapPropagator + + // TraceProvider is the global trace provider for the proxy service. + TraceProvider = sdktrace.NewTracerProvider() ) func Configure(cfg *config.Config, logger log.Logger) error { if cfg.Tracing.Enabled { switch t := cfg.Tracing.Type; t { - case "agent": - exporter, err := ocagent.NewExporter( - ocagent.WithReconnectionPeriod(5*time.Second), - ocagent.WithAddress(cfg.Tracing.Endpoint), - ocagent.WithServiceName(cfg.Tracing.Service), - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create agent tracing") - return err - } - trace.RegisterExporter(exporter) - view.RegisterExporter(exporter) case "jaeger": - exporter, err := jaeger.NewExporter( - jaeger.Options{ - AgentEndpoint: cfg.Tracing.Endpoint, - CollectorEndpoint: cfg.Tracing.Collector, - Process: jaeger.Process{ - ServiceName: cfg.Tracing.Service, - }, - }, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create jaeger tracing") - return err + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(cfg.Tracing.Collector), + ), + ) + if err != nil { + panic(err) + } + + // set package level trace provider and propagator. + TraceProvider = sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("webdav")), + ), + ) + + Propagator = propagation.NewCompositeTextMapPropagator( + propagation.Baggage{}, + propagation.TraceContext{}, + ) } - trace.RegisterExporter(exporter) + case "agent": + fallthrough case "zipkin": - endpoint, err := openzipkin.NewEndpoint( - cfg.Tracing.Service, - cfg.Tracing.Endpoint, - ) - if err != nil { - logger.Error(). - Err(err). - Str("endpoint", cfg.Tracing.Endpoint). - Str("collector", cfg.Tracing.Collector). - Msg("Failed to create zipkin tracing") - return err - } - exporter := zipkin.NewExporter( - zipkinhttp.NewReporter( - cfg.Tracing.Collector, - ), - endpoint, - ) - trace.RegisterExporter(exporter) + fallthrough default: - logger.Warn(). - Str("type", t). - Msg("Unknown tracing backend") + logger.Warn().Str("type", t).Msg("Unknown tracing backend") } - trace.ApplyConfig( - trace.Config{ - DefaultSampler: trace.AlwaysSample(), - }, - ) } else { logger.Debug(). Msg("Tracing is not enabled")