Skip to content

Commit

Permalink
Merge pull request #2602 from cmaf/upgrade-opentelemetry
Browse files Browse the repository at this point in the history
vendor: update OpenTelemetry
  • Loading branch information
jodh-intel authored Nov 5, 2021
2 parents b5cfb73 + d17100a commit 4be2c8b
Show file tree
Hide file tree
Showing 269 changed files with 20,579 additions and 12,138 deletions.
17 changes: 11 additions & 6 deletions src/runtime/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,22 @@ require (
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8
github.com/sirupsen/logrus v1.8.1
github.com/smartystreets/goconvey v1.6.4 // indirect
github.com/stretchr/testify v1.6.1
github.com/stretchr/testify v1.7.0
github.com/urfave/cli v1.22.2
github.com/vishvananda/netlink v1.1.1-0.20210924202909-187053b97868
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae
go.opentelemetry.io/otel v0.15.0
go.opentelemetry.io/otel/exporters/trace/jaeger v0.15.0
go.opentelemetry.io/otel/sdk v0.15.0
go.opencensus.io v0.23.0 // indirect
go.opentelemetry.io/otel v1.0.0
go.opentelemetry.io/otel/exporters/jaeger v1.0.0
go.opentelemetry.io/otel/sdk v1.0.0
go.opentelemetry.io/otel/trace v1.0.0
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
google.golang.org/grpc v1.33.2
golang.org/x/text v0.3.5 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb // indirect
google.golang.org/grpc v1.36.0
k8s.io/apimachinery v0.20.6
k8s.io/cri-api v0.20.6
)
Expand Down
51 changes: 27 additions & 24 deletions src/runtime/go.sum

Large diffs are not rendered by default.

