Skip to content

Commit d2068ac

Browse files
committed
Distributed internal metrics across different levels
The internal metrics levels are updated along with reported metrics: - The default level is changed from `basic` to `normal`, which can be overridden with `service::telmetry::metrics::level` configuration. - Batch processor metrics are updated to be reported starting from `normal` level: - `processor_batch_batch_send_size` - `processor_batch_metadata_cardinality` - `processor_batch_timeout_trigger_send` - `processor_batch_size_trigger_send` - GRPC/HTTP server and client metrics are updated to be reported starting from `detailed` level: - http.client.* metrics - http.server.* metrics - rpc.server.* metrics - rpc.client.* metrics
1 parent 8574df3 commit d2068ac

File tree

5 files changed

+77
-18
lines changed

5 files changed

+77
-18
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: telemetry
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Distributed internal metrics across different levels.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [7890]
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+
The internal metrics levels are updated along with reported metrics:
20+
- The default level is changed from `basic` to `normal`, which can be overridden with `service::telmetry::metrics::level` configuration.
21+
- Batch processor metrics are updated to be reported starting from `normal` level:
22+
- `processor_batch_batch_send_size`
23+
- `processor_batch_metadata_cardinality`
24+
- `processor_batch_timeout_trigger_send`
25+
- `processor_batch_size_trigger_send`
26+
- GRPC/HTTP server and client metrics are updated to be reported starting from `detailed` level:
27+
- http.client.* metrics
28+
- http.server.* metrics
29+
- rpc.server.* metrics
30+
- rpc.client.* metrics
31+
32+
# Optional: The change log or logs in which this entry should be included.
33+
# e.g. '[user]' or '[user, api]'
34+
# Include 'user' if the change is relevant to end users.
35+
# Include 'api' if there is a change to a library API.
36+
# Default: '[user]'
37+
change_logs: [user]

config/configgrpc/configgrpc.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"go.opentelemetry.io/collector/config/configcompression"
3131
"go.opentelemetry.io/collector/config/confignet"
3232
"go.opentelemetry.io/collector/config/configopaque"
33+
"go.opentelemetry.io/collector/config/configtelemetry"
3334
"go.opentelemetry.io/collector/config/configtls"
3435
"go.opentelemetry.io/collector/config/internal"
3536
"go.opentelemetry.io/collector/extension/auth"
@@ -253,9 +254,11 @@ func (gcs *ClientConfig) toDialOptions(host component.Host, settings component.T
253254

254255
otelOpts := []otelgrpc.Option{
255256
otelgrpc.WithTracerProvider(settings.TracerProvider),
256-
otelgrpc.WithMeterProvider(settings.MeterProvider),
257257
otelgrpc.WithPropagators(otel.GetTextMapPropagator()),
258258
}
259+
if settings.MetricsLevel >= configtelemetry.LevelDetailed {
260+
otelOpts = append(otelOpts, otelgrpc.WithMeterProvider(settings.MeterProvider))
261+
}
259262

260263
// Enable OpenTelemetry observability plugin.
261264
opts = append(opts, grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelOpts...)))
@@ -362,9 +365,11 @@ func (gss *ServerConfig) toServerOption(host component.Host, settings component.
362365

363366
otelOpts := []otelgrpc.Option{
364367
otelgrpc.WithTracerProvider(settings.TracerProvider),
365-
otelgrpc.WithMeterProvider(settings.MeterProvider),
366368
otelgrpc.WithPropagators(otel.GetTextMapPropagator()),
367369
}
370+
if settings.MetricsLevel >= configtelemetry.LevelDetailed {
371+
otelOpts = append(otelOpts, otelgrpc.WithMeterProvider(settings.MeterProvider))
372+
}
368373

369374
// Enable OpenTelemetry observability plugin.
370375

config/confighttp/confighttp.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"go.opentelemetry.io/collector/config/configauth"
2323
"go.opentelemetry.io/collector/config/configcompression"
2424
"go.opentelemetry.io/collector/config/configopaque"
25+
"go.opentelemetry.io/collector/config/configtelemetry"
2526
"go.opentelemetry.io/collector/config/configtls"
2627
"go.opentelemetry.io/collector/config/internal"
2728
"go.opentelemetry.io/collector/extension/auth"
@@ -205,14 +206,17 @@ func (hcs *ClientConfig) ToClient(host component.Host, settings component.Teleme
205206
}
206207
}
207208

