Skip to content

Commit d545fb6

Browse files
authored
[exporterhelper] Fix incorrect deduplication of exporter queue metrics (open-telemetry#10550)
Fix incorrect deduplication of otelcol_exporter_queue_size and otelcol_exporter_queue_capacity metrics if multiple exporters are used. Fixes open-telemetry#10444 The registered callbacks are ignored for now, which is the same behavior as before. Ideally, we would need to unregister them properly.
1 parent b127da0 commit d545fb6

File tree

6 files changed

+98
-57
lines changed

6 files changed

+98
-57
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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: bug_fix
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: exporterhelper
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Fix incorrect deduplication of otelcol_exporter_queue_size and otelcol_exporter_queue_capacity metrics if multiple exporters are used.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10444]
14+
15+
# Optional: The change log or logs in which this entry should be included.
16+
# e.g. '[user]' or '[user, api]'
17+
# Include 'user' if the change is relevant to end users.
18+
# Include 'api' if there is a change to a library API.
19+
# Default: '[user]'
20+
change_logs: []

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

Lines changed: 12 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/templates/telemetry.go.tmpl

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func WithAttributeSet(set attribute.Set) telemetryBuilderOption {
6060
{{- end }}
6161

6262
{{- range $name, $metric := .Telemetry.Metrics }}
63-
{{- if $metric.Optional }}
63+
{{- if $metric.Optional }}
6464
// Init{{ $name.Render }} configures the {{ $name.Render }} metric.
6565
func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async -}}cb func() {{ $metric.Data.BasicType }}{{- end }}) error {
6666
var err error
@@ -71,13 +71,16 @@ func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async
7171
{{- if eq $metric.Data.Type "Histogram" -}}
7272
{{ if $metric.Data.Boundaries -}}metric.WithExplicitBucketBoundaries([]float64{ {{- range $metric.Data.Boundaries }} {{.}}, {{- end }} }...),{{- end }}
7373
{{- end }}
74-
{{ if $metric.Data.Async -}}
75-
metric.With{{ casesTitle $metric.Data.BasicType }}Callback(func(_ context.Context, o metric.{{ casesTitle $metric.Data.BasicType }}Observer) error {
76-
o.Observe(cb(), metric.WithAttributeSet(builder.attributeSet))
77-
return nil
78-
}),
79-
{{- end }}
8074
)
75+
{{- if $metric.Data.Async }}
76+
if err != nil {
77+
return err
78+
}
79+
_, err = builder.meter.RegisterCallback(func(_ context.Context, o metric.Observer) error {
80+
o.Observe{{ casesTitle $metric.Data.BasicType }}(builder.{{ $name.Render }}, cb(), metric.WithAttributeSet(builder.attributeSet))
81+
return nil
82+
}, builder.{{ $name.Render }})
83+
{{- end }}
8184
return err
8285
}
8386

@@ -117,14 +120,15 @@ func NewTelemetryBuilder(settings component.TelemetrySettings, options ...teleme
117120
{{- if eq $metric.Data.Type "Histogram" -}}
118121
{{ if $metric.Data.Boundaries -}}metric.WithExplicitBucketBoundaries([]float64{ {{- range $metric.Data.Boundaries }} {{.}}, {{- end }} }...),{{- end }}
119122
{{- end }}
120-
{{ if $metric.Data.Async -}}
121-
metric.With{{ casesTitle $metric.Data.BasicType }}Callback(func(_ context.Context, o metric.{{ casesTitle $metric.Data.BasicType }}Observer) error {
122-
o.Observe(builder.observe{{ $name.Render }}(), metric.WithAttributeSet(builder.attributeSet))
123-
return nil
124-
}),
125-
{{- end }}
126123
)
127124
errs = errors.Join(errs, err)
125+
{{- if $metric.Data.Async }}
126+
_, err = builder.meter.RegisterCallback(func(_ context.Context, o metric.Observer) error {
127+
o.Observe{{ casesTitle $metric.Data.BasicType }}(builder.{{ $name.Render }}, builder.observe{{ $name.Render }}(), metric.WithAttributeSet(builder.attributeSet))
128+
return nil
129+
}, builder.{{ $name.Render }})
130+
errs = errors.Join(errs, err)
131+
{{- end }}
128132
{{- end }}
129133
{{- end }}
130134
return &builder, errs

exporter/exporterhelper/internal/metadata/generated_telemetry.go

Lines changed: 14 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/batchprocessor/internal/metadata/generated_telemetry.go

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

service/internal/metadata/generated_telemetry.go

Lines changed: 30 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)