Skip to content

Commit 6011466

Browse files
committed
[exporterhelper] move queue metrics to mdatagen
This uses mdatagen to generate the queue metrics. This will allow users to see the metric in the documentation for exporter helper Signed-off-by: Alex Boten <[email protected]>
1 parent a2289fd commit 6011466

File tree

6 files changed

+54
-42
lines changed

6 files changed

+54
-42
lines changed

exporter/exporterhelper/common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func WithQueue(config QueueSettings) Option {
110110
NumConsumers: config.NumConsumers,
111111
QueueSize: config.QueueSize,
112112
})
113-
o.queueSender = newQueueSender(q, o.set, config.NumConsumers, o.exportFailureMessage)
113+
o.queueSender = newQueueSender(q, o.set, config.NumConsumers, o.exportFailureMessage, o.obsrep.telemetryBuilder)
114114
return nil
115115
}
116116
}
@@ -132,7 +132,7 @@ func WithRequestQueue(cfg exporterqueue.Config, queueFactory exporterqueue.Facto
132132
DataType: o.signal,
133133
ExporterSettings: o.set,
134134
}
135-
o.queueSender = newQueueSender(queueFactory(context.Background(), set, cfg), o.set, cfg.NumConsumers, o.exportFailureMessage)
135+
o.queueSender = newQueueSender(queueFactory(context.Background(), set, cfg), o.set, cfg.NumConsumers, o.exportFailureMessage, o.obsrep.telemetryBuilder)
136136
return nil
137137
}
138138
}

exporter/exporterhelper/documentation.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ Number of spans failed to be added to the sending queue.
3030
| ---- | ----------- | ---------- | --------- |
3131
| 1 | Sum | Int | true |
3232

33+
### exporter_queue_capacity
34+
35+
Fixed capacity of the retry queue (in batches)
36+
37+
| Unit | Metric Type | Value Type |
38+
| ---- | ----------- | ---------- |
39+
| 1 | Gauge | Int |
40+
41+
### exporter_queue_size
42+
43+
Current size of the retry queue (in batches)
44+
45+
| Unit | Metric Type | Value Type |
46+
| ---- | ----------- | ---------- |
47+
| 1 | Gauge | Int |
48+
3349
### exporter_send_failed_log_records
3450

3551
Number of log records in failed attempts to send to destination.

exporter/exporterhelper/metadata.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,21 @@ telemetry:
8080
sum:
8181
value_type: int
8282
monotonic: true
83+
84+
exporter_queue_size:
85+
enabled: true
86+
description: Current size of the retry queue (in batches)
87+
unit: 1
88+
optional: true
89+
gauge:
90+
value_type: int
91+
async: true
92+
93+
exporter_queue_capacity:
94+
enabled: true
95+
description: Fixed capacity of the retry queue (in batches)
96+
unit: 1
97+
optional: true
98+
gauge:
99+
value_type: int
100+
async: true

exporter/exporterhelper/obsexporter.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ func NewObsReport(cfg ObsReportSettings) (*ObsReport, error) {
4040
}
4141

