Skip to content

Commit 650ac0b

Browse files
codebotenmx-psi
andauthored
[service] add service.disableOpenCensusBridge gate (#10542)
This feature gate allows end users to re-enable the opencensus bridge if there's a need for it. This preceeds #10406 and will be taken out of draft once open-telemetry/opentelemetry-collector-contrib#29867 is completed. Related to #10414 --------- Signed-off-by: Alex Boten <[email protected]> Co-authored-by: Pablo Baeyens <[email protected]>
1 parent d37fe6c commit 650ac0b

File tree

6 files changed

+103
-11
lines changed

6 files changed

+103
-11
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: service
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: "add `service.disableOpenCensusBridge` feature gate which is enabled by default to remove the dependency on OpenCensus"
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10414]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: []

internal/featuregates/featuregates.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,8 @@ var StrictlyTypedInputGate = featuregate.GlobalRegistry().MustRegister(StrictlyT
1717
featuregate.WithRegisterFromVersion("v0.103.0"),
1818
featuregate.WithRegisterDescription("Makes type casting rules during configuration unmarshaling stricter. See https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/rfcs/env-vars.md for more details."),
1919
)
20+
21+
var DisableOpenCensusBridge = featuregate.GlobalRegistry().MustRegister("service.disableOpenCensusBridge",
22+
featuregate.StageBeta,
23+
featuregate.WithRegisterFromVersion("v0.104.0"),
24+
featuregate.WithRegisterDescription("`Disables the OpenCensus bridge meaning any component still using the OpenCensus SDK will no longer be able to produce telemetry."))

