replace go.opencensus.io with opentelemetry in thumbnails

This commit is contained in:
A.Unger
2021-08-09 16:15:22 +02:00
parent f5c3b49d12
commit 2a60b6b933
3 changed files with 51 additions and 77 deletions
+1
View File
@@ -47,6 +47,7 @@ func NewService(opts ...Option) grpc.Service {
) )
thumbnail = svc.NewInstrument(thumbnail, options.Metrics) thumbnail = svc.NewInstrument(thumbnail, options.Metrics)
thumbnail = svc.NewLogging(thumbnail, options.Logger) thumbnail = svc.NewLogging(thumbnail, options.Logger)
thumbnail = svc.NewTracing(thumbnail)
} }
_ = proto.RegisterThumbnailServiceHandler( _ = proto.RegisterThumbnailServiceHandler(
+10 -8
View File
@@ -4,7 +4,8 @@ import (
"context" "context"
v0proto "github.com/owncloud/ocis/thumbnails/pkg/proto/v0" v0proto "github.com/owncloud/ocis/thumbnails/pkg/proto/v0"
"go.opencensus.io/trace" thumbnailsTracing "github.com/owncloud/ocis/thumbnails/pkg/tracing"
"go.opentelemetry.io/otel/attribute"
) )
// NewTracing returns a service that instruments traces. // NewTracing returns a service that instruments traces.
@@ -20,15 +21,16 @@ type tracing struct {
// GetThumbnail implements the ThumbnailServiceHandler interface. // GetThumbnail implements the ThumbnailServiceHandler interface.
func (t tracing) GetThumbnail(ctx context.Context, req *v0proto.GetThumbnailRequest, rsp *v0proto.GetThumbnailResponse) error { func (t tracing) GetThumbnail(ctx context.Context, req *v0proto.GetThumbnailRequest, rsp *v0proto.GetThumbnailResponse) error {
ctx, span := trace.StartSpan(ctx, "Thumbnails.GetThumbnail") tracer := thumbnailsTracing.TraceProvider.Tracer("thumbnails")
ctx, span := tracer.Start(ctx, "Thumbnails.GetThumbnail")
defer span.End() defer span.End()
span.Annotate([]trace.Attribute{ span.SetAttributes(
trace.StringAttribute("filepath", req.Filepath), attribute.KeyValue{"filepath", attribute.StringValue(req.Filepath)},
trace.StringAttribute("thumbnail_type", req.ThumbnailType.String()), attribute.KeyValue{"thumbnail_type", attribute.StringValue(req.ThumbnailType.String())},
trace.Int64Attribute("width", int64(req.Width)), attribute.KeyValue{"width", attribute.IntValue(int(req.Width))},
trace.Int64Attribute("height", int64(req.Height)), attribute.KeyValue{"height", attribute.IntValue(int(req.Height))},
}, "Execute Thumbnails.GetThumbnail handler") )
return t.next.GetThumbnail(ctx, req, rsp) return t.next.GetThumbnail(ctx, req, rsp)
} }
+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/thumbnails/pkg/config" "github.com/owncloud/ocis/thumbnails/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.TracerProvider
) )
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("thumbnails")),
),
)
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")