8
8
9
9
"go.opentelemetry.io/otel/attribute"
10
10
"go.opentelemetry.io/otel/metric"
11
+ "go.opentelemetry.io/otel/trace"
11
12
12
13
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata"
13
14
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
@@ -21,6 +22,7 @@ type obsQueue[T request.Request] struct {
21
22
tb * metadata.TelemetryBuilder
22
23
metricAttr metric.MeasurementOption
23
24
enqueueFailedInst metric.Int64Counter
25
+ tracer trace.Tracer
24
26
}
25
27
26
28
func 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
47
49
return nil , err
48
50
}
49
51
52
+ tracer := metadata .Tracer (set .ExporterSettings .TelemetrySettings )
53
+
50
54
or := & obsQueue [T ]{
51
55
Queue : delegate ,
52
56
tb : tb ,
53
57
metricAttr : metric .WithAttributeSet (attribute .NewSet (exporterAttr )),
58
+ tracer : tracer ,
54
59
}
55
60
56
61
switch set .Signal {
@@ -74,7 +79,11 @@ func (or *obsQueue[T]) Offer(ctx context.Context, req T) error {
74
79
// Have to read the number of items before sending the request since the request can
75
80
// be modified by the downstream components like the batcher.
76
81
numItems := req .ItemsCount ()
82
+
83
+ ctx , _ = or .tracer .Start (ctx , "exporter/enqueue" )
77
84
err := or .Queue .Offer (ctx , req )
85
+ trace .SpanFromContext (ctx ).End ()
86
+
78
87
// No metrics recorded for profiles, remove enqueueFailedInst check with nil when profiles metrics available.
79
88
if err != nil && or .enqueueFailedInst != nil {
80
89
or .enqueueFailedInst .Add (ctx , int64 (numItems ), or .metricAttr )
0 commit comments