diff --git a/exporter/exporterhelper/internal/base_exporter.go b/exporter/exporterhelper/internal/base_exporter.go index ccbe36c71b0..87a1278db77 100644 --- a/exporter/exporterhelper/internal/base_exporter.go +++ b/exporter/exporterhelper/internal/base_exporter.go @@ -24,8 +24,6 @@ import ( "go.opentelemetry.io/collector/pipeline" ) -type ObsrepSenderFactory = func(obsrep *ObsReport, next Sender[internal.Request]) Sender[internal.Request] - // Option apply changes to BaseExporter. type Option func(*BaseExporter) error @@ -59,12 +57,7 @@ type BaseExporter struct { batcherCfg exporterbatcher.Config } -func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSenderFactory, options ...Option) (*BaseExporter, error) { - obsReport, err := NewObsReport(ObsReportSettings{ExporterSettings: set, Signal: signal}) - if err != nil { - return nil, err - } - +func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, options ...Option) (*BaseExporter, error) { be := &BaseExporter{ Set: set, timeoutCfg: NewDefaultTimeoutConfig(), @@ -72,7 +65,7 @@ func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSe } for _, op := range options { - if err = op(be); err != nil { + if err := op(be); err != nil { return nil, err } } @@ -84,7 +77,11 @@ func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSe be.firstSender = be.RetrySender } - be.ObsrepSender = osf(obsReport, be.firstSender) + var err error + be.ObsrepSender, err = newObsReportSender(set, signal, be.firstSender) + if err != nil { + return nil, err + } be.firstSender = be.ObsrepSender if be.batcherCfg.Enabled { diff --git a/exporter/exporterhelper/internal/base_exporter_test.go b/exporter/exporterhelper/internal/base_exporter_test.go index e4f8fa13012..bc8c555d923 100644 --- a/exporter/exporterhelper/internal/base_exporter_test.go +++ b/exporter/exporterhelper/internal/base_exporter_test.go @@ -53,15 +53,11 @@ func newNoopExportSender() Sender[internal.Request] { }} } -func newNoopObsrepSender(_ *ObsReport, next Sender[internal.Request]) Sender[internal.Request] { - return &noopSender{SendFunc: next.Send} -} - func TestBaseExporter(t *testing.T) { runTest := func(testName string, enableQueueBatcher bool) { t.Run(testName, func(t *testing.T) { defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, enableQueueBatcher)() - be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender) + be, err := NewBaseExporter(defaultSettings, defaultSignal) require.NoError(t, err) require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost())) require.NoError(t, be.Shutdown(context.Background())) @@ -77,7 +73,7 @@ func TestBaseExporterWithOptions(t *testing.T) { defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, enableQueueBatcher)() want := errors.New("my error") be, err := NewBaseExporter( - defaultSettings, defaultSignal, newNoopObsrepSender, + defaultSettings, defaultSignal, WithStart(func(context.Context, component.Host) error { return want }), WithShutdown(func(context.Context) error { return want }), WithTimeout(NewDefaultTimeoutConfig()), @@ -95,16 +91,16 @@ func TestQueueOptionsWithRequestExporter(t *testing.T) { runTest := func(testName string, enableQueueBatcher bool) { t.Run(testName, func(t *testing.T) { defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, enableQueueBatcher)() - bs, err := NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender, + bs, err := NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, WithRetry(configretry.NewDefaultBackOffConfig())) require.NoError(t, err) require.Nil(t, bs.Marshaler) require.Nil(t, bs.Unmarshaler) - _, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender, + _, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, WithRetry(configretry.NewDefaultBackOffConfig()), WithQueue(NewDefaultQueueConfig())) require.Error(t, err) - _, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender, + _, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&requesttest.FakeRequest{Items: 1})), WithRetry(configretry.NewDefaultBackOffConfig()), WithRequestQueue(exporterqueue.NewDefaultConfig(), exporterqueue.NewMemoryQueueFactory[internal.Request]())) @@ -126,7 +122,7 @@ func TestBaseExporterLogging(t *testing.T) { rCfg.Enabled = false qCfg := exporterqueue.NewDefaultConfig() qCfg.Enabled = false - bs, err := NewBaseExporter(set, defaultSignal, newNoopObsrepSender, + bs, err := NewBaseExporter(set, defaultSignal, WithRequestQueue(qCfg, exporterqueue.NewMemoryQueueFactory[internal.Request]()), WithBatcher(exporterbatcher.NewDefaultConfig()), WithRetry(rCfg)) @@ -197,20 +193,16 @@ func TestQueueRetryWithDisabledQueue(t *testing.T) { set := exportertest.NewNopSettings() logger, observed := observer.New(zap.ErrorLevel) set.Logger = zap.New(logger) - be, err := NewBaseExporter(set, pipeline.SignalLogs, newObservabilityConsumerSender, tt.queueOptions...) + be, err := NewBaseExporter(set, pipeline.SignalLogs, tt.queueOptions...) require.NoError(t, err) require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost())) - ocs := be.ObsrepSender.(*observabilityConsumerSender) - mockR := &requesttest.FakeRequest{Items: 2, ExportErr: errors.New("some error")} - ocs.run(func() { - require.Error(t, be.Send(context.Background(), mockR)) - }) + sink := requesttest.NewSink() + mockR := &requesttest.FakeRequest{Items: 2, Sink: sink, ExportErr: errors.New("some error")} + require.Error(t, be.Send(context.Background(), mockR)) assert.Len(t, observed.All(), 1) assert.Equal(t, "Exporting failed. Rejecting data. Try enabling sending_queue to survive temporary failures.", observed.All()[0].Message) - ocs.awaitAsyncProcessing() - ocs.checkSendItemsCount(t, 0) - ocs.checkDroppedItemsCount(t, 2) require.NoError(t, be.Shutdown(context.Background())) + assert.Empty(t, 0, sink.RequestsCount()) }) } for _, tt := range tests { diff --git a/exporter/exporterhelper/internal/obs_report.go b/exporter/exporterhelper/internal/obs_report.go deleted file mode 100644 index 09c6fb391c5..00000000000 --- a/exporter/exporterhelper/internal/obs_report.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package internal // import "go.opentelemetry.io/collector/exporter/exporterhelper/internal" - -import ( - "context" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/trace" - - "go.opentelemetry.io/collector/exporter" - "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata" - "go.opentelemetry.io/collector/pipeline" -) - -const ( - // spanNameSep is duplicate between receiver and exporter. - spanNameSep = "/" - - // ExporterKey used to identify exporters in metrics and traces. - ExporterKey = "exporter" - - // DataTypeKey used to identify the data type in the queue size metric. - DataTypeKey = "data_type" - - // ItemsSent used to track number of items sent by exporters. - ItemsSent = "items.sent" - // ItemsFailed used to track number of items that failed to be sent by exporters. - ItemsFailed = "items.failed" -) - -// ObsReport is a helper to add observability to an exporter. -type ObsReport struct { - spanName string - tracer trace.Tracer - - spanAttrs trace.SpanStartEventOption - metricAttr metric.MeasurementOption - itemsSentInst metric.Int64Counter - itemsFailedInst metric.Int64Counter -} - -// ObsReportSettings are settings for creating an ObsReport. -type ObsReportSettings struct { - ExporterSettings exporter.Settings - Signal pipeline.Signal -} - -func NewObsReport(set ObsReportSettings) (*ObsReport, error) { - telemetryBuilder, err := metadata.NewTelemetryBuilder(set.ExporterSettings.TelemetrySettings) - if err != nil { - return nil, err - } - - idStr := set.ExporterSettings.ID.String() - expAttr := attribute.String(ExporterKey, idStr) - - or := &ObsReport{ - spanName: ExporterKey + spanNameSep + idStr + spanNameSep + set.Signal.String(), - tracer: metadata.Tracer(set.ExporterSettings.TelemetrySettings), - spanAttrs: trace.WithAttributes(expAttr, attribute.String(DataTypeKey, set.Signal.String())), - metricAttr: metric.WithAttributeSet(attribute.NewSet(expAttr)), - } - - switch set.Signal { - case pipeline.SignalTraces: - or.itemsSentInst = telemetryBuilder.ExporterSentSpans - or.itemsFailedInst = telemetryBuilder.ExporterSendFailedSpans - - case pipeline.SignalMetrics: - or.itemsSentInst = telemetryBuilder.ExporterSentMetricPoints - or.itemsFailedInst = telemetryBuilder.ExporterSendFailedMetricPoints - - case pipeline.SignalLogs: - or.itemsSentInst = telemetryBuilder.ExporterSentLogRecords - or.itemsFailedInst = telemetryBuilder.ExporterSendFailedLogRecords - } - - return or, nil -} - -// StartOp creates the span used to trace the operation. Returning -// the updated context and the created span. -func (or *ObsReport) StartOp(ctx context.Context) context.Context { - ctx, _ = or.tracer.Start(ctx, or.spanName, or.spanAttrs) - return ctx -} - -// EndOp completes the export operation that was started with StartOp. -func (or *ObsReport) EndOp(ctx context.Context, numLogRecords int, err error) { - numSent, numFailedToSend := toNumItems(numLogRecords, err) - - // No metrics recorded for profiles. - if or.itemsSentInst != nil { - or.itemsSentInst.Add(ctx, numSent, or.metricAttr) - } - // No metrics recorded for profiles. - if or.itemsFailedInst != nil { - or.itemsFailedInst.Add(ctx, numFailedToSend, or.metricAttr) - } - - span := trace.SpanFromContext(ctx) - defer span.End() - // End the span according to errors. - if span.IsRecording() { - span.SetAttributes( - attribute.Int64(ItemsSent, numSent), - attribute.Int64(ItemsFailed, numFailedToSend), - ) - if err != nil { - span.SetStatus(codes.Error, err.Error()) - } - } -} - -func toNumItems(numExportedItems int, err error) (int64, int64) { - if err != nil { - return 0, int64(numExportedItems) - } - return int64(numExportedItems), 0 -} diff --git a/exporter/exporterhelper/internal/obs_report_sender.go b/exporter/exporterhelper/internal/obs_report_sender.go index 439fbdcb08d..ae737e5afdb 100644 --- a/exporter/exporterhelper/internal/obs_report_sender.go +++ b/exporter/exporterhelper/internal/obs_report_sender.go @@ -6,28 +6,129 @@ package internal // import "go.opentelemetry.io/collector/exporter/exporterhelpe import ( "context" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata" "go.opentelemetry.io/collector/exporter/internal" + "go.opentelemetry.io/collector/pipeline" +) + +const ( + // spanNameSep is duplicate between receiver and exporter. + spanNameSep = "/" + + // ExporterKey used to identify exporters in metrics and traces. + ExporterKey = "exporter" + + // DataTypeKey used to identify the data type in the queue size metric. + DataTypeKey = "data_type" + + // ItemsSent used to track number of items sent by exporters. + ItemsSent = "items.sent" + // ItemsFailed used to track number of items that failed to be sent by exporters. + ItemsFailed = "items.failed" ) type obsReportSender[K internal.Request] struct { component.StartFunc component.ShutdownFunc - obsrep *ObsReport - next Sender[K] + + spanName string + tracer trace.Tracer + spanAttrs trace.SpanStartEventOption + metricAttr metric.MeasurementOption + itemsSentInst metric.Int64Counter + itemsFailedInst metric.Int64Counter + next Sender[K] } -func NewObsReportSender[K internal.Request](obsrep *ObsReport, next Sender[K]) Sender[K] { - return &obsReportSender[K]{obsrep: obsrep, next: next} +func newObsReportSender[K internal.Request](set exporter.Settings, signal pipeline.Signal, next Sender[K]) (Sender[K], error) { + telemetryBuilder, err := metadata.NewTelemetryBuilder(set.TelemetrySettings) + if err != nil { + return nil, err + } + + idStr := set.ID.String() + expAttr := attribute.String(ExporterKey, idStr) + + or := &obsReportSender[K]{ + spanName: ExporterKey + spanNameSep + idStr + spanNameSep + signal.String(), + tracer: metadata.Tracer(set.TelemetrySettings), + spanAttrs: trace.WithAttributes(expAttr, attribute.String(DataTypeKey, signal.String())), + metricAttr: metric.WithAttributeSet(attribute.NewSet(expAttr)), + next: next, + } + + switch signal { + case pipeline.SignalTraces: + or.itemsSentInst = telemetryBuilder.ExporterSentSpans + or.itemsFailedInst = telemetryBuilder.ExporterSendFailedSpans + + case pipeline.SignalMetrics: + or.itemsSentInst = telemetryBuilder.ExporterSentMetricPoints + or.itemsFailedInst = telemetryBuilder.ExporterSendFailedMetricPoints + + case pipeline.SignalLogs: + or.itemsSentInst = telemetryBuilder.ExporterSentLogRecords + or.itemsFailedInst = telemetryBuilder.ExporterSendFailedLogRecords + } + + return or, nil } func (ors *obsReportSender[K]) Send(ctx context.Context, req K) error { // Have to read the number of items before sending the request since the request can // be modified by the downstream components like the batcher. - c := ors.obsrep.StartOp(ctx) + c := ors.startOp(ctx) items := req.ItemsCount() // Forward the data to the next consumer (this pusher is the next). err := ors.next.Send(c, req) - ors.obsrep.EndOp(c, items, err) + ors.endOp(c, items, err) return err } + +// StartOp creates the span used to trace the operation. Returning +// the updated context and the created span. +func (ors *obsReportSender[K]) startOp(ctx context.Context) context.Context { + ctx, _ = ors.tracer.Start(ctx, ors.spanName, ors.spanAttrs) + return ctx +} + +// EndOp completes the export operation that was started with StartOp. +func (ors *obsReportSender[K]) endOp(ctx context.Context, numLogRecords int, err error) { + numSent, numFailedToSend := toNumItems(numLogRecords, err) + + // No metrics recorded for profiles. + if ors.itemsSentInst != nil { + ors.itemsSentInst.Add(ctx, numSent, ors.metricAttr) + } + // No metrics recorded for profiles. + if ors.itemsFailedInst != nil { + ors.itemsFailedInst.Add(ctx, numFailedToSend, ors.metricAttr) + } + + span := trace.SpanFromContext(ctx) + defer span.End() + // End the span according to errors. + if span.IsRecording() { + span.SetAttributes( + attribute.Int64(ItemsSent, numSent), + attribute.Int64(ItemsFailed, numFailedToSend), + ) + if err != nil { + span.SetStatus(codes.Error, err.Error()) + } + } +} + +func toNumItems(numExportedItems int, err error) (int64, int64) { + if err != nil { + return 0, int64(numExportedItems) + } + return int64(numExportedItems), 0 +} diff --git a/exporter/exporterhelper/internal/obs_report_test.go b/exporter/exporterhelper/internal/obs_report_sender_test.go similarity index 87% rename from exporter/exporterhelper/internal/obs_report_test.go rename to exporter/exporterhelper/internal/obs_report_sender_test.go index 2264c6d0281..aba4197fc54 100644 --- a/exporter/exporterhelper/internal/obs_report_test.go +++ b/exporter/exporterhelper/internal/obs_report_sender_test.go @@ -19,6 +19,7 @@ import ( "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadatatest" + "go.opentelemetry.io/collector/exporter/internal/requesttest" "go.opentelemetry.io/collector/pipeline" ) @@ -36,10 +37,11 @@ func TestExportTraceDataOp(t *testing.T) { parentCtx, parentSpan := tt.TelemetrySettings().TracerProvider.Tracer("test").Start(context.Background(), t.Name()) defer parentSpan.End() - obsrep, err := NewObsReport(ObsReportSettings{ - ExporterSettings: exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, - Signal: pipeline.SignalTraces, - }) + obsrep, err := newObsReportSender( + exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, + pipeline.SignalTraces, + newNoopExportSender(), + ) require.NoError(t, err) params := []testParams{ @@ -47,9 +49,7 @@ func TestExportTraceDataOp(t *testing.T) { {items: 14, err: errFake}, } for i := range params { - ctx := obsrep.StartOp(parentCtx) - assert.NotNil(t, ctx) - obsrep.EndOp(ctx, params[i].items, params[i].err) + require.ErrorIs(t, obsrep.Send(parentCtx, &requesttest.FakeRequest{Items: params[i].items, ExportErr: params[i].err}), params[i].err) } spans := tt.SpanRecorder.Ended() @@ -104,10 +104,11 @@ func TestExportMetricsOp(t *testing.T) { parentCtx, parentSpan := tt.TelemetrySettings().TracerProvider.Tracer("test").Start(context.Background(), t.Name()) defer parentSpan.End() - obsrep, err := NewObsReport(ObsReportSettings{ - ExporterSettings: exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, - Signal: pipeline.SignalMetrics, - }) + obsrep, err := newObsReportSender( + exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, + pipeline.SignalMetrics, + newNoopExportSender(), + ) require.NoError(t, err) params := []testParams{ @@ -115,10 +116,7 @@ func TestExportMetricsOp(t *testing.T) { {items: 23, err: errFake}, } for i := range params { - ctx := obsrep.StartOp(parentCtx) - assert.NotNil(t, ctx) - - obsrep.EndOp(ctx, params[i].items, params[i].err) + require.ErrorIs(t, obsrep.Send(parentCtx, &requesttest.FakeRequest{Items: params[i].items, ExportErr: params[i].err}), params[i].err) } spans := tt.SpanRecorder.Ended() @@ -173,10 +171,11 @@ func TestExportLogsOp(t *testing.T) { parentCtx, parentSpan := tt.TelemetrySettings().TracerProvider.Tracer("test").Start(context.Background(), t.Name()) defer parentSpan.End() - obsrep, err := NewObsReport(ObsReportSettings{ - ExporterSettings: exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, - Signal: pipeline.SignalLogs, - }) + obsrep, err := newObsReportSender( + exporter.Settings{ID: exporterID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}, + pipeline.SignalLogs, + newNoopExportSender(), + ) require.NoError(t, err) params := []testParams{ @@ -184,10 +183,7 @@ func TestExportLogsOp(t *testing.T) { {items: 23, err: errFake}, } for i := range params { - ctx := obsrep.StartOp(parentCtx) - assert.NotNil(t, ctx) - - obsrep.EndOp(ctx, params[i].items, params[i].err) + require.ErrorIs(t, obsrep.Send(parentCtx, &requesttest.FakeRequest{Items: params[i].items, ExportErr: params[i].err}), params[i].err) } spans := tt.SpanRecorder.Ended() diff --git a/exporter/exporterhelper/internal/retry_sender_test.go b/exporter/exporterhelper/internal/retry_sender_test.go index 5a692bc83d5..6806c1bd557 100644 --- a/exporter/exporterhelper/internal/retry_sender_test.go +++ b/exporter/exporterhelper/internal/retry_sender_test.go @@ -7,8 +7,6 @@ import ( "context" "errors" "fmt" - "sync" - "sync/atomic" "testing" "time" @@ -17,7 +15,6 @@ import ( "go.uber.org/zap" "go.uber.org/zap/zaptest/observer" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config/configretry" "go.opentelemetry.io/collector/consumer/consumererror" @@ -175,49 +172,3 @@ func (mer *mockErrorRequest) MergeSplit(context.Context, exporterbatcher.MaxSize func newErrorRequest(err error) internal.Request { return &mockErrorRequest{err: err} } - -type observabilityConsumerSender struct { - component.StartFunc - component.ShutdownFunc - waitGroup *sync.WaitGroup - sentItemsCount *atomic.Int64 - droppedItemsCount *atomic.Int64 - next Sender[internal.Request] -} - -func newObservabilityConsumerSender(_ *ObsReport, next Sender[internal.Request]) Sender[internal.Request] { - return &observabilityConsumerSender{ - waitGroup: new(sync.WaitGroup), - droppedItemsCount: &atomic.Int64{}, - sentItemsCount: &atomic.Int64{}, - next: next, - } -} - -func (ocs *observabilityConsumerSender) Send(ctx context.Context, req internal.Request) error { - err := ocs.next.Send(ctx, req) - if err != nil { - ocs.droppedItemsCount.Add(int64(req.ItemsCount())) - } else { - ocs.sentItemsCount.Add(int64(req.ItemsCount())) - } - ocs.waitGroup.Done() - return err -} - -func (ocs *observabilityConsumerSender) run(fn func()) { - ocs.waitGroup.Add(1) - fn() -} - -func (ocs *observabilityConsumerSender) awaitAsyncProcessing() { - ocs.waitGroup.Wait() -} - -func (ocs *observabilityConsumerSender) checkSendItemsCount(t *testing.T, want int) { - assert.EqualValues(t, want, ocs.sentItemsCount.Load()) -} - -func (ocs *observabilityConsumerSender) checkDroppedItemsCount(t *testing.T, want int) { - assert.EqualValues(t, want, ocs.droppedItemsCount.Load()) -} diff --git a/exporter/exporterhelper/logs.go b/exporter/exporterhelper/logs.go index acd5b8af13c..8ca1e55790e 100644 --- a/exporter/exporterhelper/logs.go +++ b/exporter/exporterhelper/logs.go @@ -126,7 +126,7 @@ func NewLogsRequest( return nil, errNilLogsConverter } - be, err := internal.NewBaseExporter(set, pipeline.SignalLogs, internal.NewObsReportSender, options...) + be, err := internal.NewBaseExporter(set, pipeline.SignalLogs, options...) if err != nil { return nil, err } diff --git a/exporter/exporterhelper/metrics.go b/exporter/exporterhelper/metrics.go index b257e4964a6..0f414706fed 100644 --- a/exporter/exporterhelper/metrics.go +++ b/exporter/exporterhelper/metrics.go @@ -126,7 +126,7 @@ func NewMetricsRequest( return nil, errNilMetricsConverter } - be, err := internal.NewBaseExporter(set, pipeline.SignalMetrics, internal.NewObsReportSender, options...) + be, err := internal.NewBaseExporter(set, pipeline.SignalMetrics, options...) if err != nil { return nil, err } diff --git a/exporter/exporterhelper/traces.go b/exporter/exporterhelper/traces.go index d83e4ebb225..03cc3f1566d 100644 --- a/exporter/exporterhelper/traces.go +++ b/exporter/exporterhelper/traces.go @@ -126,7 +126,7 @@ func NewTracesRequest( return nil, errNilTracesConverter } - be, err := internal.NewBaseExporter(set, pipeline.SignalTraces, internal.NewObsReportSender, options...) + be, err := internal.NewBaseExporter(set, pipeline.SignalTraces, options...) if err != nil { return nil, err } diff --git a/exporter/exporterhelper/xexporterhelper/profiles.go b/exporter/exporterhelper/xexporterhelper/profiles.go index 5b5f7d440b8..0ac80e79f87 100644 --- a/exporter/exporterhelper/xexporterhelper/profiles.go +++ b/exporter/exporterhelper/xexporterhelper/profiles.go @@ -129,7 +129,7 @@ func NewProfilesRequestExporter( return nil, errNilProfilesConverter } - be, err := internal.NewBaseExporter(set, xpipeline.SignalProfiles, internal.NewObsReportSender, options...) + be, err := internal.NewBaseExporter(set, xpipeline.SignalProfiles, options...) if err != nil { return nil, err }