Skip to content

Commit b5bb475

Browse files
committed
Change internal tracing to use otel trace
For the moment we rely on the global TracerProvider, in a future PR will change that. Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
1 parent aaa6d7d commit b5bb475

File tree

21 files changed

+437
-526
lines changed

21 files changed

+437
-526
lines changed

config/configgrpc/configgrpc.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"strings"
2121
"time"
2222

23-
"go.opencensus.io/plugin/ocgrpc"
23+
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
2424
"google.golang.org/grpc"
2525
"google.golang.org/grpc/balancer/roundrobin"
2626
"google.golang.org/grpc/credentials"
@@ -226,6 +226,10 @@ func (gcs *GRPCClientSettings) ToDialOptions(ext map[config.ComponentID]componen
226226
opts = append(opts, grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"loadBalancingPolicy":"%s"}`, gcs.BalancerName)))
227227
}
228228

229+
// Enable OpenTelemetry observability plugin.
230+
opts = append(opts, grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()))
231+
opts = append(opts, grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor()))
232+
229233
return opts, nil
230234
}
231235

@@ -316,9 +320,9 @@ func (gss *GRPCServerSettings) ToServerOption(ext map[config.ComponentID]compone
316320
)
317321
}
318322

319-
// Enable OpenCensus observability plugin.
320-
// TODO: Change to OpenTelemetry when collector is changed.
321-
opts = append(opts, grpc.StatsHandler(&ocgrpc.ServerHandler{}))
323+
// Enable OpenTelemetry observability plugin.
324+
opts = append(opts, grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor()))
325+
opts = append(opts, grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor()))
322326

323327
return opts, nil
324328
}

config/configgrpc/configgrpc_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestDefaultGrpcClientSettings(t *testing.T) {
4444
}
4545
opts, err := gcs.ToDialOptions(map[config.ComponentID]component.Extension{})
4646
assert.NoError(t, err)
47-
assert.Len(t, opts, 1)
47+
assert.Len(t, opts, 3)
4848
}
4949

5050
func TestAllGrpcClientSettings(t *testing.T) {
@@ -75,14 +75,14 @@ func TestAllGrpcClientSettings(t *testing.T) {
7575

7676
opts, err := gcs.ToDialOptions(ext)
7777
assert.NoError(t, err)
78-
assert.Len(t, opts, 7)
78+
assert.Len(t, opts, 9)
7979
}
8080

8181
func TestDefaultGrpcServerSettings(t *testing.T) {
8282
gss := &GRPCServerSettings{}
8383
opts, err := gss.ToServerOption(map[config.ComponentID]component.Extension{})
8484
assert.NoError(t, err)
85-
assert.Len(t, opts, 1)
85+
assert.Len(t, opts, 2)
8686
}
8787

8888
func TestAllGrpcServerSettingsExceptAuth(t *testing.T) {
@@ -115,7 +115,7 @@ func TestAllGrpcServerSettingsExceptAuth(t *testing.T) {
115115
}
116116
opts, err := gss.ToServerOption(map[config.ComponentID]component.Extension{})
117117
assert.NoError(t, err)
118-
assert.Len(t, opts, 8)
118+
assert.Len(t, opts, 9)
119119
}
120120

121121
func TestGrpcServerAuthSettings(t *testing.T) {
@@ -246,7 +246,7 @@ func TestUseSecure(t *testing.T) {
246246
}
247247
dialOpts, err := gcs.ToDialOptions(map[config.ComponentID]component.Extension{})
248248
assert.NoError(t, err)
249-
assert.Equal(t, len(dialOpts), 1)
249+
assert.Len(t, dialOpts, 3)
250250
}
251251

252252
func TestGRPCServerSettingsError(t *testing.T) {

exporter/exporterhelper/common_test.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import (
2020

2121
"github.com/stretchr/testify/require"
2222
"go.opencensus.io/tag"
23-
"go.opencensus.io/trace"
23+
"go.opentelemetry.io/otel/codes"
24+
"go.opentelemetry.io/otel/oteltest"
2425
"go.uber.org/zap"
2526

2627
"go.opentelemetry.io/collector/component"
@@ -29,20 +30,13 @@ import (
2930
)
3031

3132
var (
32-
okStatus = trace.Status{Code: trace.StatusCodeOK}
33-
3433
defaultExporterCfg = config.NewExporterSettings(config.NewID(typeStr))
3534
exporterTag, _ = tag.NewKey("exporter")
3635
defaultExporterTags = []tag.Tag{
3736
{Key: exporterTag, Value: "test"},
3837
}
3938
)
4039

41-
func TestErrorToStatus(t *testing.T) {
42-
require.Equal(t, okStatus, errToStatus(nil))
43-
require.Equal(t, trace.Status{Code: trace.StatusCodeUnknown, Message: "my_error"}, errToStatus(errors.New("my_error")))
44-
}
45-
4640
func TestBaseExporter(t *testing.T) {
4741
be := newBaseExporter(&defaultExporterCfg, zap.NewNop(), fromOptions())
4842
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
@@ -64,9 +58,11 @@ func TestBaseExporterWithOptions(t *testing.T) {
6458
require.Equal(t, want, be.Shutdown(context.Background()))
6559
}
6660

67-
func errToStatus(err error) trace.Status {
61+
func checkStatus(t *testing.T, sd *oteltest.Span, err error) {
6862
if err != nil {
69-
return trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()}
63+
require.Equal(t, codes.Error, sd.StatusCode(), "SpanData %v", sd)
64+
require.Equal(t, err.Error(), sd.StatusMessage(), "SpanData %v", sd)
65+
} else {
66+
require.Equal(t, codes.Unset, sd.StatusCode(), "SpanData %v", sd)
7067
}
71-
return okStatus
7268
}

exporter/exporterhelper/logs_test.go

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import (
2020

2121
"github.com/stretchr/testify/assert"
2222
"github.com/stretchr/testify/require"
23-
"go.opencensus.io/trace"
23+
"go.opentelemetry.io/otel"
24+
"go.opentelemetry.io/otel/attribute"
25+
"go.opentelemetry.io/otel/oteltest"
26+
"go.opentelemetry.io/otel/trace"
2427
"go.uber.org/zap"
2528

2629
"go.opentelemetry.io/collector/component"
@@ -146,18 +149,28 @@ func TestLogsExporter_WithRecordEnqueueFailedMetrics(t *testing.T) {
146149
}
147150

148151
func TestLogsExporter_WithSpan(t *testing.T) {
152+
sr := new(oteltest.SpanRecorder)
153+
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
154+
otel.SetTracerProvider(tp)
155+
defer otel.SetTracerProvider(trace.NewNoopTracerProvider())
156+
149157
le, err := NewLogsExporter(&fakeLogsExporterConfig, zap.NewNop(), newPushLogsData(nil))
150158
require.Nil(t, err)
151159
require.NotNil(t, le)
152-
checkWrapSpanForLogsExporter(t, le, nil, 1)
160+
checkWrapSpanForLogsExporter(t, sr, tp.Tracer("test"), le, nil, 1)
153161
}
154162

155163
func TestLogsExporter_WithSpan_ReturnError(t *testing.T) {
164+
sr := new(oteltest.SpanRecorder)
165+
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
166+
otel.SetTracerProvider(tp)
167+
defer otel.SetTracerProvider(trace.NewNoopTracerProvider())
168+
156169
want := errors.New("my_error")
157170
le, err := NewLogsExporter(&fakeLogsExporterConfig, zap.NewNop(), newPushLogsData(want))
158171
require.Nil(t, err)
159172
require.NotNil(t, le)
160-
checkWrapSpanForLogsExporter(t, le, want, 1)
173+
checkWrapSpanForLogsExporter(t, sr, tp.Tracer("test"), le, want, 1)
161174
}
162175

163176
func TestLogsExporter_WithShutdown(t *testing.T) {
@@ -208,45 +221,36 @@ func checkRecordedMetricsForLogsExporter(t *testing.T, le component.LogsExporter
208221
}
209222
}
210223

211-
func generateLogsTraffic(t *testing.T, le component.LogsExporter, numRequests int, wantError error) {
224+
func generateLogsTraffic(t *testing.T, tracer trace.Tracer, le component.LogsExporter, numRequests int, wantError error) {
212225
ld := testdata.GenerateLogsOneLogRecord()
213-
ctx, span := trace.StartSpan(context.Background(), fakeLogsParentSpanName, trace.WithSampler(trace.AlwaysSample()))
226+
ctx, span := tracer.Start(context.Background(), fakeLogsParentSpanName)
214227
defer span.End()
215228
for i := 0; i < numRequests; i++ {
216229
require.Equal(t, wantError, le.ConsumeLogs(ctx, ld))
217230
}
218231
}
219232

220-
func checkWrapSpanForLogsExporter(t *testing.T, le component.LogsExporter, wantError error, numLogRecords int64) {
221-
ocSpansSaver := new(testOCTracesExporter)
222-
trace.RegisterExporter(ocSpansSaver)
223-
defer trace.UnregisterExporter(ocSpansSaver)
224-
233+
func checkWrapSpanForLogsExporter(t *testing.T, sr *oteltest.SpanRecorder, tracer trace.Tracer, le component.LogsExporter, wantError error, numLogRecords int64) {
225234
const numRequests = 5
226-
generateLogsTraffic(t, le, numRequests, wantError)
235+
generateLogsTraffic(t, tracer, le, numRequests, wantError)
227236

228237
// Inspection time!
229-
ocSpansSaver.mu.Lock()
230-
defer ocSpansSaver.mu.Unlock()
231-
232-
require.NotEqual(t, 0, len(ocSpansSaver.spanData), "No exported span data")
233-
234-
gotSpanData := ocSpansSaver.spanData
238+
gotSpanData := sr.Completed()
235239
require.Equal(t, numRequests+1, len(gotSpanData))
236240

237241
parentSpan := gotSpanData[numRequests]
238-
require.Equalf(t, fakeLogsParentSpanName, parentSpan.Name, "SpanData %v", parentSpan)
242+
require.Equalf(t, fakeLogsParentSpanName, parentSpan.Name(), "SpanData %v", parentSpan)
239243
for _, sd := range gotSpanData[:numRequests] {
240-
require.Equalf(t, parentSpan.SpanContext.SpanID, sd.ParentSpanID, "Exporter span not a child\nSpanData %v", sd)
241-
require.Equalf(t, errToStatus(wantError), sd.Status, "SpanData %v", sd)
244+
require.Equalf(t, parentSpan.SpanContext().SpanID(), sd.ParentSpanID(), "Exporter span not a child\nSpanData %v", sd)
245+
checkStatus(t, sd, wantError)
242246

243247
sentLogRecords := numLogRecords
244248
var failedToSendLogRecords int64
245249
if wantError != nil {
246250
sentLogRecords = 0
247251
failedToSendLogRecords = numLogRecords
248252
}
249-
require.Equalf(t, sentLogRecords, sd.Attributes[obsmetrics.SentLogRecordsKey], "SpanData %v", sd)
250-
require.Equalf(t, failedToSendLogRecords, sd.Attributes[obsmetrics.FailedToSendLogRecordsKey], "SpanData %v", sd)
253+
require.Equalf(t, attribute.Int64Value(sentLogRecords), sd.Attributes()[obsmetrics.SentLogRecordsKey], "SpanData %v", sd)
254+
require.Equalf(t, attribute.Int64Value(failedToSendLogRecords), sd.Attributes()[obsmetrics.FailedToSendLogRecordsKey], "SpanData %v", sd)
251255
}
252256
}

exporter/exporterhelper/metrics_test.go

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import (
2020

2121
"github.com/stretchr/testify/assert"
2222
"github.com/stretchr/testify/require"
23-
"go.opencensus.io/trace"
23+
"go.opentelemetry.io/otel"
24+
"go.opentelemetry.io/otel/attribute"
25+
"go.opentelemetry.io/otel/oteltest"
26+
"go.opentelemetry.io/otel/trace"
2427
"go.uber.org/zap"
2528

2629
"go.opentelemetry.io/collector/component"
@@ -145,18 +148,28 @@ func TestMetricsExporter_WithRecordEnqueueFailedMetrics(t *testing.T) {
145148
}
146149

147150
func TestMetricsExporter_WithSpan(t *testing.T) {
151+
sr := new(oteltest.SpanRecorder)
152+
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
153+
otel.SetTracerProvider(tp)
154+
defer otel.SetTracerProvider(trace.NewNoopTracerProvider())
155+
148156
me, err := NewMetricsExporter(&fakeMetricsExporterConfig, zap.NewNop(), newPushMetricsData(nil))
149157
require.NoError(t, err)
150158
require.NotNil(t, me)
151-
checkWrapSpanForMetricsExporter(t, me, nil, 1)
159+
checkWrapSpanForMetricsExporter(t, sr, tp.Tracer("test"), me, nil, 1)
152160
}
153161

154162
func TestMetricsExporter_WithSpan_ReturnError(t *testing.T) {
163+
sr := new(oteltest.SpanRecorder)
164+
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
165+
otel.SetTracerProvider(tp)
166+
defer otel.SetTracerProvider(trace.NewNoopTracerProvider())
167+
155168
want := errors.New("my_error")
156169
me, err := NewMetricsExporter(&fakeMetricsExporterConfig, zap.NewNop(), newPushMetricsData(want))
157170
require.NoError(t, err)
158171
require.NotNil(t, me)
159-
checkWrapSpanForMetricsExporter(t, me, want, 1)
172+
checkWrapSpanForMetricsExporter(t, sr, tp.Tracer("test"), me, want, 1)
160173
}
161174

162175
func TestMetricsExporter_WithShutdown(t *testing.T) {
@@ -232,45 +245,36 @@ func checkRecordedMetricsForMetricsExporter(t *testing.T, me component.MetricsEx
232245
}
233246
}
234247

235-
func generateMetricsTraffic(t *testing.T, me component.MetricsExporter, numRequests int, wantError error) {
248+
func generateMetricsTraffic(t *testing.T, tracer trace.Tracer, me component.MetricsExporter, numRequests int, wantError error) {
236249
md := testdata.GenerateMetricsOneMetricOneDataPoint()
237-
ctx, span := trace.StartSpan(context.Background(), fakeMetricsParentSpanName, trace.WithSampler(trace.AlwaysSample()))
250+
ctx, span := tracer.Start(context.Background(), fakeMetricsParentSpanName)
238251
defer span.End()
239252
for i := 0; i < numRequests; i++ {
240253
require.Equal(t, wantError, me.ConsumeMetrics(ctx, md))
241254
}
242255
}
243256

244-
func checkWrapSpanForMetricsExporter(t *testing.T, me component.MetricsExporter, wantError error, numMetricPoints int64) {
245-
ocSpansSaver := new(testOCTracesExporter)
246-
trace.RegisterExporter(ocSpansSaver)
247-
defer trace.UnregisterExporter(ocSpansSaver)
248-
257+
func checkWrapSpanForMetricsExporter(t *testing.T, sr *oteltest.SpanRecorder, tracer trace.Tracer, me component.MetricsExporter, wantError error, numMetricPoints int64) {
249258
const numRequests = 5
250-
generateMetricsTraffic(t, me, numRequests, wantError)
259+
generateMetricsTraffic(t, tracer, me, numRequests, wantError)
251260

252261
// Inspection time!
253-
ocSpansSaver.mu.Lock()
254-
defer ocSpansSaver.mu.Unlock()
255-
256-
require.NotEqual(t, 0, len(ocSpansSaver.spanData), "No exported span data")
257-
258-
gotSpanData := ocSpansSaver.spanData
262+
gotSpanData := sr.Completed()
259263
require.Equal(t, numRequests+1, len(gotSpanData))
260264

261265
parentSpan := gotSpanData[numRequests]
262-
require.Equalf(t, fakeMetricsParentSpanName, parentSpan.Name, "SpanData %v", parentSpan)
266+
require.Equalf(t, fakeMetricsParentSpanName, parentSpan.Name(), "SpanData %v", parentSpan)
263267
for _, sd := range gotSpanData[:numRequests] {
264-
require.Equalf(t, parentSpan.SpanContext.SpanID, sd.ParentSpanID, "Exporter span not a child\nSpanData %v", sd)
265-
require.Equalf(t, errToStatus(wantError), sd.Status, "SpanData %v", sd)
268+
require.Equalf(t, parentSpan.SpanContext().SpanID(), sd.ParentSpanID(), "Exporter span not a child\nSpanData %v", sd)
269+
checkStatus(t, sd, wantError)
266270

267271
sentMetricPoints := numMetricPoints
268272
var failedToSendMetricPoints int64
269273
if wantError != nil {
270274
sentMetricPoints = 0
271275
failedToSendMetricPoints = numMetricPoints
272276
}
273-
require.Equalf(t, sentMetricPoints, sd.Attributes[obsmetrics.SentMetricPointsKey], "SpanData %v", sd)
274-
require.Equalf(t, failedToSendMetricPoints, sd.Attributes[obsmetrics.FailedToSendMetricPointsKey], "SpanData %v", sd)
277+
require.Equalf(t, attribute.Int64Value(sentMetricPoints), sd.Attributes()[obsmetrics.SentMetricPointsKey], "SpanData %v", sd)
278+
require.Equalf(t, attribute.Int64Value(failedToSendMetricPoints), sd.Attributes()[obsmetrics.FailedToSendMetricPointsKey], "SpanData %v", sd)
275279
}
276280
}

0 commit comments

Comments
 (0)