Skip to content

Commit 29aefac

Browse files
committed
[mdatagen] Generate wrappers for recording telemetry metrics
1 parent 0831231 commit 29aefac

File tree

27 files changed

+261
-107
lines changed

27 files changed

+261
-107
lines changed

.chloggen/tel_metric_attributes.yaml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: mdatagen
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Generate wrappers for telemetry metrics as a first step towards configurable attributes
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10801]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: []

cmd/mdatagen/internal/command_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ func TestRunContents(t *testing.T) {
116116
},
117117
{
118118
yml: "with_telemetry.yaml",
119+
wantMetricsContext: true,
119120
wantStatusGenerated: true,
120121
wantTelemetryGenerated: true,
121122
},

cmd/mdatagen/internal/samplereceiver/factory.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func createMetrics(ctx context.Context, set receiver.Settings, _ component.Confi
4141
return nil, err
4242
}
4343

44-
telemetryBuilder.BatchSizeTriggerSend.Add(ctx, 1)
44+
telemetryBuilder.RecordBatchSizeTriggerSend(ctx, 1)
4545
return nopReceiver{telemetryBuilder: telemetryBuilder}, nil
4646
}
4747

cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest_test.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/internal/templates/telemetry.go.tmpl

+11-7
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,9 @@ package {{ .Package }}
44