209+
otelOpts := []otelhttp.Option{
210+
otelhttp.WithTracerProvider(settings.TracerProvider),
211+
otelhttp.WithPropagators(otel.GetTextMapPropagator()),
212+
}
213+
if settings.MetricsLevel >= configtelemetry.LevelDetailed {
214+
otelOpts = append(otelOpts, otelhttp.WithMeterProvider(settings.MeterProvider))
215+
}
216+
208217
// wrapping http transport with otelhttp transport to enable otel instrumentation
209218
if settings.TracerProvider != nil && settings.MeterProvider != nil {
210-
clientTransport = otelhttp.NewTransport(
211-
clientTransport,
212-
otelhttp.WithTracerProvider(settings.TracerProvider),
213-
otelhttp.WithMeterProvider(settings.MeterProvider),
214-
otelhttp.WithPropagators(otel.GetTextMapPropagator()),
215-
)
219+
clientTransport = otelhttp.NewTransport(clientTransport, otelOpts...)
216220
}
217221

218222
if hcs.CustomRoundTripper != nil {
@@ -366,18 +370,20 @@ func (hss *ServerConfig) ToServer(host component.Host, settings component.Teleme
366370
handler = responseHeadersHandler(handler, hss.ResponseHeaders)
367371
}
368372

369-
// Enable OpenTelemetry observability plugin.
370-
// TODO: Consider to use component ID string as prefix for all the operations.
371-
handler = otelhttp.NewHandler(
372-
handler,
373-
"",
373+
otelOpts := []otelhttp.Option{
374374
otelhttp.WithTracerProvider(settings.TracerProvider),
375-
otelhttp.WithMeterProvider(settings.MeterProvider),
376375
otelhttp.WithPropagators(otel.GetTextMapPropagator()),
377376
otelhttp.WithSpanNameFormatter(func(_ string, r *http.Request) string {
378377
return r.URL.Path
379378
}),
380-
)
379+
}
380+
if settings.MetricsLevel >= configtelemetry.LevelDetailed {
381+
otelOpts = append(otelOpts, otelhttp.WithMeterProvider(settings.MeterProvider))
382+
}
383+
384+
// Enable OpenTelemetry observability plugin.
385+
// TODO: Consider to use component ID string as prefix for all the operations.
386+
handler = otelhttp.NewHandler(handler, "http", otelOpts...)
381387

382388
// wrap the current handler in an interceptor that will add client.Info to the request's context
383389
handler = &clientInfoHandler{

otelcol/unmarshaler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func unmarshal(v *confmap.Conf, factories Factories) (*configSettings, error) {
5959
InitialFields: map[string]any(nil),
6060
},
6161
Metrics: telemetry.MetricsConfig{
62-
Level: configtelemetry.LevelBasic,
62+
Level: configtelemetry.LevelNormal,
6363
Address: ":8888",
6464
},
6565
},

processor/batchprocessor/metrics.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"go.opentelemetry.io/otel/attribute"
1010
"go.opentelemetry.io/otel/metric"
11+
noopmetric "go.opentelemetry.io/otel/metric/noop"
1112
"go.uber.org/multierr"
1213

1314
"go.opentelemetry.io/collector/component"
@@ -56,8 +57,18 @@ func newBatchProcessorTelemetry(set processor.CreateSettings, currentMetadataCar
5657
}
5758

5859
func (bpt *batchProcessorTelemetry) createOtelMetrics(set component.TelemetrySettings, currentMetadataCardinality func() int) error {
59-
var errors, err error
60-
meter := metadata.Meter(set)
60+
var (
61+
errors, err error
62+
meter metric.Meter
63+
)
64+
65+
// BatchProcessor metrics are not subject to the same level of filtering as other components.
66+
// They are emitted starting from Normal level.
67+
if bpt.level >= configtelemetry.LevelNormal {
68+
meter = metadata.Meter(set)
69+
} else {
70+
meter = noopmetric.Meter{}
71+
}
6172

6273
bpt.batchSizeTriggerSend, err = meter.Int64Counter(
6374
processorhelper.BuildCustomMetricName(typeStr, "batch_size_trigger_send"),

0 commit comments

Comments
 (0)