Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add feature gate for supporting additional exporters #7678

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .chloggen/codeboten_add-featuregate-telemetry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
component: service

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: "Add feature gate `telemetry.useOtelWithExtendedConfigurationForInternalTelemetry` to start adding support for exporting internal telemetry"
codeboten marked this conversation as resolved.
Show resolved Hide resolved

# One or more tracking issues or pull requests related to the change
issues: [7641]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:
8 changes: 8 additions & 0 deletions internal/obsreportconfig/obsreportconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ var DisableHighCardinalityMetricsfeatureGate = featuregate.GlobalRegistry().Must
featuregate.WithRegisterDescription("controls whether the collector should enable potentially high"+
"cardinality metrics. The gate will be removed when the collector allows for view configuration."))

// UseOtelWithExtendedConfigurationForInternalTelemetryFeatureGate is the feature gate that controls whether the collector
// supports configuring the OpenTelemetry SDK via configuration
var UseOtelWithExtendedConfigurationForInternalTelemetryFeatureGate = featuregate.GlobalRegistry().MustRegister(
"telemetry.useOtelWithExtendedConfigurationForInternalTelemetry",
codeboten marked this conversation as resolved.
Show resolved Hide resolved
featuregate.StageAlpha,
featuregate.WithRegisterDescription("controls whether the collector supports extended OpenTelemetry"+
"configuration for internal telemetry"))

codeboten marked this conversation as resolved.
Show resolved Hide resolved
// AllViews returns all the OpenCensus views requires by obsreport package.
func AllViews(level configtelemetry.Level) []*view.View {
if level == configtelemetry.LevelNone {
Expand Down
3 changes: 2 additions & 1 deletion service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
useOtel = *set.useOtel
}
disableHighCard := obsreportconfig.DisableHighCardinalityMetricsfeatureGate.IsEnabled()
extendedConfig := obsreportconfig.UseOtelWithExtendedConfigurationForInternalTelemetryFeatureGate.IsEnabled()
srv := &Service{
buildInfo: set.BuildInfo,
host: &serviceHost{
Expand All @@ -98,7 +99,7 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
buildInfo: set.BuildInfo,
asyncErrorChannel: set.AsyncErrorChannel,
},
telemetryInitializer: newColTelemetry(useOtel, disableHighCard),
telemetryInitializer: newColTelemetry(useOtel, disableHighCard, extendedConfig),
}
var err error
srv.telemetry, err = telemetry.New(ctx, telemetry.Settings{ZapOptions: set.LoggingOptions}, cfg.Telemetry)
Expand Down
4 changes: 3 additions & 1 deletion service/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,15 @@ type telemetryInitializer struct {

useOtel bool
disableHighCardinality bool
extendedConfig bool
}

func newColTelemetry(useOtel bool, disableHighCardinality bool) *telemetryInitializer {
func newColTelemetry(useOtel bool, disableHighCardinality bool, extendedConfig bool) *telemetryInitializer {
return &telemetryInitializer{
mp: noop.NewMeterProvider(),
useOtel: useOtel,
disableHighCardinality: disableHighCardinality,
extendedConfig: extendedConfig,
}
}

Expand Down
16 changes: 16 additions & 0 deletions service/telemetry/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,18 @@ type LogsSamplingConfig struct {
Thereafter int `mapstructure:"thereafter"`
}

// MetricReader exposes configuration of metric readers to end users.
// TODO: replace this temporary struct w/ auto-generated struct from jsonschema
//
// Experimental: *NOTE* this structure is subject to change or removal in the future.
codeboten marked this conversation as resolved.
Show resolved Hide resolved
type MetricReader struct {
// Args corresponds to the JSON schema field "args".
Args any `mapstructure:"args"`

// Type corresponds to the JSON schema field "type".
Type string `mapstructure:"type"`
}

// MetricsConfig exposes the common Telemetry configuration for one component.
// Experimental: *NOTE* this structure is subject to change or removal in the future.
type MetricsConfig struct {
Expand All @@ -116,6 +128,10 @@ type MetricsConfig struct {

// Address is the [address]:port that metrics exposition should be bound to.
Address string `mapstructure:"address"`

// Readers allow configuration of metric readers to emit metrics to
// any number of supported backends.
Readers []MetricReader `mapstructure:"metric_readers"`
}

// TracesConfig exposes the common Telemetry configuration for collector's internal spans.
Expand Down
3 changes: 2 additions & 1 deletion service/telemetry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ func TestTelemetryInit(t *testing.T) {
useOtel bool
disableHighCard bool
expectedMetrics map[string]metricValue
extendedConfig bool
}{
{
name: "UseOpenCensusForInternalMetrics",
Expand Down Expand Up @@ -198,7 +199,7 @@ func TestTelemetryInit(t *testing.T) {
},
} {
t.Run(tc.name, func(t *testing.T) {
tel := newColTelemetry(tc.useOtel, tc.disableHighCard)
tel := newColTelemetry(tc.useOtel, tc.disableHighCard, tc.extendedConfig)
buildInfo := component.NewDefaultBuildInfo()
cfg := telemetry.Config{
Resource: map[string]*string{
Expand Down