service/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ require (
2121
go.opentelemetry.io/collector/extension v0.104.0
2222
go.opentelemetry.io/collector/extension/zpagesextension v0.104.0
2323
go.opentelemetry.io/collector/featuregate v1.11.0
24+
go.opentelemetry.io/collector/internal/featuregates v0.0.0-20240705161705-b127da089038
2425
go.opentelemetry.io/collector/pdata v1.11.0
2526
go.opentelemetry.io/collector/pdata/testdata v0.104.0
2627
go.opentelemetry.io/collector/processor v0.104.0
@@ -85,7 +86,6 @@ require (
8586
go.opentelemetry.io/collector/config/configtls v0.104.0 // indirect
8687
go.opentelemetry.io/collector/config/internal v0.104.0 // indirect
8788
go.opentelemetry.io/collector/extension/auth v0.104.0 // indirect
88-
go.opentelemetry.io/collector/internal/featuregates v0.0.0-20240705161705-b127da089038 // indirect
8989
go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect
9090
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
9191
go.opentelemetry.io/contrib/zpages v0.53.0 // indirect

service/internal/proctelemetry/config.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
2929
"go.opentelemetry.io/otel/sdk/resource"
3030

31+
"go.opentelemetry.io/collector/internal/featuregates"
3132
"go.opentelemetry.io/collector/processor/processorhelper"
3233
semconv "go.opentelemetry.io/collector/semconv/v1.18.0"
3334
)
@@ -67,8 +68,10 @@ func InitMetricReader(ctx context.Context, reader config.MetricReader, asyncErro
6768
return initPullExporter(reader.Pull.Exporter, asyncErrorChannel)
6869
}
6970
if reader.Periodic != nil {
70-
opts := []sdkmetric.PeriodicReaderOption{
71-
sdkmetric.WithProducer(opencensus.NewMetricProducer()),
71+
var opts []sdkmetric.PeriodicReaderOption
72+
73+
if !featuregates.DisableOpenCensusBridge.IsEnabled() {
74+
opts = append(opts, sdkmetric.WithProducer(opencensus.NewMetricProducer()))
7275
}
7376
if reader.Periodic.Interval != nil {
7477
opts = append(opts, sdkmetric.WithInterval(time.Duration(*reader.Periodic.Interval)*time.Millisecond))
@@ -160,18 +163,22 @@ func initPrometheusExporter(prometheusConfig *config.Prometheus, asyncErrorChann
160163
if prometheusConfig.Port == nil {
161164
return nil, nil, fmt.Errorf("port must be specified")
162165
}
163-
exporter, err := otelprom.New(
166+
167+
opts := []otelprom.Option{
164168
otelprom.WithRegisterer(promRegistry),
165169
// https://github.com/open-telemetry/opentelemetry-collector/issues/8043
166170
otelprom.WithoutUnits(),
167171
// Disabled for the moment until this becomes stable, and we are ready to break backwards compatibility.
168172
otelprom.WithoutScopeInfo(),
169-
otelprom.WithProducer(opencensus.NewMetricProducer()),
170173
// This allows us to produce metrics that are backwards compatible w/ opencensus
171174
otelprom.WithoutCounterSuffixes(),
172175
otelprom.WithNamespace("otelcol"),
173176
otelprom.WithResourceAsConstantLabels(attribute.NewDenyKeysFilter()),
174-
)
177+
}
178+
if !featuregates.DisableOpenCensusBridge.IsEnabled() {
179+
opts = append(opts, otelprom.WithProducer(opencensus.NewMetricProducer()))
180+
}
181+
exporter, err := otelprom.New(opts...)
175182
if err != nil {
176183
return nil, nil, fmt.Errorf("error creating otel prometheus exporter: %w", err)
177184
}

service/service.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"go.opentelemetry.io/collector/connector"
2323
"go.opentelemetry.io/collector/exporter"
2424
"go.opentelemetry.io/collector/extension"
25+
"go.opentelemetry.io/collector/internal/featuregates"
2526
"go.opentelemetry.io/collector/internal/localhostgate"
2627
"go.opentelemetry.io/collector/internal/obsreportconfig"
2728
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -113,6 +114,10 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
113114
}
114115

115116
logger.Info("Setting up own telemetry...")
117+
118+
if featuregates.DisableOpenCensusBridge.IsEnabled() {
119+
logger.Info("OpenCensus bridge is disabled for Collector telemetry and will be removed in a future version, use --feature-gates=-service.disableOpenCensusBridge to re-enable")
120+
}
116121
mp, err := newMeterProvider(
117122
meterProviderSettings{
118123
res: res,

service/telemetry_test.go

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919

2020
"go.opentelemetry.io/collector/component"
2121
"go.opentelemetry.io/collector/config/configtelemetry"
22+
"go.opentelemetry.io/collector/featuregate"
23+
"go.opentelemetry.io/collector/internal/featuregates"
2224
"go.opentelemetry.io/collector/internal/testutil"
2325
semconv "go.opentelemetry.io/collector/semconv/v1.18.0"
2426
"go.opentelemetry.io/collector/service/internal/proctelemetry"
@@ -42,11 +44,12 @@ func TestTelemetryInit(t *testing.T) {
4244
}
4345

4446
for _, tc := range []struct {
45-
name string
46-
disableHighCard bool
47-
expectedMetrics map[string]metricValue
48-
extendedConfig bool
49-
cfg *telemetry.Config
47+
name string
48+
disableHighCard bool
49+
disableCensusBridge bool
50+
expectedMetrics map[string]metricValue
51+
extendedConfig bool
52+
cfg *telemetry.Config
5053
}{
5154
{
5255
name: "UseOpenTelemetryForInternalMetrics",
@@ -214,8 +217,55 @@ func TestTelemetryInit(t *testing.T) {
214217
},
215218
},
216219
},
220+
{
221+
name: "DisableOpenCensusBridge",
222+
expectedMetrics: map[string]metricValue{
223+
metricPrefix + otelPrefix + counterName: {
224+
value: 13,
225+
labels: map[string]string{
226+
"service_name": "otelcol",
227+
"service_version": "latest",
228+
"service_instance_id": testInstanceID,
229+
},
230+
},
231+
metricPrefix + grpcPrefix + counterName: {
232+
value: 11,
233+
labels: map[string]string{
234+
"net_sock_peer_addr": "",
235+
"net_sock_peer_name": "",
236+
"net_sock_peer_port": "",
237+
"service_name": "otelcol",
238+
"service_version": "latest",
239+
"service_instance_id": testInstanceID,
240+
},
241+
},
242+
metricPrefix + httpPrefix + counterName: {
243+
value: 10,
244+
labels: map[string]string{
245+
"net_host_name": "",
246+
"net_host_port": "",
247+
"service_name": "otelcol",
248+
"service_version": "latest",
249+
"service_instance_id": testInstanceID,
250+
},
251+
},
252+
"target_info": {
253+
value: 0,
254+
labels: map[string]string{
255+
"service_name": "otelcol",
256+
"service_version": "latest",
257+
"service_instance_id": testInstanceID,
258+
},
259+
},
260+
},
261+
disableCensusBridge: true,
262+
},
217263
} {
218264
t.Run(tc.name, func(t *testing.T) {
265+
require.NoError(t, featuregate.GlobalRegistry().Set(featuregates.DisableOpenCensusBridge.ID(), tc.disableCensusBridge))
266+
t.Cleanup(func() {
267+
require.NoError(t, featuregate.GlobalRegistry().Set(featuregates.DisableOpenCensusBridge.ID(), true))
268+
})
219269
if tc.extendedConfig {
220270
tc.cfg.Metrics.Readers = []config.MetricReader{
221271
{

0 commit comments

Comments
 (0)