Skip to content

Commit d72acd4

Browse files
committed
Revert "Permanently enable 'telemetry.newPipelineTelemetry' feature gate (open-telemetry#12856)"
This reverts commit dc8e2dd.
1 parent d020c90 commit d72acd4

File tree

13 files changed

+116
-78
lines changed

13 files changed

+116
-78
lines changed

.chloggen/lock-attributes-gate.yaml

Lines changed: 0 additions & 28 deletions
This file was deleted.

internal/telemetry/telemetry.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import (
1616

1717
var NewPipelineTelemetryGate = featuregate.GlobalRegistry().MustRegister(
1818
"telemetry.newPipelineTelemetry",
19-
featuregate.StageStable,
19+
featuregate.StageAlpha,
2020
featuregate.WithRegisterFromVersion("v0.123.0"),
21-
featuregate.WithRegisterToVersion("v0.127.0"),
21+
featuregate.WithRegisterDescription("Instruments Collector pipelines and injects component-identifying attributes"),
2222
featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/rfcs/component-universal-telemetry.md"),
2323
)
2424

@@ -46,10 +46,16 @@ type TelemetrySettings struct {
4646
// The publicization of this API is tracked in https://github.com/open-telemetry/opentelemetry-collector/issues/12405
4747

4848
func WithoutAttributes(ts TelemetrySettings, fields ...string) TelemetrySettings {
49+
if !NewPipelineTelemetryGate.IsEnabled() {
50+
return ts
51+
}
4952
return WithAttributeSet(ts, componentattribute.RemoveAttributes(ts.extraAttributes, fields...))
5053
}
5154

5255
func WithAttributeSet(ts TelemetrySettings, attrs attribute.Set) TelemetrySettings {
56+
if !NewPipelineTelemetryGate.IsEnabled() {
57+
return ts
58+
}
5359
ts.extraAttributes = attrs
5460
ts.Logger = componentattribute.ZapLoggerWithAttributes(ts.Logger, ts.extraAttributes)
5561
ts.TracerProvider = componentattribute.TracerProviderWithAttributes(ts.TracerProvider, ts.extraAttributes)

processor/memorylimiterprocessor/factory_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717

1818
"go.opentelemetry.io/collector/component/componenttest"
1919
"go.opentelemetry.io/collector/consumer/consumertest"
20+
"go.opentelemetry.io/collector/featuregate"
2021
"go.opentelemetry.io/collector/internal/memorylimiter"
2122
"go.opentelemetry.io/collector/internal/telemetry"
2223
"go.opentelemetry.io/collector/internal/telemetry/componentattribute"
@@ -33,7 +34,17 @@ func TestCreateDefaultConfig(t *testing.T) {
3334
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
3435
}
3536

37+
func setGate(t *testing.T, gate *featuregate.Gate, value bool) {
38+
initialValue := gate.IsEnabled()
39+
require.NoError(t, featuregate.GlobalRegistry().Set(gate.ID(), value))
40+
t.Cleanup(func() {
41+
_ = featuregate.GlobalRegistry().Set(gate.ID(), initialValue)
42+
})
43+
}
44+
3645
func TestCreateProcessor(t *testing.T) {
46+
setGate(t, telemetry.NewPipelineTelemetryGate, true)
47+
3748
factory := NewFactory()
3849
require.NotNil(t, factory)
3950

processor/memorylimiterprocessor/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
go.opentelemetry.io/collector/consumer/consumererror v0.124.0
1212
go.opentelemetry.io/collector/consumer/consumertest v0.124.0
1313
go.opentelemetry.io/collector/consumer/xconsumer v0.124.0
14+
go.opentelemetry.io/collector/featuregate v1.30.0
1415
go.opentelemetry.io/collector/internal/memorylimiter v0.124.0
1516
go.opentelemetry.io/collector/internal/telemetry v0.124.0
1617
go.opentelemetry.io/collector/pdata v1.30.0
@@ -57,7 +58,6 @@ require (
5758
github.com/yusufpapurcu/wmi v1.2.4 // indirect
5859
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
5960
go.opentelemetry.io/collector/component/componentstatus v0.124.0 // indirect
60-
go.opentelemetry.io/collector/featuregate v1.30.0 // indirect
6161
go.opentelemetry.io/collector/pdata/testdata v0.124.0 // indirect
6262
go.opentelemetry.io/contrib/bridges/otelzap v0.10.0 // indirect
6363
go.opentelemetry.io/otel/log v0.11.0 // indirect

receiver/otlpreceiver/factory_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"go.opentelemetry.io/collector/consumer"
2222
"go.opentelemetry.io/collector/consumer/consumertest"
2323
"go.opentelemetry.io/collector/consumer/xconsumer"
24+
"go.opentelemetry.io/collector/featuregate"
2425
"go.opentelemetry.io/collector/internal/telemetry"
2526
"go.opentelemetry.io/collector/internal/telemetry/componentattribute"
2627
"go.opentelemetry.io/collector/internal/testutil"
@@ -36,7 +37,17 @@ func TestCreateDefaultConfig(t *testing.T) {
3637
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
3738
}
3839

40+
func setGate(t *testing.T, gate *featuregate.Gate, value bool) {
41+
initialValue := gate.IsEnabled()
42+
require.NoError(t, featuregate.GlobalRegistry().Set(gate.ID(), value))
43+
t.Cleanup(func() {
44+
_ = featuregate.GlobalRegistry().Set(gate.ID(), initialValue)
45+
})
46+
}
47+
3948
func TestCreateSameReceiver(t *testing.T) {
49+
setGate(t, telemetry.NewPipelineTelemetryGate, true)
50+
4051
factory := NewFactory()
4152
cfg := factory.CreateDefaultConfig().(*Config)
4253
cfg.GRPC.NetAddr.Endpoint = testutil.GetAvailableLocalAddress(t)

receiver/otlpreceiver/go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ require (
2222
go.opentelemetry.io/collector/consumer/consumererror v0.124.0
2323
go.opentelemetry.io/collector/consumer/consumertest v0.124.0
2424
go.opentelemetry.io/collector/consumer/xconsumer v0.124.0
25+
go.opentelemetry.io/collector/featuregate v1.30.0
2526
go.opentelemetry.io/collector/internal/sharedcomponent v0.124.0
2627
go.opentelemetry.io/collector/internal/telemetry v0.124.0
2728
go.opentelemetry.io/collector/pdata v1.30.0
@@ -67,8 +68,6 @@ require (
6768
go.opentelemetry.io/collector/config/configcompression v1.30.0 // indirect
6869
go.opentelemetry.io/collector/config/configmiddleware v0.0.0-20250422165940-c47951a8bf71 // indirect
6970
go.opentelemetry.io/collector/extension/extensionauth v1.30.0 // indirect
70-
go.opentelemetry.io/collector/extension/extensionmiddleware v0.0.0-20250422165940-c47951a8bf71 // indirect
71-
go.opentelemetry.io/collector/featuregate v1.30.0 // indirect
7271
go.opentelemetry.io/collector/pipeline v0.124.0 // indirect
7372
go.opentelemetry.io/contrib/bridges/otelzap v0.10.0 // indirect
7473
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect

service/go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ require (
4646
go.opentelemetry.io/collector/receiver/xreceiver v0.124.0
4747
go.opentelemetry.io/collector/semconv v0.124.0
4848
go.opentelemetry.io/collector/service/hostcapabilities v0.124.0
49+
go.opentelemetry.io/contrib/bridges/otelzap v0.10.0
4950
go.opentelemetry.io/contrib/otelconf v0.15.0
5051
go.opentelemetry.io/contrib/propagators/b3 v1.35.0
5152
go.opentelemetry.io/otel v1.35.0
@@ -108,8 +109,6 @@ require (
108109
go.opentelemetry.io/collector/config/configtls v1.30.0 // indirect
109110
go.opentelemetry.io/collector/consumer/consumererror v0.124.0 // indirect
110111
go.opentelemetry.io/collector/extension/extensionauth v1.30.0 // indirect
111-
go.opentelemetry.io/collector/extension/extensionmiddleware v0.0.0-20250422165940-c47951a8bf71 // indirect
112-
go.opentelemetry.io/contrib/bridges/otelzap v0.10.0 // indirect
113112
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
114113
go.opentelemetry.io/contrib/zpages v0.60.0 // indirect
115114
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 // indirect

service/internal/graph/connector.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,10 @@ func (n *connectorNode) buildComponent(
4949
builder *builders.ConnectorBuilder,
5050
nexts []baseConsumer,
5151
) error {
52-
set := connector.Settings{
53-
ID: n.componentID,
54-
TelemetrySettings: telemetry.WithAttributeSet(tel, *n.Set()),
55-
BuildInfo: info,
52+
set := connector.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info}
53+
if telemetry.NewPipelineTelemetryGate.IsEnabled() {
54+
set.TelemetrySettings = telemetry.WithAttributeSet(set.TelemetrySettings, *n.Set())
5655
}
57-
5856
switch n.rcvrPipelineType {
5957
case pipeline.SignalTraces:
6058
return n.buildTraces(ctx, set, builder, nexts)

service/internal/graph/exporter.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,10 @@ func (n *exporterNode) buildComponent(
4545
info component.BuildInfo,
4646
builder *builders.ExporterBuilder,
4747
) error {
48-
set := exporter.Settings{
49-
ID: n.componentID,
50-
TelemetrySettings: telemetry.WithAttributeSet(tel, *n.Set()),
51-
BuildInfo: info,
48+
set := exporter.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info}
49+
if telemetry.NewPipelineTelemetryGate.IsEnabled() {
50+
set.TelemetrySettings = telemetry.WithAttributeSet(set.TelemetrySettings, *n.Set())
5251
}
53-
5452
var err error
5553
switch n.pipelineType {
5654
case pipeline.SignalTraces:

service/internal/graph/processor.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,10 @@ func (n *processorNode) buildComponent(ctx context.Context,
4747
builder *builders.ProcessorBuilder,
4848
next baseConsumer,
4949
) error {
50-
set := processor.Settings{
51-
ID: n.componentID,
52-
TelemetrySettings: telemetry.WithAttributeSet(tel, *n.Set()),
53-
BuildInfo: info,
50+
set := processor.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info}
51+
if telemetry.NewPipelineTelemetryGate.IsEnabled() {
52+
set.TelemetrySettings = telemetry.WithAttributeSet(set.TelemetrySettings, *n.Set())
5453
}
55-
5654
var err error
5755
switch n.pipelineID.Signal() {
5856
case pipeline.SignalTraces:

service/internal/graph/receiver.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,10 @@ func (n *receiverNode) buildComponent(ctx context.Context,
4242
builder *builders.ReceiverBuilder,
4343
nexts []baseConsumer,
4444
) error {
45-
set := receiver.Settings{
46-
ID: n.componentID,
47-
TelemetrySettings: telemetry.WithAttributeSet(tel, *n.Set()),
48-
BuildInfo: info,
45+
set := receiver.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info}
46+
if telemetry.NewPipelineTelemetryGate.IsEnabled() {
47+
set.TelemetrySettings = telemetry.WithAttributeSet(set.TelemetrySettings, *n.Set())
4948
}
50-
5149
var err error
5250
switch n.pipelineType {
5351
case pipeline.SignalTraces:

service/telemetry/logger.go

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
55

66
import (
7+
"go.opentelemetry.io/contrib/bridges/otelzap"
78
"go.opentelemetry.io/otel/attribute"
89
"go.opentelemetry.io/otel/log"
910
"go.uber.org/zap"
1011
"go.uber.org/zap/zapcore"
1112

13+
"go.opentelemetry.io/collector/internal/telemetry"
1214
"go.opentelemetry.io/collector/internal/telemetry/componentattribute"
1315
)
1416

@@ -41,29 +43,54 @@ func newLogger(set Settings, cfg Config) (*zap.Logger, log.LoggerProvider, error
4143

4244
var lp log.LoggerProvider
4345

44-
logger = logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
45-
core = componentattribute.NewConsoleCoreWithAttributes(core, attribute.NewSet())
46+
if telemetry.NewPipelineTelemetryGate.IsEnabled() {
47+
logger = logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
48+
core = componentattribute.NewConsoleCoreWithAttributes(core, attribute.NewSet())
4649

50+
if len(cfg.Logs.Processors) > 0 && set.SDK != nil {
51+
lp = set.SDK.LoggerProvider()
52+
53+
core = componentattribute.NewOTelTeeCoreWithAttributes(
54+
core,
55+
lp,
56+
"go.opentelemetry.io/collector/service/telemetry",
57+
cfg.Logs.Level,
58+
attribute.NewSet(),
59+
)
60+
}
61+
62+
if cfg.Logs.Sampling != nil && cfg.Logs.Sampling.Enabled {
63+
core = componentattribute.NewWrapperCoreWithAttributes(core, func(c zapcore.Core) zapcore.Core {
64+
return newSampledCore(c, cfg.Logs.Sampling)
65+
})
66+
}
67+
68+
return core
69+
}))
70+
} else {
4771
if len(cfg.Logs.Processors) > 0 && set.SDK != nil {
4872
lp = set.SDK.LoggerProvider()
4973

50-
core = componentattribute.NewOTelTeeCoreWithAttributes(
51-
core,
52-
lp,
53-
"go.opentelemetry.io/collector/service/telemetry",
54-
cfg.Logs.Level,
55-
attribute.NewSet(),
56-
)
74+
logger = logger.WithOptions(zap.WrapCore(func(c zapcore.Core) zapcore.Core {
75+
core, err := zapcore.NewIncreaseLevelCore(zapcore.NewTee(
76+
c,
77+
otelzap.NewCore("go.opentelemetry.io/collector/service/telemetry",
78+
otelzap.WithLoggerProvider(lp),
79+
),
80+
), zap.NewAtomicLevelAt(cfg.Logs.Level))
81+
if err != nil {
82+
panic(err)
83+
}
84+
return core
85+
}))
5786
}
5887

5988
if cfg.Logs.Sampling != nil && cfg.Logs.Sampling.Enabled {
60-
core = componentattribute.NewWrapperCoreWithAttributes(core, func(c zapcore.Core) zapcore.Core {
89+
logger = logger.WithOptions(zap.WrapCore(func(c zapcore.Core) zapcore.Core {
6190
return newSampledCore(c, cfg.Logs.Sampling)
62-
})
91+
}))
6392
}
64-
65-
return core
66-
}))
93+
}
6794

6895
return logger, lp, nil
6996
}

service/telemetry/logger_test.go

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,26 @@ import (
1313
"github.com/stretchr/testify/require"
1414
config "go.opentelemetry.io/contrib/otelconf/v0.3.0"
1515
"go.uber.org/zap/zapcore"
16+
17+
"go.opentelemetry.io/collector/featuregate"
18+
"go.opentelemetry.io/collector/internal/telemetry"
1619
)
1720

21+
func setGate(t *testing.T, gate *featuregate.Gate, value bool) {
22+
initialValue := gate.IsEnabled()
23+
require.NoError(t, featuregate.GlobalRegistry().Set(gate.ID(), value))
24+
t.Cleanup(func() {
25+
_ = featuregate.GlobalRegistry().Set(gate.ID(), initialValue)
26+
})
27+
}
28+
1829
func TestNewLogger(t *testing.T) {
1930
tests := []struct {
20-
name string
21-
wantCoreType any
22-
wantErr error
23-
cfg Config
31+
name string
32+
wantCoreType any
33+
wantCoreTypeRfc any
34+
wantErr error
35+
cfg Config
2436
}{
2537
{
2638
name: "no log config",
@@ -40,7 +52,8 @@ func TestNewLogger(t *testing.T) {
4052
InitialFields: map[string]any{"fieldKey": "filed-value"},
4153
},
4254
},
43-
wantCoreType: "*componentattribute.consoleCoreWithAttributes",
55+
wantCoreType: "*zapcore.ioCore",
56+
wantCoreTypeRfc: "*componentattribute.consoleCoreWithAttributes",
4457
},
4558
{
4659
name: "log config with processors",
@@ -63,7 +76,8 @@ func TestNewLogger(t *testing.T) {
6376
},
6477
},
6578
},
66-
wantCoreType: "*componentattribute.otelTeeCoreWithAttributes",
79+
wantCoreType: "*zapcore.levelFilterCore",
80+
wantCoreTypeRfc: "*componentattribute.otelTeeCoreWithAttributes",
6781
},
6882
{
6983
name: "log config with sampling",
@@ -85,7 +99,8 @@ func TestNewLogger(t *testing.T) {
8599
InitialFields: map[string]any(nil),
86100
},
87101
},
88-
wantCoreType: "*componentattribute.wrapperCoreWithAttributes",
102+
wantCoreType: "*zapcore.sampler",
103+
wantCoreTypeRfc: "*componentattribute.wrapperCoreWithAttributes",
89104
},
90105
}
91106
for _, tt := range tests {
@@ -110,7 +125,13 @@ func TestNewLogger(t *testing.T) {
110125
}
111126
}
112127
}
113-
114-
testCoreType(t, tt.wantCoreType)
128+
t.Run(tt.name, func(t *testing.T) {
129+
setGate(t, telemetry.NewPipelineTelemetryGate, false)
130+
testCoreType(t, tt.wantCoreType)
131+
})
132+
t.Run(tt.name+" (pipeline telemetry on)", func(t *testing.T) {
133+
setGate(t, telemetry.NewPipelineTelemetryGate, true)
134+
testCoreType(t, tt.wantCoreTypeRfc)
135+
})
115136
}
116137
}

0 commit comments

Comments
 (0)