55
import (
66
{{- if .Telemetry.Metrics }}
7-
{{- range $_, $metric := .Telemetry.Metrics }}
8-
{{- if $metric.Data.Async }}
97
"context"
10-
"sync"
11-
12-
{{- break}}
13-
{{- end }}
14-
{{- end }}
158
"errors"
9+
"sync"
1610
{{- end }}
1711

1812
"go.opentelemetry.io/otel/metric"
@@ -143,3 +137,13 @@ func NewTelemetryBuilder(settings component.TelemetrySettings, options ...Teleme
143137
}
144138

145139
{{- end }}
140+
141+
{{- range $name, $metric := .Telemetry.Metrics }}
142+
{{- if not $metric.Data.Async }}
143+
144+
func (builder *TelemetryBuilder) Record{{ $name.Render }}(ctx context.Context, val {{ $metric.Data.BasicType }}, opts ...metric.{{- if eq $metric.Data.Type "Sum" -}}Add{{- else -}}Record{{- end -}}Option) {
145+
builder.{{ $name.Render }}.{{- if eq $metric.Data.Type "Sum" -}}Add{{- else -}}Record{{- end -}}(ctx, val, opts...)
146+
}
147+
148+
{{- end }}
149+
{{- end }}

cmd/mdatagen/internal/templates/telemetrytest_test.go.tmpl

+2-6
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,8 @@ func TestSetupTelemetry(t *testing.T) {
2929
{{- end }}
3030

3131
{{- range $name, $metric := .Telemetry.Metrics }}
32-
{{- if not $metric.Data.Async }}
33-
{{- if eq $metric.Data.Type "Sum" }}
34-
tb.{{ $name.Render }}.Add(context.Background(), 1)
35-
{{- else }}
36-
tb.{{ $name.Render }}.Record(context.Background(), 1)
37-
{{- end }}
32+
{{- if (and (not $metric.Optional) (not $metric.Data.Async)) }}
33+
tb.Record{{ $name.Render }}(context.Background(), 1)
3834
{{- end }}
3935
{{- end }}
4036

docs/coding-guidelines.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ To record the measurement, you can then call the metric stored in the telemetry
290290
builder:
291291

292292
```go
293-
tsp.telemetry.ProcessorTailsamplingSamplingdecisionLatency.Record(ctx, ...)
293+
tsp.telemetry.RecordProcessorTailsamplingSamplingdecisionLatency(ctx, ...)
294294
```
295295

296296
## Resource Usage

exporter/exporterhelper/internal/metadata/generated_telemetry.go

+36
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

exporter/exporterhelper/internal/metadatatest/generated_telemetrytest_test.go

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

exporter/exporterhelper/internal/obs_report_sender.go

+24-32
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ type obsReportSender[K request.Request] struct {
3838
component.StartFunc
3939
component.ShutdownFunc
4040

41-
spanName string
42-
tracer trace.Tracer
43-
spanAttrs trace.SpanStartEventOption
44-
metricAttr metric.MeasurementOption
45-
itemsSentInst metric.Int64Counter
46-
itemsFailedInst metric.Int64Counter
47-
next Sender[K]
41+
spanName string
42+
tracer trace.Tracer
43+
signal pipeline.Signal
44+
spanAttrs trace.SpanStartEventOption
45+
metricAttr metric.MeasurementOption
46+
next Sender[K]
47+
telemetryBuilder *metadata.TelemetryBuilder
4848
}
4949

5050
func newObsReportSender[K request.Request](set exporter.Settings, signal pipeline.Signal, next Sender[K]) (Sender[K], error) {
@@ -57,25 +57,13 @@ func newObsReportSender[K request.Request](set exporter.Settings, signal pipelin
5757
expAttr := attribute.String(ExporterKey, idStr)
5858

5959
or := &obsReportSender[K]{
60-
spanName: ExporterKey + spanNameSep + idStr + spanNameSep + signal.String(),
61-
tracer: metadata.Tracer(set.TelemetrySettings),
62-
spanAttrs: trace.WithAttributes(expAttr, attribute.String(DataTypeKey, signal.String())),
63-
metricAttr: metric.WithAttributeSet(attribute.NewSet(expAttr)),
64-
next: next,
65-
}
66-
67-
switch signal {
68-
case pipeline.SignalTraces:
69-
or.itemsSentInst = telemetryBuilder.ExporterSentSpans
70-
or.itemsFailedInst = telemetryBuilder.ExporterSendFailedSpans
71-
72-
case pipeline.SignalMetrics:
73-
or.itemsSentInst = telemetryBuilder.ExporterSentMetricPoints
74-
or.itemsFailedInst = telemetryBuilder.ExporterSendFailedMetricPoints
75-
76-
case pipeline.SignalLogs:
77-
or.itemsSentInst = telemetryBuilder.ExporterSentLogRecords
78-
or.itemsFailedInst = telemetryBuilder.ExporterSendFailedLogRecords
60+
spanName: ExporterKey + spanNameSep + idStr + spanNameSep + signal.String(),
61+
tracer: metadata.Tracer(set.TelemetrySettings),
62+
signal: signal,
63+
spanAttrs: trace.WithAttributes(expAttr, attribute.String(DataTypeKey, signal.String())),
64+
metricAttr: metric.WithAttributeSet(attribute.NewSet(expAttr)),
65+
next: next,
66+
telemetryBuilder: telemetryBuilder,
7967
}
8068

8169
return or, nil
@@ -104,12 +92,16 @@ func (ors *obsReportSender[K]) endOp(ctx context.Context, numLogRecords int, err
10492
numSent, numFailedToSend := toNumItems(numLogRecords, err)
10593

10694
// No metrics recorded for profiles.
107-
if ors.itemsSentInst != nil {
108-
ors.itemsSentInst.Add(ctx, numSent, ors.metricAttr)
109-
}
110-
// No metrics recorded for profiles.
111-
if ors.itemsFailedInst != nil {
112-
ors.itemsFailedInst.Add(ctx, numFailedToSend, ors.metricAttr)
95+
switch ors.signal {
96+
case pipeline.SignalTraces:
97+
ors.telemetryBuilder.RecordExporterSentSpans(ctx, numSent, ors.metricAttr)
98+
ors.telemetryBuilder.RecordExporterSendFailedSpans(ctx, numFailedToSend, ors.metricAttr)
99+
case pipeline.SignalMetrics:
100+
ors.telemetryBuilder.RecordExporterSentMetricPoints(ctx, numSent, ors.metricAttr)
101+
ors.telemetryBuilder.RecordExporterSendFailedMetricPoints(ctx, numFailedToSend, ors.metricAttr)
102+
case pipeline.SignalLogs:
103+
ors.telemetryBuilder.RecordExporterSentLogRecords(ctx, numSent, ors.metricAttr)
104+
ors.telemetryBuilder.RecordExporterSendFailedLogRecords(ctx, numFailedToSend, ors.metricAttr)
113105
}
114106

115107
span := trace.SpanFromContext(ctx)

processor/batchprocessor/internal/metadata/generated_telemetry.go

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/batchprocessor/internal/metadatatest/generated_telemetrytest_test.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/batchprocessor/metrics.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ func newBatchProcessorTelemetry(set processor.Settings, currentMetadataCardinali
5353
func (bpt *batchProcessorTelemetry) record(trigger trigger, sent, bytes int64) {
5454
switch trigger {
5555
case triggerBatchSize:
56-
bpt.telemetryBuilder.ProcessorBatchBatchSizeTriggerSend.Add(bpt.exportCtx, 1, bpt.processorAttr)
56+
bpt.telemetryBuilder.RecordProcessorBatchBatchSizeTriggerSend(bpt.exportCtx, 1, bpt.processorAttr)
5757
case triggerTimeout:
58-
bpt.telemetryBuilder.ProcessorBatchTimeoutTriggerSend.Add(bpt.exportCtx, 1, bpt.processorAttr)
58+
bpt.telemetryBuilder.RecordProcessorBatchTimeoutTriggerSend(bpt.exportCtx, 1, bpt.processorAttr)
5959
}
6060

61-
bpt.telemetryBuilder.ProcessorBatchBatchSendSize.Record(bpt.exportCtx, sent, bpt.processorAttr)
62-
bpt.telemetryBuilder.ProcessorBatchBatchSendSizeBytes.Record(bpt.exportCtx, bytes, bpt.processorAttr)
61+
bpt.telemetryBuilder.RecordProcessorBatchBatchSendSize(bpt.exportCtx, sent, bpt.processorAttr)
62+
bpt.telemetryBuilder.RecordProcessorBatchBatchSendSizeBytes(bpt.exportCtx, bytes, bpt.processorAttr)
6363
}

processor/memorylimiterprocessor/internal/metadata/generated_telemetry.go

+25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest_test.go

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)