From 93e90048bdfd9cbedb130fe2ae22d305975853bd Mon Sep 17 00:00:00 2001 From: Corbin Phelps Date: Mon, 26 Sep 2022 21:07:11 -0400 Subject: [PATCH] Changed how the telemetryInitializer is created (#6138) * Changed how the telemetryInitializer is created to make it so it's not global Signed-off-by: Corbin Phelps * Updated changelog Signed-off-by: Corbin Phelps * Fixed linter error Signed-off-by: Corbin Phelps * Moved register of Internal Metrics Featuregate to an init function and removed once logic Signed-off-by: Corbin Phelps Signed-off-by: Corbin Phelps --- CHANGELOG.md | 1 + service/collector.go | 3 ++- service/collector_test.go | 4 +++- service/telemetry.go | 13 +++++++++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd0c023cad2e..07b1c4bdd6f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - Add AppendEmpty and EnsureCapacity method to primitive pdata slices (#6060) - Expose `AsRaw` and `FromRaw` `pcommon.Value` methods (#6090) +- Updated how `telemetryInitializer` is created so it's instanced per Collector instance rather than global to the process (#6138) ## v0.60.0 Beta diff --git a/service/collector.go b/service/collector.go index 1bde637760b2..30081c48b388 100644 --- a/service/collector.go +++ b/service/collector.go @@ -30,6 +30,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/extension/ballastextension" + "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/service/internal/telemetrylogs" ) @@ -92,7 +93,7 @@ func New(set CollectorSettings) (*Collector, error) { } if set.telemetry == nil { - set.telemetry = collectorTelemetry + set.telemetry = newColTelemetry(featuregate.GetRegistry()) } return &Collector{ diff --git a/service/collector_test.go b/service/collector_test.go index 0fe9f56f0cbd..5126a9b1974f 100644 --- a/service/collector_test.go +++ b/service/collector_test.go @@ -409,7 +409,9 @@ func TestCollectorStartWithOpenCensusMetrics(t *testing.T) { func TestCollectorStartWithOpenTelemetryMetrics(t *testing.T) { for _, tc := range ownMetricsTestCases("test version") { t.Run(tc.name, func(t *testing.T) { - colTel := newColTelemetry(featuregate.NewRegistry()) + registry := featuregate.NewRegistry() + registerInternalMetricFeatureGate(registry) + colTel := newColTelemetry(registry) require.NoError(t, colTel.registry.Apply(map[string]bool{useOtelForInternalMetricsfeatureGateID: true})) testCollectorStartHelper(t, colTel, tc) }) diff --git a/service/telemetry.go b/service/telemetry.go index 0ce6057b780c..84b7bb8ce167 100644 --- a/service/telemetry.go +++ b/service/telemetry.go @@ -46,9 +46,6 @@ import ( "go.opentelemetry.io/collector/service/telemetry" ) -// collectorTelemetry is collector's own telemetrySettings. -var collectorTelemetry = newColTelemetry(featuregate.GetRegistry()) - const ( zapKeyTelemetryAddress = "address" zapKeyTelemetryLevel = "level" @@ -77,13 +74,21 @@ type telemetryInitializer struct { doInitOnce sync.Once } -func newColTelemetry(registry *featuregate.Registry) *telemetryInitializer { +func init() { + // register feature gate + registerInternalMetricFeatureGate(featuregate.GetRegistry()) +} + +// registerInternalMetricFeatureGate registers the Internal Metric feature gate to the passed in registry +func registerInternalMetricFeatureGate(registry *featuregate.Registry) { registry.MustRegister(featuregate.Gate{ ID: useOtelForInternalMetricsfeatureGateID, Description: "controls whether the collector to uses OpenTelemetry for internal metrics", Enabled: false, }) +} +func newColTelemetry(registry *featuregate.Registry) *telemetryInitializer { return &telemetryInitializer{ registry: registry, mp: metric.NewNoopMeterProvider(),