4242
func newExporter(cfg ObsReportSettings) (*ObsReport, error) {
43-
telemetryBuilder, err := metadata.NewTelemetryBuilder(cfg.ExporterCreateSettings.TelemetrySettings)
43+
telemetryBuilder, err := metadata.NewTelemetryBuilder(cfg.ExporterCreateSettings.TelemetrySettings,
44+
metadata.WithAttributeSet(attribute.NewSet(attribute.String(obsmetrics.ExporterKey, cfg.ExporterID.String()))),
45+
)
4446
if err != nil {
4547
return nil, err
4648
}

exporter/exporterhelper/queue_sender.go

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import (
99
"time"
1010

1111
"go.opentelemetry.io/otel/attribute"
12-
otelmetric "go.opentelemetry.io/otel/metric"
1312
"go.opentelemetry.io/otel/trace"
1413
"go.uber.org/multierr"
1514
"go.uber.org/zap"
1615

1716
"go.opentelemetry.io/collector/component"
1817
"go.opentelemetry.io/collector/exporter"
18+
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata"
1919
"go.opentelemetry.io/collector/exporter/exporterqueue"
2020
"go.opentelemetry.io/collector/exporter/internal/queue"
2121
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
@@ -73,27 +73,21 @@ func (qCfg *QueueSettings) Validate() error {
7373

7474
type queueSender struct {
7575
baseRequestSender
76-
fullName string
7776
queue exporterqueue.Queue[Request]
7877
numConsumers int
7978
traceAttribute attribute.KeyValue
80-
logger *zap.Logger
81-
meter otelmetric.Meter
8279
consumers *queue.Consumers[Request]
8380

84-
metricCapacity otelmetric.Int64ObservableGauge
85-
metricSize otelmetric.Int64ObservableGauge
81+
telemetryBuilder *metadata.TelemetryBuilder
8682
}
8783

8884
func newQueueSender(q exporterqueue.Queue[Request], set exporter.Settings, numConsumers int,
89-
exportFailureMessage string) *queueSender {
85+
exportFailureMessage string, telemetryBuilder *metadata.TelemetryBuilder) *queueSender {
9086
qs := &queueSender{
91-
fullName: set.ID.String(),
92-
queue: q,
93-
numConsumers: numConsumers,
94-
traceAttribute: attribute.String(obsmetrics.ExporterKey, set.ID.String()),
95-
logger: set.TelemetrySettings.Logger,
96-
meter: set.TelemetrySettings.MeterProvider.Meter(scopeName),
87+
queue: q,
88+
numConsumers: numConsumers,
89+
traceAttribute: attribute.String(obsmetrics.ExporterKey, set.ID.String()),
90+
telemetryBuilder: telemetryBuilder,
9791
}
9892
consumeFunc := func(ctx context.Context, req Request) error {
9993
err := qs.nextSender.send(ctx, req)
@@ -113,32 +107,10 @@ func (qs *queueSender) Start(ctx context.Context, host component.Host) error {
113107
return err
114108
}
115109

116-
var err, errs error
117-
118-
attrs := otelmetric.WithAttributeSet(attribute.NewSet(attribute.String(obsmetrics.ExporterKey, qs.fullName)))
119-
120-
qs.metricSize, err = qs.meter.Int64ObservableGauge(
121-
obsmetrics.ExporterKey+"/queue_size",
122-
otelmetric.WithDescription("Current size of the retry queue (in batches)"),
123-
otelmetric.WithUnit("1"),
124-
otelmetric.WithInt64Callback(func(_ context.Context, o otelmetric.Int64Observer) error {
125-
o.Observe(int64(qs.queue.Size()), attrs)
126-
return nil
127-
}),
110+
return multierr.Append(
111+
qs.telemetryBuilder.InitExporterQueueSize(func() int64 { return int64(qs.queue.Size()) }),
112+
qs.telemetryBuilder.InitExporterQueueCapacity(func() int64 { return int64(qs.queue.Capacity()) }),
128113
)
129-
errs = multierr.Append(errs, err)
130-
131-
qs.metricCapacity, err = qs.meter.Int64ObservableGauge(
132-
obsmetrics.ExporterKey+"/queue_capacity",
133-
otelmetric.WithDescription("Fixed capacity of the retry queue (in batches)"),
134-
otelmetric.WithUnit("1"),
135-
otelmetric.WithInt64Callback(func(_ context.Context, o otelmetric.Int64Observer) error {
136-
o.Observe(int64(qs.queue.Capacity()), attrs)
137-
return nil
138-
}))
139-
140-
errs = multierr.Append(errs, err)
141-
return errs
142114
}
143115

144116
// Shutdown is invoked during service shutdown.

exporter/exporterhelper/queue_sender_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"go.opentelemetry.io/collector/component/componenttest"
1919
"go.opentelemetry.io/collector/config/configretry"
2020
"go.opentelemetry.io/collector/exporter"
21+
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata"
2122
"go.opentelemetry.io/collector/exporter/exporterqueue"
2223
"go.opentelemetry.io/collector/exporter/exportertest"
2324
"go.opentelemetry.io/collector/exporter/internal/queue"
@@ -424,7 +425,10 @@ func TestQueuedRetryPersistentEnabled_NoDataLossOnShutdown(t *testing.T) {
424425

425426
func TestQueueSenderNoStartShutdown(t *testing.T) {
426427
queue := queue.NewBoundedMemoryQueue[Request](queue.MemoryQueueSettings[Request]{})
427-
qs := newQueueSender(queue, exportertest.NewNopSettings(), 1, "")
428+
set := exportertest.NewNopSettings()
429+
builder, err := metadata.NewTelemetryBuilder(set.TelemetrySettings)
430+
assert.NoError(t, err)
431+
qs := newQueueSender(queue, set, 1, "", builder)
428432
assert.NoError(t, qs.Shutdown(context.Background()))
429433
}
430434

0 commit comments

Comments
 (0)