93 changes: 37 additions & 56 deletions src/runtime/pkg/katautils/katatrace/tracing.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ import (

"github.com/sirupsen/logrus"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/trace/jaeger"
"go.opentelemetry.io/otel/label"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/propagation"
export "go.opentelemetry.io/otel/sdk/export/trace"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"go.opentelemetry.io/otel/trace"
otelTrace "go.opentelemetry.io/otel/trace"
)
Expand All @@ -26,10 +27,10 @@ import (
// https: //github.com/kata-containers/tests/blob/master/tracing/tracing-test.sh
type kataSpanExporter struct{}

var _ export.SpanExporter = (*kataSpanExporter)(nil)
var _ sdktrace.SpanExporter = (*kataSpanExporter)(nil)

// ExportSpans exports SpanData to Jaeger.
func (e *kataSpanExporter) ExportSpans(ctx context.Context, spans []*export.SpanData) error {
func (e *kataSpanExporter) ExportSpans(ctx context.Context, spans []sdktrace.ReadOnlySpan) error {
for _, span := range spans {
kataTraceLogger.Tracef("Reporting span %+v", span)
}
Expand All @@ -40,9 +41,9 @@ func (e *kataSpanExporter) Shutdown(ctx context.Context) error {
return nil
}

// tracerCloser contains a copy of the closer returned by createTracer() which
// is used by stopTracing().
var tracerCloser func()
// tp is the trace provider created in CreateTracer() and used in StopTracing()
// to flush and shutdown all spans.
var tp *sdktrace.TracerProvider

var kataTraceLogger = logrus.NewEntry(logrus.New())

Expand All @@ -62,10 +63,10 @@ type JaegerConfig struct {
}

// CreateTracer create a tracer
func CreateTracer(name string, config *JaegerConfig) (func(), error) {
func CreateTracer(name string, config *JaegerConfig) (*sdktrace.TracerProvider, error) {
if !tracing {
otel.SetTracerProvider(trace.NewNoopTracerProvider())
return func() {}, nil
return nil, nil
}

// build kata exporter to log reporting span records
Expand All @@ -77,37 +78,32 @@ func CreateTracer(name string, config *JaegerConfig) (func(), error) {
collectorEndpoint = "http://localhost:14268/api/traces"
}

jaegerExporter, err := jaeger.NewRawExporter(
jaeger.WithCollectorEndpoint(collectorEndpoint,
jaegerExporter, err := jaeger.New(
jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(collectorEndpoint),
jaeger.WithUsername(config.JaegerUser),
jaeger.WithPassword(config.JaegerPassword),
), jaeger.WithProcess(jaeger.Process{
ServiceName: name,
Tags: []label.KeyValue{
label.String("exporter", "jaeger"),
label.String("lib", "opentelemetry"),
},
}))
),
)

if err != nil {
return nil, err
}

// build tracer provider, that combining both jaeger exporter and kata exporter.
tp := sdktrace.NewTracerProvider(
sdktrace.WithConfig(
sdktrace.Config{
DefaultSampler: sdktrace.AlwaysSample(),
},
),
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithSyncer(kataExporter),
sdktrace.WithSyncer(jaegerExporter),
sdktrace.WithResource(resource.NewSchemaless(
semconv.ServiceNameKey.String(name),
attribute.String("exporter", "jaeger"),
attribute.String("lib", "opentelemetry"),
)),
)

tracerCloser = jaegerExporter.Flush

otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
return tracerCloser, nil
return tp, nil
}

// StopTracing ends all tracing, reporting the spans to the collector.
Expand All @@ -122,9 +118,8 @@ func StopTracing(ctx context.Context) {
}

// report all possible spans to the collector
if tracerCloser != nil {
tracerCloser()
}
tp.ForceFlush(ctx)
tp.Shutdown(ctx)
}

// Trace creates a new tracing span based on the specified name and parent context.
Expand All @@ -139,12 +134,12 @@ func Trace(parent context.Context, logger *logrus.Entry, name string, tags ...ma
parent = context.Background()
}

var otelTags []label.KeyValue
var otelTags []attribute.KeyValue
// do not append tags if tracing is disabled
if tracing {
for _, tagSet := range tags {
for k, v := range tagSet {
otelTags = append(otelTags, label.Key(k).String(v))
otelTags = append(otelTags, attribute.Key(k).String(v))
}
}
}
Expand All @@ -170,45 +165,31 @@ func addTag(span otelTrace.Span, key string, value interface{}) {
return
}
if value == nil {
span.SetAttributes(label.String(key, "nil"))
span.SetAttributes(attribute.String(key, "nil"))
return
}

switch value := value.(type) {
case string:
span.SetAttributes(label.String(key, value))
span.SetAttributes(attribute.String(key, value))
case bool:
span.SetAttributes(label.Bool(key, value))
span.SetAttributes(attribute.Bool(key, value))
case int:
span.SetAttributes(label.Int(key, value))
span.SetAttributes(attribute.Int(key, value))
case int8:
span.SetAttributes(label.Int(key, int(value)))
span.SetAttributes(attribute.Int(key, int(value)))
case int16:
span.SetAttributes(label.Int(key, int(value)))
case int32:
span.SetAttributes(label.Int32(key, value))
span.SetAttributes(attribute.Int(key, int(value)))
case int64:
span.SetAttributes(label.Int64(key, value))
case uint:
span.SetAttributes(label.Uint(key, value))
case uint8:
span.SetAttributes(label.Uint(key, uint(value)))
case uint16:
span.SetAttributes(label.Uint(key, uint(value)))
case uint32:
span.SetAttributes(label.Uint32(key, value))
case uint64:
span.SetAttributes(label.Uint64(key, value))
case float32:
span.SetAttributes(label.Float32(key, value))
span.SetAttributes(attribute.Int64(key, value))
case float64:
span.SetAttributes(label.Float64(key, value))
span.SetAttributes(attribute.Float64(key, value))
default:
content, err := json.Marshal(value)
if content == nil && err == nil {
span.SetAttributes(label.String(key, "nil"))
span.SetAttributes(attribute.String(key, "nil"))
} else if content != nil && err == nil {
span.SetAttributes(label.String(key, string(content)))
span.SetAttributes(attribute.String(key, string(content)))
} else {
kataTraceLogger.WithField("type", "bug").Error("span attribute value error")
}
Expand Down
Loading

0 comments on commit 4be2c8b

Please sign in to comment.