replace opencensus everywhere

This commit is contained in:
A.Unger
2021-08-09 17:28:00 +02:00
parent fe530e9a27
commit ac087d0dae
8 changed files with 287 additions and 510 deletions
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/glauth/pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/log"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("glauth")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/graph-explorer/pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/log"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("graph-explorer")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/graph/pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/log"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("graph")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+9 -14
View File
@@ -4,7 +4,9 @@ import (
"net/http" "net/http"
"strings" "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. // 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 func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 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() defer span.End()
r = r.WithContext(ctx) 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.HasPrefix(r.URL.Path, "/signin/v1/static/") {
if strings.HasSuffix(r.URL.Path, "/") { if strings.HasSuffix(r.URL.Path, "/") {
// but no listing of folders // but no listing of folders
span.AddAttributes(trace.StringAttribute("asset not found", r.URL.Path)) span.SetAttributes(attribute.KeyValue{Key: "path", Value: attribute.StringValue(r.URL.Path)})
span.SetStatus(trace.Status{ span.SetStatus(codes.Error, "asset not found")
Code: 1,
Message: "asset not found",
})
http.NotFound(w, r) http.NotFound(w, r)
} else { } else {
r.URL.Path = strings.Replace(r.URL.Path, "/signin/v1/static/", "/signin/v1/identifier/static/", 1) 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) static.ServeHTTP(w, r)
} }
return return
} }
span.AddAttributes(trace.StringAttribute("served", r.URL.Path)) span.SetAttributes(attribute.KeyValue{Key: "path", Value: attribute.StringValue(r.URL.Path)})
span.SetStatus(trace.Status{ span.SetStatus(codes.Ok, "ok")
Code: 0,
Message: "ok",
})
next.ServeHTTP(w, r)
}) })
} }
} }
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/ocis-pkg/log"
"github.com/owncloud/ocis/onlyoffice/pkg/config" "github.com/owncloud/ocis/onlyoffice/pkg/config"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("onlyoffice")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+38 -82
View File
@@ -1,102 +1,58 @@
package tracing package tracing
import ( 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/ocis-pkg/log"
"github.com/owncloud/ocis/settings/pkg/config" "github.com/owncloud/ocis/settings/pkg/config"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil { // set package level trace provider and propagator.
logger.Error(). TraceProvider = sdktrace.NewTracerProvider(
Err(err). sdktrace.WithBatcher(exp),
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithResource(resource.NewWithAttributes(
Str("collector", cfg.Tracing.Collector). semconv.SchemaURL,
Msg("Failed to create jaeger tracing") semconv.ServiceNameKey.String("settings")),
),
)
return err Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
case "agent":
trace.RegisterExporter(exporter) fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/ocis-pkg/log"
"github.com/owncloud/ocis/web/pkg/config" "github.com/owncloud/ocis/web/pkg/config"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("web")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")
+40 -69
View File
@@ -1,87 +1,58 @@
package tracing package tracing
import ( 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/ocis-pkg/log"
"github.com/owncloud/ocis/webdav/pkg/config" "github.com/owncloud/ocis/webdav/pkg/config"
"go.opencensus.io/stats/view" "go.opentelemetry.io/otel/exporters/jaeger"
"go.opencensus.io/trace" "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 { func Configure(cfg *config.Config, logger log.Logger) error {
if cfg.Tracing.Enabled { if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t { 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": case "jaeger":
exporter, err := jaeger.NewExporter( {
jaeger.Options{ exp, err := jaeger.New(
AgentEndpoint: cfg.Tracing.Endpoint, jaeger.WithCollectorEndpoint(
CollectorEndpoint: cfg.Tracing.Collector, jaeger.WithEndpoint(cfg.Tracing.Collector),
Process: jaeger.Process{ ),
ServiceName: cfg.Tracing.Service, )
}, if err != nil {
}, panic(err)
) }
if err != nil {
logger.Error(). // set package level trace provider and propagator.
Err(err). TraceProvider = sdktrace.NewTracerProvider(
Str("endpoint", cfg.Tracing.Endpoint). sdktrace.WithBatcher(exp),
Str("collector", cfg.Tracing.Collector). sdktrace.WithResource(resource.NewWithAttributes(
Msg("Failed to create jaeger tracing") semconv.SchemaURL,
return err semconv.ServiceNameKey.String("webdav")),
),
)
Propagator = propagation.NewCompositeTextMapPropagator(
propagation.Baggage{},
propagation.TraceContext{},
)
} }
trace.RegisterExporter(exporter) case "agent":
fallthrough
case "zipkin": case "zipkin":
endpoint, err := openzipkin.NewEndpoint( fallthrough
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)
default: default:
logger.Warn(). logger.Warn().Str("type", t).Msg("Unknown tracing backend")
Str("type", t).
Msg("Unknown tracing backend")
} }
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else { } else {
logger.Debug(). logger.Debug().
Msg("Tracing is not enabled") Msg("Tracing is not enabled")