Skip to content

Commit 52a9520

Browse files
authored
mdatagen: support setting telemetry level in telemetry builder (#10234)
This allows components to set the minimum level needed for them to produce telemetry. By default, this is set to `configtelemetryLevelBasic`. If the telemetry level is below that minimum level, then the noop meter is used for metrics. --------- Signed-off-by: Alex Boten <[email protected]>
1 parent c7c3401 commit 52a9520

File tree

15 files changed

+208
-26
lines changed

15 files changed

+208
-26
lines changed
Lines changed: 25 additions & 0 deletions
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: support using telemetry level in telemetry builder
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10234]
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: This allows components to set the minimum level needed for them to produce telemetry. By default, this is set to configtelemetry.LevelBasic. If the telemetry level is below that minimum level, then the noop meter is used for metrics.
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: []
Lines changed: 25 additions & 0 deletions
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: bug_fix
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: batchprocessor
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: respect telemetry level for all metrics
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10234]
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/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/google/go-cmp v0.6.0
77
github.com/stretchr/testify v1.9.0
88
go.opentelemetry.io/collector/component v0.101.0
9+
go.opentelemetry.io/collector/config/configtelemetry v0.101.0
910
go.opentelemetry.io/collector/confmap v0.101.0
1011
go.opentelemetry.io/collector/confmap/provider/fileprovider v0.101.0
1112
go.opentelemetry.io/collector/consumer v0.101.0
@@ -43,7 +44,6 @@ require (
4344
github.com/prometheus/client_model v0.6.1 // indirect
4445
github.com/prometheus/common v0.53.0 // indirect
4546
github.com/prometheus/procfs v0.15.0 // indirect
46-
go.opentelemetry.io/collector/config/configtelemetry v0.101.0 // indirect
4747
go.opentelemetry.io/otel v1.27.0 // indirect
4848
go.opentelemetry.io/otel/exporters/prometheus v0.49.0 // indirect
4949
go.opentelemetry.io/otel/sdk v1.27.0 // indirect

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

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

cmd/mdatagen/loader.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"path/filepath"
1212
"strings"
1313

14+
"go.opentelemetry.io/collector/config/configtelemetry"
1415
"go.opentelemetry.io/collector/confmap"
1516
"go.opentelemetry.io/collector/confmap/confmaptest"
1617
"go.opentelemetry.io/collector/confmap/provider/fileprovider"
@@ -227,6 +228,7 @@ type tests struct {
227228
}
228229

229230
type telemetry struct {
231+
Level configtelemetry.Level `mapstructure:"level"`
230232
Metrics map[metricName]metric `mapstructure:"metrics"`
231233
}
232234

cmd/mdatagen/main_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,9 +538,12 @@ func TestGenerateTelemetryMetadata(t *testing.T) {
538538
package metadata
539539
540540
import (
541-
"go.opentelemetry.io/collector/component"
542541
"go.opentelemetry.io/otel/metric"
542+
"go.opentelemetry.io/otel/metric/noop"
543543
"go.opentelemetry.io/otel/trace"
544+
545+
"go.opentelemetry.io/collector/component"
546+
"go.opentelemetry.io/collector/config/configtelemetry"
544547
)
545548
546549
func Meter(settings component.TelemetrySettings) metric.Meter {
@@ -569,9 +572,12 @@ func Tracer(settings component.TelemetrySettings) trace.Tracer {
569572
package metadata
570573
571574
import (
572-
"go.opentelemetry.io/collector/component"
573575
"go.opentelemetry.io/otel/metric"
576+
"go.opentelemetry.io/otel/metric/noop"
574577
"go.opentelemetry.io/otel/trace"
578+
579+
"go.opentelemetry.io/collector/component"
580+
"go.opentelemetry.io/collector/config/configtelemetry"
575581
)
576582
577583
func Meter(settings component.TelemetrySettings) metric.Meter {

cmd/mdatagen/metadata-schema.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ tests:
130130
# Optional: map of metric names with the key being the metric name and value
131131
# being described below.
132132
telemetry:
133+
# Optional: level allows components to specify the minimum telemetry level for metrics to be produced. defaults to basic if not set.
134+
level: string
133135
metrics:
134136
<metric.name>:
135137
# Required: whether the metric is collected by default.

cmd/mdatagen/templates/telemetry.go.tmpl

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ import (
88
"errors"
99
{{- end }}
1010

11-
"go.opentelemetry.io/collector/component"
1211
"go.opentelemetry.io/otel/metric"
12+
"go.opentelemetry.io/otel/metric/noop"
1313
"go.opentelemetry.io/otel/trace"
14+
15+
"go.opentelemetry.io/collector/component"
16+
"go.opentelemetry.io/collector/config/configtelemetry"
1417
)
1518

1619
func Meter(settings component.TelemetrySettings) metric.Meter {
@@ -31,11 +34,19 @@ type TelemetryBuilder struct {
3134
observe{{ $name.Render }} func() {{ $metric.Data.BasicType }}
3235
{{- end }}
3336
{{- end }}
37+
level configtelemetry.Level
3438
}
3539

3640
// telemetryBuilderOption applies changes to default builder.
3741
type telemetryBuilderOption func(*TelemetryBuilder)
3842

43+
// WithLevel sets the current telemetry level for the component.
44+
func WithLevel(lvl configtelemetry.Level) telemetryBuilderOption {
45+
return func(builder *TelemetryBuilder) {
46+
builder.level = lvl
47+
}
48+
}
49+
3950
{{- range $name, $metric := .Telemetry.Metrics }}
4051
{{ if $metric.Data.Async -}}
4152
// With{{ $name.Render }}Callback sets callback for observable {{ $name.Render }} metric.
@@ -50,12 +61,20 @@ func With{{ $name.Render }}Callback(cb func() {{ $metric.Data.BasicType }}) tele
5061
// NewTelemetryBuilder provides a struct with methods to update all internal telemetry
5162
// for a component
5263
func NewTelemetryBuilder(settings component.TelemetrySettings, options ...telemetryBuilderOption) (*TelemetryBuilder, error) {
53-
builder := TelemetryBuilder{}
64+
builder := TelemetryBuilder{level: configtelemetry.LevelBasic}
5465
for _, op := range options {
5566
op(&builder)
5667
}
57-
var err, errs error
58-
meter := Meter(settings)
68+
var (
69+
err, errs error
70+
meter metric.Meter
71+
)
72+
if builder.level >= configtelemetry.Level{{ casesTitle .Telemetry.Level.String }} {
73+
meter = Meter(settings)
74+
} else {
75+
meter = noop.Meter{}
76+
}
77+
5978
{{- range $name, $metric := .Telemetry.Metrics }}
6079
builder.{{ $name.Render }}, err = meter.{{ $metric.Data.Instrument }}(
6180
"{{ $name }}",

exporter/exporterhelper/internal/metadata/generated_telemetry.go

Lines changed: 20 additions & 3 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: 20 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/batchprocessor/metadata.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ status:
99
tests:
1010

1111
telemetry:
12+
level: normal
1213
metrics:
1314
processor_batch_batch_size_trigger_send:
1415
enabled: true

processor/batchprocessor/metrics.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (bpt *batchProcessorTelemetry) createOtelMetrics(set component.TelemetrySet
6666
meter = noopmetric.Meter{}
6767
}
6868

69-
bpt.telemetryBuilder, err = metadata.NewTelemetryBuilder(set)
69+
bpt.telemetryBuilder, err = metadata.NewTelemetryBuilder(set, metadata.WithLevel(bpt.level))
7070
errors = multierr.Append(errors, err)
7171

7272
bpt.batchMetadataCardinality, err = meter.Int64ObservableUpDownCounter(

0 commit comments

Comments
 (0)