Skip to content

Commit 52c4f85

Browse files
committed
reintroduce logic to drop noisy metrics
Signed-off-by: Alex Boten <[email protected]>
1 parent 7590bed commit 52c4f85

File tree

1 file changed

+120
-27
lines changed

1 file changed

+120
-27
lines changed

Diff for: service/service.go

+120-27
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
130130

131131
sch := semconv.SchemaURL
132132

133-
views := disableHighCardinalityMetrics()
133+
views := configureViews(cfg.Telemetry.Metrics.Level)
134134

135135
readers := cfg.Telemetry.Metrics.Readers
136136
if cfg.Telemetry.Metrics.Level == configtelemetry.LevelNone {
@@ -385,40 +385,133 @@ func pdataFromSdk(res *sdkresource.Resource) pcommon.Resource {
385385
return pcommonRes
386386
}
387387

388-
func disableHighCardinalityMetrics() []config.View {
389-
var views []config.View
390-
if disableHighCardinalityMetricsFeatureGate.IsEnabled() {
391-
return views
392-
}
393-
return []config.View{
394-
{
395-
Selector: &config.ViewSelector{
396-
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"),
388+
func dropViewOption(selector *config.ViewSelector) config.View {
389+
return config.View{
390+
Selector: selector,
391+
Stream: &config.ViewStream{
392+
Aggregation: &config.ViewStreamAggregation{
393+
Drop: config.ViewStreamAggregationDrop{},
397394
},
398-
Stream: &config.ViewStream{
399-
AttributeKeys: &config.IncludeExclude{
400-
Excluded: []string{
401-
semconv118.AttributeNetSockPeerAddr,
402-
semconv118.AttributeNetSockPeerPort,
403-
semconv118.AttributeNetSockPeerName,
395+
},
396+
}
397+
}
398+
399+
func configureViews(level configtelemetry.Level) []config.View {
400+
views := []config.View{}
401+
402+
if disableHighCardinalityMetricsFeatureGate.IsEnabled() {
403+
views = append(views, []config.View{
404+
{
405+
Selector: &config.ViewSelector{
406+
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"),
407+
},
408+
Stream: &config.ViewStream{
409+
AttributeKeys: &config.IncludeExclude{
410+
Excluded: []string{
411+
semconv118.AttributeNetSockPeerAddr,
412+
semconv118.AttributeNetSockPeerPort,
413+
semconv118.AttributeNetSockPeerName,
414+
},
404415
},
405416
},
406417
},
407-
},
408-
{
409-
Selector: &config.ViewSelector{
410-
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"),
411-
},
412-
Stream: &config.ViewStream{
413-
AttributeKeys: &config.IncludeExclude{
414-
Excluded: []string{
415-
semconv118.AttributeNetHostName,
416-
semconv118.AttributeNetHostPort,
418+
{
419+
Selector: &config.ViewSelector{
420+
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"),
421+
},
422+
Stream: &config.ViewStream{
423+
AttributeKeys: &config.IncludeExclude{
424+
Excluded: []string{
425+
semconv118.AttributeNetHostName,
426+
semconv118.AttributeNetHostPort,
427+
},
417428
},
418429
},
419430
},
420-
},
431+
}...)
432+
}
433+
434+
if level < configtelemetry.LevelDetailed {
435+
// Drop all otelhttp and otelgrpc metrics if the level is not detailed.
436+
views = append(views,
437+
dropViewOption(&config.ViewSelector{
438+
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"),
439+
}),
440+
dropViewOption(&config.ViewSelector{
441+
MeterName: ptr("go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"),
442+
}),
443+
)
444+
}
445+
446+
// otel-arrow library metrics
447+
// See https://github.com/open-telemetry/otel-arrow/blob/c39257/pkg/otel/arrow_record/consumer.go#L174-L176
448+
if level < configtelemetry.LevelNormal {
449+
scope := ptr("otel-arrow/pkg/otel/arrow_record")
450+
views = append(views,
451+
dropViewOption(&config.ViewSelector{
452+
MeterName: scope,
453+
InstrumentName: ptr("arrow_batch_records"),
454+
}),
455+
dropViewOption(&config.ViewSelector{
456+
MeterName: scope,
457+
InstrumentName: ptr("arrow_schema_resets"),
458+
}),
459+
dropViewOption(&config.ViewSelector{
460+
MeterName: scope,
461+
InstrumentName: ptr("arrow_memory_inuse"),
462+
}),
463+
)
464+
}
465+
466+
// contrib's internal/otelarrow/netstats metrics
467+
// See
468+
// - https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/a25f05/internal/otelarrow/netstats/netstats.go#L130
469+
// - https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/a25f05/internal/otelarrow/netstats/netstats.go#L165
470+
if level < configtelemetry.LevelDetailed {
471+
scope := ptr("github.com/open-telemetry/opentelemetry-collector-contrib/internal/otelarrow/netstats")
472+
473+
views = append(views,
474+
// Compressed size metrics.
475+
dropViewOption(&config.ViewSelector{
476+
MeterName: scope,
477+
InstrumentName: ptr("otelcol_*_compressed_size"),
478+
}),
479+
dropViewOption(&config.ViewSelector{
480+
MeterName: scope,
481+
InstrumentName: ptr("otelcol_*_compressed_size"),
482+
}),
483+
484+
// makeRecvMetrics for exporters.
485+
dropViewOption(&config.ViewSelector{
486+
MeterName: scope,
487+
InstrumentName: ptr("otelcol_exporter_recv"),
488+
}),
489+
dropViewOption(&config.ViewSelector{
490+
MeterName: scope,
491+
InstrumentName: ptr("otelcol_exporter_recv_wire"),
492+
}),
493+
494+
// makeSentMetrics for receivers.
495+
dropViewOption(&config.ViewSelector{
496+
MeterName: scope,
497+
InstrumentName: ptr("otelcol_receiver_sent"),
498+
}),
499+
dropViewOption(&config.ViewSelector{
500+
MeterName: scope,
501+
InstrumentName: ptr("otelcol_receiver_sent_wire"),
502+
}),
503+
)
504+
}
505+
506+
// Batch processor metrics
507+
if level < configtelemetry.LevelDetailed {
508+
scope := ptr("go.opentelemetry.io/collector/processor/batchprocessor")
509+
views = append(views, dropViewOption(&config.ViewSelector{
510+
MeterName: scope,
511+
InstrumentName: ptr("otelcol_processor_batch_batch_send_size_bytes"),
512+
}))
421513
}
514+
return views
422515
}
423516

424517
func ptr[T any](v T) *T {

0 commit comments

Comments
 (0)