diff --git a/service/documentation.md b/service/documentation.md index 4c46bee5e11..4c96f7a428f 100644 --- a/service/documentation.md +++ b/service/documentation.md @@ -101,3 +101,15 @@ Number of items emitted from the receiver. [Development] | Unit | Metric Type | Value Type | Monotonic | Stability | | ---- | ----------- | ---------- | --------- | --------- | | {item} | Sum | Int | true | Development | + +## Feature Gates + +This component has the following feature gates: + +| Feature Gate | Stage | Description | From Version | To Version | Reference | +| ------------ | ----- | ----------- | ------------ | ---------- | --------- | +| `service.AllowNoPipelines` | alpha | Allow starting the Collector without starting any pipelines. | v0.122.0 | N/A | [Link](https://github.com/open-telemetry/opentelemetry-collector/pull/12613) | +| `service.profilesSupport` | alpha | Controls whether profiles support can be enabled | v0.112.0 | N/A | [Link](https://github.com/open-telemetry/opentelemetry-collector/pull/11477) | +| `telemetry.UseLocalHostAsDefaultMetricsAddress` | beta | Controls whether default Prometheus metrics server use localhost as the default host for their endpoints | v0.111.0 | N/A | [Link](https://github.com/open-telemetry/opentelemetry-collector/pull/11251) | + +For more information about feature gates, see the [Feature Gates](https://github.com/open-telemetry/opentelemetry-collector/blob/main/featuregate/README.md) documentation. diff --git a/service/internal/metadata/generated_feature_gates.go b/service/internal/metadata/generated_feature_gates.go new file mode 100644 index 00000000000..ac686925e2a --- /dev/null +++ b/service/internal/metadata/generated_feature_gates.go @@ -0,0 +1,31 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/featuregate" +) + +var ServiceAllowNoPipelinesFeatureGate = featuregate.GlobalRegistry().MustRegister( + "service.AllowNoPipelines", + featuregate.StageAlpha, + featuregate.WithRegisterDescription("Allow starting the Collector without starting any pipelines."), + featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/pull/12613"), + featuregate.WithRegisterFromVersion("v0.122.0"), +) + +var ServiceProfilesSupportFeatureGate = featuregate.GlobalRegistry().MustRegister( + "service.profilesSupport", + featuregate.StageAlpha, + featuregate.WithRegisterDescription("Controls whether profiles support can be enabled"), + featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/pull/11477"), + featuregate.WithRegisterFromVersion("v0.112.0"), +) + +var TelemetryUseLocalHostAsDefaultMetricsAddressFeatureGate = featuregate.GlobalRegistry().MustRegister( + "telemetry.UseLocalHostAsDefaultMetricsAddress", + featuregate.StageBeta, + featuregate.WithRegisterDescription("Controls whether default Prometheus metrics server use localhost as the default host for their endpoints"), + featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/pull/11251"), + featuregate.WithRegisterFromVersion("v0.111.0"), +) diff --git a/service/metadata.yaml b/service/metadata.yaml index 56f9e07a800..2bd1292a0a9 100644 --- a/service/metadata.yaml +++ b/service/metadata.yaml @@ -205,3 +205,20 @@ telemetry: sum: value_type: int monotonic: true + +feature_gates: + - id: service.AllowNoPipelines + description: 'Allow starting the Collector without starting any pipelines.' + stage: alpha + from_version: 'v0.122.0' + reference_url: 'https://github.com/open-telemetry/opentelemetry-collector/pull/12613' + - id: service.profilesSupport + description: 'Controls whether profiles support can be enabled' + stage: alpha + from_version: 'v0.112.0' + reference_url: 'https://github.com/open-telemetry/opentelemetry-collector/pull/11477' + - id: telemetry.UseLocalHostAsDefaultMetricsAddress + description: 'Controls whether default Prometheus metrics server use localhost as the default host for their endpoints' + stage: beta + from_version: 'v0.111.0' + reference_url: 'https://github.com/open-telemetry/opentelemetry-collector/pull/11251' diff --git a/service/pipelines/config.go b/service/pipelines/config.go index b30afa0090b..154d848a1e2 100644 --- a/service/pipelines/config.go +++ b/service/pipelines/config.go @@ -8,9 +8,9 @@ import ( "fmt" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" + "go.opentelemetry.io/collector/service/internal/metadata" ) var ( @@ -18,19 +18,7 @@ var ( errMissingServicePipelineReceivers = errors.New("must have at least one receiver") errMissingServicePipelineExporters = errors.New("must have at least one exporter") - serviceProfileSupportGateID = "service.profilesSupport" - serviceProfileSupportGate = featuregate.GlobalRegistry().MustRegister( - serviceProfileSupportGateID, - featuregate.StageAlpha, - featuregate.WithRegisterFromVersion("v0.112.0"), - featuregate.WithRegisterDescription("Controls whether profiles support can be enabled"), - ) - AllowNoPipelines = featuregate.GlobalRegistry().MustRegister( - "service.AllowNoPipelines", - featuregate.StageAlpha, - featuregate.WithRegisterFromVersion("v0.122.0"), - featuregate.WithRegisterDescription("Allow starting the Collector without starting any pipelines."), - ) + AllowNoPipelines = metadata.ServiceAllowNoPipelinesFeatureGate ) // Config defines the configurable settings for service telemetry. @@ -38,11 +26,11 @@ type Config map[pipeline.ID]*PipelineConfig func (cfg Config) Validate() error { // Must have at least one pipeline unless explicitly disabled. - if !AllowNoPipelines.IsEnabled() && len(cfg) == 0 { + if !metadata.ServiceAllowNoPipelinesFeatureGate.IsEnabled() && len(cfg) == 0 { return errMissingServicePipelines } - if !serviceProfileSupportGate.IsEnabled() { + if !metadata.ServiceProfilesSupportFeatureGate.IsEnabled() { // Check that all pipelines have at least one receiver and one exporter, and they reference // only configured components. for pipelineID := range cfg { @@ -50,7 +38,7 @@ func (cfg Config) Validate() error { return fmt.Errorf( "pipeline %q: profiling signal support is at alpha level, gated under the %q feature gate", pipelineID.String(), - serviceProfileSupportGateID, + metadata.ServiceProfilesSupportFeatureGate.ID(), ) } } diff --git a/service/pipelines/config_test.go b/service/pipelines/config_test.go index 59c84e71ce6..d4d7c4cc209 100644 --- a/service/pipelines/config_test.go +++ b/service/pipelines/config_test.go @@ -14,6 +14,7 @@ import ( "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" + "go.opentelemetry.io/collector/service/internal/metadata" ) func TestConfigValidate(t *testing.T) { @@ -78,7 +79,7 @@ func TestConfigValidate(t *testing.T) { { name: "enabled-featuregate-profiles", cfgFn: func(t *testing.T) Config { - require.NoError(t, featuregate.GlobalRegistry().Set(serviceProfileSupportGateID, true)) + require.NoError(t, featuregate.GlobalRegistry().Set(metadata.ServiceProfilesSupportFeatureGate.ID(), true)) cfg := generateConfig(t) cfg[pipeline.NewID(xpipeline.SignalProfiles)] = &PipelineConfig{ @@ -102,7 +103,7 @@ func TestConfigValidate(t *testing.T) { } // Clean up the profiles support gate, which may have been enabled in `cfgFn`. - require.NoError(t, featuregate.GlobalRegistry().Set(serviceProfileSupportGateID, false)) + require.NoError(t, featuregate.GlobalRegistry().Set(metadata.ServiceProfilesSupportFeatureGate.ID(), false)) }) } } diff --git a/service/telemetry/otelconftelemetry/factory.go b/service/telemetry/otelconftelemetry/factory.go index c16bf7b01dd..04141ba51f3 100644 --- a/service/telemetry/otelconftelemetry/factory.go +++ b/service/telemetry/otelconftelemetry/factory.go @@ -11,17 +11,10 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/configtelemetry" - "go.opentelemetry.io/collector/featuregate" + "go.opentelemetry.io/collector/service/internal/metadata" "go.opentelemetry.io/collector/service/telemetry" ) -var useLocalHostAsDefaultMetricsAddressFeatureGate = featuregate.GlobalRegistry().MustRegister( - "telemetry.UseLocalHostAsDefaultMetricsAddress", - featuregate.StageBeta, - featuregate.WithRegisterFromVersion("v0.111.0"), - featuregate.WithRegisterDescription("controls whether default Prometheus metrics server use localhost as the default host for their endpoints"), -) - // NewFactory creates a new telemetry.Factory that uses otelconf // to configure opentelemetry-go SDK telemetry providers. func NewFactory() telemetry.Factory { @@ -36,7 +29,7 @@ func NewFactory() telemetry.Factory { func createDefaultConfig() component.Config { metricsHost := "localhost" - if !useLocalHostAsDefaultMetricsAddressFeatureGate.IsEnabled() { + if !metadata.TelemetryUseLocalHostAsDefaultMetricsAddressFeatureGate.IsEnabled() { metricsHost = "" } diff --git a/service/telemetry/otelconftelemetry/factory_test.go b/service/telemetry/otelconftelemetry/factory_test.go index 7c991df9ed7..c74e03b0efe 100644 --- a/service/telemetry/otelconftelemetry/factory_test.go +++ b/service/telemetry/otelconftelemetry/factory_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/featuregate" + "go.opentelemetry.io/collector/service/internal/metadata" ) func TestDefaultConfig(t *testing.T) { @@ -30,11 +31,11 @@ func TestDefaultConfig(t *testing.T) { for _, tt := range tests { t.Run("UseLocalHostAsDefaultMetricsAddress/"+strconv.FormatBool(tt.gate), func(t *testing.T) { - prev := useLocalHostAsDefaultMetricsAddressFeatureGate.IsEnabled() - require.NoError(t, featuregate.GlobalRegistry().Set(useLocalHostAsDefaultMetricsAddressFeatureGate.ID(), tt.gate)) + prev := metadata.TelemetryUseLocalHostAsDefaultMetricsAddressFeatureGate.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(metadata.TelemetryUseLocalHostAsDefaultMetricsAddressFeatureGate.ID(), tt.gate)) defer func() { // Restore previous value. - require.NoError(t, featuregate.GlobalRegistry().Set(useLocalHostAsDefaultMetricsAddressFeatureGate.ID(), prev)) + require.NoError(t, featuregate.GlobalRegistry().Set(metadata.TelemetryUseLocalHostAsDefaultMetricsAddressFeatureGate.ID(), prev)) }() cfg := NewFactory().CreateDefaultConfig() require.Len(t, cfg.(*Config).Metrics.Readers, 1)