Skip to content

Commit 0f3b0c9

Browse files
Refactor componentattribute and move into service (#13948)
#### Description This PR splits the code handling component attribute injection, currently in `internal/telemetry` and `internal/telemetry/componentattribute`, into three parts: - the part meant to be called by components to drop unwanted injected attributes, which remains in `internal/telemetry`; - the part which handles copying Zap logs to an OTel LoggerProvider (where injected attributes are surfaced as instrumentation scope attributes), which is moved into `service/telemetry/otelconftelemetry`, since this "copying" behavior is specific to the otelconf-based telemetry provider; - the rest is moved into `service/internal/componentattribute`. The main goals of this split are: - to address #13842, by moving most dependencies of `componentattribute` into the service - to prepare for the availability of alternate telemetry providers. I also rewrote a lot of the attribute injection code along the way: - Instead of adding an unexported field in `TelemetrySettings` to store the current set of injected attributes, this set is now stored inside the provider wrappers (which was already partly the case). This allowed me to move the `TelemetrySettings` definition back into `component`, removing the dependency it had on `componentattribute`. - I completely changed the approach for injection in logs. Instead of a chain of custom core wrappers with a `withAttributeSet` method, injected attributes are now set through the standard `zapcore.Core.With` method. By introducing a custom `ObjectMarshaler`, we can make injected attributes act like regular Zap fields, while also allowing special handling in the otelzap wrapper core, which will set them as instrumentation scope attributes instead of log record attributes. If I'm not mistaken, this PR should have no externally-visible changes, so no changelog should be necessary. (Except maybe the `_ struct{}` in `TelemetrySettings`, but there was no changelog when we added those elsewhere) #### Link to tracking issue Updates #13842 #### Testing The large amounts of splitting and refactoring led me to abandon the existing tests, as they would be too hard to adapt. I wrote new tests for the code in `service/telemetry/otelconftelemetry` and `service/internal/componentattribute`, which hopefully should fill that gap appropriately.
1 parent 8038c69 commit 0f3b0c9

File tree

136 files changed

+837
-1602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+837
-1602
lines changed

cmd/mdatagen/go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,12 @@ require (
6161
go.opentelemetry.io/collector/consumer/xconsumer v0.138.0 // indirect
6262
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
6363
go.opentelemetry.io/collector/internal/fanoutconsumer v0.138.0 // indirect
64-
go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect
6564
go.opentelemetry.io/collector/pdata/pprofile v0.138.0 // indirect
6665
go.opentelemetry.io/collector/pdata/testdata v0.138.0 // indirect
6766
go.opentelemetry.io/collector/pipeline/xpipeline v0.138.0 // indirect
6867
go.opentelemetry.io/collector/processor/xprocessor v0.138.0 // indirect
6968
go.opentelemetry.io/collector/receiver/xreceiver v0.138.0 // indirect
7069
go.opentelemetry.io/collector/service v0.138.0 // indirect
71-
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
72-
go.opentelemetry.io/otel/log v0.14.0 // indirect
7370
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
7471
go.uber.org/multierr v1.11.0 // indirect
7572
go.yaml.in/yaml/v3 v3.0.4 // indirect

cmd/mdatagen/go.sum

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

component/componentstatus/go.mod

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,16 @@ require (
1111

1212
require (
1313
github.com/davecgh/go-spew v1.1.1 // indirect
14-
github.com/go-logr/logr v1.4.3 // indirect
15-
github.com/go-logr/stdr v1.2.2 // indirect
1614
github.com/gogo/protobuf v1.3.2 // indirect
1715
github.com/hashicorp/go-version v1.7.0 // indirect
1816
github.com/json-iterator/go v1.1.12 // indirect
1917
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
2018
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
2119
github.com/pmezard/go-difflib v1.0.0 // indirect
22-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
2320
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
24-
go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect
25-
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
2621
go.opentelemetry.io/otel v1.38.0 // indirect
27-
go.opentelemetry.io/otel/log v0.14.0 // indirect
2822
go.opentelemetry.io/otel/metric v1.38.0 // indirect
23+
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
2924
go.opentelemetry.io/otel/trace v1.38.0 // indirect
3025
go.uber.org/multierr v1.11.0 // indirect
3126
go.uber.org/zap v1.27.0 // indirect
@@ -44,6 +39,4 @@ replace go.opentelemetry.io/collector/pdata => ../../pdata
4439

4540
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
4641

47-
replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
48-
4942
replace go.opentelemetry.io/collector/featuregate => ../../featuregate

component/componentstatus/go.sum

Lines changed: 0 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

component/componenttest/go.mod

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ require (
2828
github.com/pmezard/go-difflib v1.0.0 // indirect
2929
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
3030
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
31-
go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect
32-
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
3331
go.opentelemetry.io/otel v1.38.0 // indirect
34-
go.opentelemetry.io/otel/log v0.14.0 // indirect
3532
golang.org/x/net v0.42.0 // indirect
3633
golang.org/x/sys v0.35.0 // indirect
3734
golang.org/x/text v0.27.0 // indirect
@@ -45,8 +42,4 @@ replace go.opentelemetry.io/collector/component => ../
4542

4643
replace go.opentelemetry.io/collector/pdata => ../../pdata
4744

48-
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
49-
50-
replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
51-
5245
replace go.opentelemetry.io/collector/featuregate => ../../featuregate

component/componenttest/go.sum

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

component/go.mod

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,26 @@ go 1.24.0
44

55
require (
66
github.com/stretchr/testify v1.11.1
7-
go.opentelemetry.io/collector/internal/telemetry v0.138.0
7+
go.opentelemetry.io/collector/pdata v1.44.0
8+
go.opentelemetry.io/otel/metric v1.38.0
9+
go.opentelemetry.io/otel/trace v1.38.0
810
go.uber.org/goleak v1.3.0
11+
go.uber.org/zap v1.27.0
912
)
1013

1114
require (
1215
github.com/davecgh/go-spew v1.1.1 // indirect
13-
github.com/go-logr/logr v1.4.3 // indirect
14-
github.com/go-logr/stdr v1.2.2 // indirect
1516
github.com/gogo/protobuf v1.3.2 // indirect
1617
github.com/hashicorp/go-version v1.7.0 // indirect
1718
github.com/json-iterator/go v1.1.12 // indirect
1819
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
1920
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
2021
github.com/pmezard/go-difflib v1.0.0 // indirect
21-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
22+
github.com/rogpeppe/go-internal v1.13.1 // indirect
2223
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
23-
go.opentelemetry.io/collector/pdata v1.44.0 // indirect
24-
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
2524
go.opentelemetry.io/otel v1.38.0 // indirect
26-
go.opentelemetry.io/otel/log v0.14.0 // indirect
27-
go.opentelemetry.io/otel/metric v1.38.0 // indirect
28-
go.opentelemetry.io/otel/trace v1.38.0 // indirect
25+
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
2926
go.uber.org/multierr v1.11.0 // indirect
30-
go.uber.org/zap v1.27.0 // indirect
3127
golang.org/x/net v0.42.0 // indirect
3228
golang.org/x/sys v0.35.0 // indirect
3329
golang.org/x/text v0.27.0 // indirect
@@ -44,8 +40,4 @@ retract (
4440
v0.69.0 // Release failed, use v0.69.1
4541
)
4642

47-
replace go.opentelemetry.io/collector/internal/telemetry => ../internal/telemetry
48-
49-
replace go.opentelemetry.io/collector/pipeline => ../pipeline
50-
5143
replace go.opentelemetry.io/collector/featuregate => ../featuregate

component/go.sum

Lines changed: 0 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

component/telemetry.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,31 @@
44
package component // import "go.opentelemetry.io/collector/component"
55

66
import (
7-
"go.opentelemetry.io/collector/internal/telemetry"
7+
"go.opentelemetry.io/otel/metric"
8+
"go.opentelemetry.io/otel/trace"
9+
"go.uber.org/zap"
10+
11+
"go.opentelemetry.io/collector/pdata/pcommon"
812
)
913

1014
// TelemetrySettings provides components with APIs to report telemetry.
11-
type TelemetrySettings = telemetry.TelemetrySettings
15+
type TelemetrySettings struct {
16+
// Logger that the factory can use during creation and can pass to the created
17+
// component to be used later as well.
18+
Logger *zap.Logger
19+
20+
// TracerProvider that the factory can pass to other instrumented third-party libraries.
21+
//
22+
// The service may wrap this provider for attribute injection. The wrapper may implement an
23+
// additional `Unwrap() trace.TracerProvider` method to grant access to the underlying SDK.
24+
TracerProvider trace.TracerProvider
25+
26+
// MeterProvider that the factory can pass to other instrumented third-party libraries.
27+
MeterProvider metric.MeterProvider
28+
29+
// Resource contains the resource attributes for the collector's telemetry.
30+
Resource pcommon.Resource
31+
32+
// prevent unkeyed literal initialization
33+
_ struct{}
34+
}

config/configauth/go.mod

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,15 @@ require (
1313

1414
require (
1515
github.com/davecgh/go-spew v1.1.1 // indirect
16-
github.com/go-logr/logr v1.4.3 // indirect
17-
github.com/go-logr/stdr v1.2.2 // indirect
1816
github.com/gogo/protobuf v1.3.2 // indirect
1917
github.com/hashicorp/go-version v1.7.0 // indirect
2018
github.com/json-iterator/go v1.1.12 // indirect
2119
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
2220
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
2321
github.com/pmezard/go-difflib v1.0.0 // indirect
24-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
2522
go.opentelemetry.io/collector/featuregate v1.44.0 // indirect
26-
go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect
2723
go.opentelemetry.io/collector/pdata v1.44.0 // indirect
28-
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
2924
go.opentelemetry.io/otel v1.38.0 // indirect
30-
go.opentelemetry.io/otel/log v0.14.0 // indirect
3125
go.opentelemetry.io/otel/metric v1.38.0 // indirect
3226
go.opentelemetry.io/otel/trace v1.38.0 // indirect
3327
go.uber.org/multierr v1.11.0 // indirect
@@ -51,8 +45,4 @@ replace go.opentelemetry.io/collector/extension/extensionauth => ../../extension
5145

5246
replace go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest => ../../extension/extensionauth/extensionauthtest
5347

54-
replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
55-
56-
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
57-
5848
replace go.opentelemetry.io/collector/featuregate => ../../featuregate

0 commit comments

Comments
 (0)