Skip to content

Commit d742afd

Browse files
committed
fix test
Signed-off-by: Alex Boten <[email protected]>
1 parent f36069b commit d742afd

File tree

3 files changed

+148
-40
lines changed

3 files changed

+148
-40
lines changed

service/service.go

Lines changed: 121 additions & 29 deletions
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 {
@@ -230,8 +230,7 @@ func logsAboutMeterProvider(logger *zap.Logger, cfg telemetry.MetricsConfig, mp
230230
return
231231
}
232232

233-
//nolint:staticcheck
234-
if len(cfg.Address) != 0 {
233+
if len(cfg.Address) != 0 { //nolint SA1019
235234
logger.Warn("service::telemetry::metrics::address is being deprecated in favor of service::telemetry::metrics::readers")
236235
}
237236

@@ -385,40 +384,133 @@ func pdataFromSdk(res *sdkresource.Resource) pcommon.Resource {
385384
return pcommonRes
386385
}
387386

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

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

service/telemetry/config.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,14 @@ func (c *Config) Unmarshal(conf *confmap.Conf) error {
6868
return nil
6969
}
7070

71-
if len(c.Metrics.Address) != 0 { // nolint SA1019
72-
host, port, err := net.SplitHostPort(c.Metrics.Address) // nolint SA1019
71+
if len(c.Metrics.Address) != 0 { //nolint SA1019
72+
host, port, err := net.SplitHostPort(c.Metrics.Address) //nolint SA1019
7373
if err != nil {
74-
return fmt.Errorf("failing to parse metrics address %q: %w", c.Metrics.Address, err) // nolint SA1019
74+
return fmt.Errorf("failing to parse metrics address %q: %w", c.Metrics.Address, err) //nolint SA1019
7575
}
7676
portInt, err := strconv.Atoi(port)
7777
if err != nil {
78-
return fmt.Errorf("failing to extract the port from the metrics address %q: %w", c.Metrics.Address, err) // nolint SA1019
78+
return fmt.Errorf("failing to extract the port from the metrics address %q: %w", c.Metrics.Address, err) //nolint SA1019
7979
}
8080

8181
// User did not overwrite readers, so we will remove the default configured reader.

service/telemetry/metrics_test.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
config "go.opentelemetry.io/contrib/config/v0.3.0"
1818
"go.opentelemetry.io/otel/attribute"
1919
"go.opentelemetry.io/otel/metric"
20-
sdkresource "go.opentelemetry.io/otel/sdk/resource"
2120

2221
"go.opentelemetry.io/collector/config/configtelemetry"
2322
semconv "go.opentelemetry.io/collector/semconv/v1.18.0"
@@ -215,17 +214,32 @@ func getMetricsFromPrometheus(t *testing.T, endpoint string) map[string]*io_prom
215214
// See https://pkg.go.dev/go.opentelemetry.io/otel/sdk/metric/internal/x#readme-instrument-enabled.
216215
func TestInstrumentEnabled(t *testing.T) {
217216
prom := promtest.GetAvailableLocalAddressPrometheus(t)
218-
set := meterProviderSettings{
219-
res: sdkresource.Default(),
220-
cfg: MetricsConfig{
217+
cfg := Config{
218+
Metrics: MetricsConfig{
221219
Level: configtelemetry.LevelDetailed,
222220
Readers: []config.MetricReader{{
223-
Pull: &config.PullMetricReader{Exporter: config.MetricExporter{Prometheus: prom}},
221+
Pull: &config.PullMetricReader{Exporter: config.PullMetricExporter{Prometheus: prom}},
224222
}},
225223
},
226-
asyncErrorChannel: make(chan error),
227224
}
228-
meterProvider, err := newMeterProvider(set, false)
225+
sdk, err := config.NewSDK(
226+
config.WithContext(context.Background()),
227+
config.WithOpenTelemetryConfiguration(config.OpenTelemetryConfiguration{
228+
MeterProvider: &config.MeterProvider{
229+
Readers: cfg.Metrics.Readers,
230+
},
231+
Resource: &config.Resource{
232+
SchemaUrl: ptr(""),
233+
Attributes: []config.AttributeNameValue{
234+
{Name: semconv.AttributeServiceInstanceID, Value: testInstanceID},
235+
{Name: semconv.AttributeServiceName, Value: "otelcol"},
236+
{Name: semconv.AttributeServiceVersion, Value: "latest"},
237+
},
238+
},
239+
}),
240+
)
241+
require.NoError(t, err)
242+
meterProvider, err := newMeterProvider(Settings{SDK: &sdk}, cfg)
229243
defer func() {
230244
if prov, ok := meterProvider.(interface{ Shutdown(context.Context) error }); ok {
231245
require.NoError(t, prov.Shutdown(context.Background()))
@@ -276,6 +290,8 @@ func TestInstrumentEnabled(t *testing.T) {
276290
require.NoError(t, err)
277291
_, ok = floatGauge.(enabledInstrument)
278292
assert.True(t, ok, "Float64Gauge does not implement the experimental 'Enabled' method")
293+
}
294+
279295
func ptr[T any](v T) *T {
280296
return &v
281297
}

0 commit comments

Comments
 (0)