88
99 "go.opentelemetry.io/otel/attribute"
1010 "go.opentelemetry.io/otel/metric"
11+ "go.opentelemetry.io/otel/trace"
1112
1213 "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata"
1314 "go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
@@ -21,6 +22,7 @@ type obsQueue[T request.Request] struct {
2122 tb * metadata.TelemetryBuilder
2223 metricAttr metric.MeasurementOption
2324 enqueueFailedInst metric.Int64Counter
25+ tracer trace.Tracer
2426}
2527
2628func newObsQueue [T request.Request ](set exporterqueue.Settings , delegate exporterqueue.Queue [T ]) (exporterqueue.Queue [T ], error ) {
@@ -47,10 +49,13 @@ func newObsQueue[T request.Request](set exporterqueue.Settings, delegate exporte
4749 return nil , err
4850 }
4951
52+ tracer := metadata .Tracer (set .ExporterSettings .TelemetrySettings )
53+
5054 or := & obsQueue [T ]{
5155 Queue : delegate ,
5256 tb : tb ,
5357 metricAttr : metric .WithAttributeSet (attribute .NewSet (exporterAttr )),
58+ tracer : tracer ,
5459 }
5560
5661 switch set .Signal {
@@ -74,7 +79,11 @@ func (or *obsQueue[T]) Offer(ctx context.Context, req T) error {
7479 // Have to read the number of items before sending the request since the request can
7580 // be modified by the downstream components like the batcher.
7681 numItems := req .ItemsCount ()
82+
83+ ctx , _ = or .tracer .Start (ctx , "exporter/enqueue" )
7784 err := or .Queue .Offer (ctx , req )
85+ trace .SpanFromContext (ctx ).End ()
86+
7887 // No metrics recorded for profiles, remove enqueueFailedInst check with nil when profiles metrics available.
7988 if err != nil && or .enqueueFailedInst != nil {
8089 or .enqueueFailedInst .Add (ctx , int64 (numItems ), or .metricAttr )
0 commit comments