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

Wrap TelemetrySettings providers to add component-identifying attributes #12384

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9238c22
Wrap TelemetrySettings providers to add component-identifying attributes
jade-guiton-dd Feb 13, 2025
8ef0c86
Merge branch 'main' into metric-span-component-attributes
jade-guiton-dd Feb 13, 2025
2fbd5b8
Add license headers
jade-guiton-dd Feb 14, 2025
88e477d
Fix linting
jade-guiton-dd Feb 14, 2025
806fb7a
Fix bug
jade-guiton-dd Feb 14, 2025
9e0efa5
Add changelog
jade-guiton-dd Feb 14, 2025
213ef9d
make gotidy
jade-guiton-dd Feb 14, 2025
766266d
make goporto
jade-guiton-dd Feb 14, 2025
c242492
Fix bug 2
jade-guiton-dd Feb 14, 2025
106dd59
Fix otlp receiver test
jade-guiton-dd Feb 14, 2025
57519e6
Rename to WithoutAttributes, unexport attribute.Set field
jade-guiton-dd Feb 14, 2025
3d0711e
Merge branch 'main' into metric-span-component-attributes
jade-guiton-dd Feb 14, 2025
21e7841
Add missing license
jade-guiton-dd Feb 14, 2025
90c88a5
Fix linting and import comment
jade-guiton-dd Feb 14, 2025
15dc7dd
Add special wrapper for TracerProvider from offical SDK
jade-guiton-dd Feb 14, 2025
81be0d3
Fix linting
jade-guiton-dd Feb 14, 2025
8124d82
Add test for wrapped meter provider
jade-guiton-dd Feb 17, 2025
fae6bb6
Lint and add license to new test
jade-guiton-dd Feb 17, 2025
7f5ebd8
Add test for wrapped tracer provider
jade-guiton-dd Feb 17, 2025
aa1f5e1
Add test for RegisterCallback
jade-guiton-dd Feb 17, 2025
1ba12b6
Update comment about API publicization
jade-guiton-dd Feb 17, 2025
5fe0643
Add tests for non-official SDK support
jade-guiton-dd Feb 17, 2025
17fdf81
Updated changelog
jade-guiton-dd Feb 18, 2025
5d7a01a
Merge branch 'main' into metric-span-component-attributes
jade-guiton-dd Feb 18, 2025
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
37 changes: 37 additions & 0 deletions .chloggen/metric-span-component-attributes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Use this changelog template to create an entry for release notes.

# 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: Internal metrics and spans now include component-related attributes.

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

# (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: |
All internal telemetry now includes one or more of the following metric/span attributes:
- `otelcol.component.kind`
- `otelcol.component.id`
- `otelcol.pipeline.id`
- `otelcol.signal`
- `otelcol.signal.output`
These attributes are defined in the [Pipeline Component Telemetry RFC](https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/rfcs/component-universal-telemetry.md#attributes),
and identify the component instance from which the telemetry originates.
These attribues are added automatically without changes to component code by wrapping the
`MeterProvider` and `TracerProvider` provided to them.
Components will be able to opt out of one or more of these attributes, but that API is not yet
publicly available.

# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: [user, api]
Copy link
Member

@dmitryax dmitryax Feb 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This approach looks good to me. Thank you for putting this together. Are there any visible changes for end-users at this point?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say yes, since this adds otelcol.component.id and friends to basically all internal metrics/logs.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please add this to the subtext or create another user-facing changelog item?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description of the item is "Internal metrics and spans now include component attributes", and the subtext already says "[The providers] automatically insert metric/span attributes which identify the originating component instance, as defined in the Pipeline Component Telemetry RFC". Do you think I should list the attributes explicitly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reworded the changelog and added more details, tell me whether you think it's sufficient.

3 changes: 3 additions & 0 deletions cmd/mdatagen/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ require (
go.opentelemetry.io/collector/component/componentstatus v0.120.0 // indirect
go.opentelemetry.io/collector/consumer/consumererror v0.120.0 // indirect
go.opentelemetry.io/collector/consumer/xconsumer v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata/pprofile v0.120.0 // indirect
go.opentelemetry.io/collector/pdata/testdata v0.120.0 // indirect
go.opentelemetry.io/collector/pipeline v0.120.0 // indirect
Expand Down Expand Up @@ -118,3 +119,5 @@ replace go.opentelemetry.io/collector/consumer/consumererror => ../../consumer/c
replace go.opentelemetry.io/collector/scraper => ../../scraper

replace go.opentelemetry.io/collector/scraper/scrapertest => ../../scraper/scrapertest

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
8 changes: 8 additions & 0 deletions component/componentstatus/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,17 @@ require (

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata v1.26.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
Expand All @@ -32,3 +38,5 @@ replace go.opentelemetry.io/collector/component => ../
replace go.opentelemetry.io/collector/pdata => ../../pdata

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

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
5 changes: 3 additions & 2 deletions component/componentstatus/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions component/componenttest/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ require (
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
Expand All @@ -36,3 +37,7 @@ require (
replace go.opentelemetry.io/collector/component => ../

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

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

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
18 changes: 14 additions & 4 deletions component/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,25 @@ go 1.23.0

require (
github.com/stretchr/testify v1.10.0
go.opentelemetry.io/collector/pdata v1.26.0
go.opentelemetry.io/otel/metric v1.34.0
go.opentelemetry.io/otel/trace v1.34.0
go.opentelemetry.io/collector/internal/telemetry v0.120.0
go.uber.org/goleak v1.3.0
go.uber.org/zap v1.27.0
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/pdata v1.26.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
Expand All @@ -32,3 +38,7 @@ retract (
v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module, use v0.76.1
v0.69.0 // Release failed, use v0.69.1
)

replace go.opentelemetry.io/collector/internal/telemetry => ../internal/telemetry

replace go.opentelemetry.io/collector/pipeline => ../pipeline
5 changes: 3 additions & 2 deletions component/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 2 additions & 19 deletions component/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,8 @@
package component // import "go.opentelemetry.io/collector/component"

import (
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"

"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/internal/telemetry"
)

// TelemetrySettings provides components with APIs to report telemetry.
type TelemetrySettings struct {
// Logger that the factory can use during creation and can pass to the created
// component to be used later as well.
Logger *zap.Logger

// TracerProvider that the factory can pass to other instrumented third-party libraries.
TracerProvider trace.TracerProvider

// MeterProvider that the factory can pass to other instrumented third-party libraries.
MeterProvider metric.MeterProvider

// Resource contains the resource attributes for the collector's telemetry.
Resource pcommon.Resource
}
type TelemetrySettings = telemetry.TelemetrySettings
10 changes: 10 additions & 0 deletions config/configauth/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@ require (

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata v1.26.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
Expand All @@ -38,3 +44,7 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component
replace go.opentelemetry.io/collector/extension => ../../extension

replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry

replace go.opentelemetry.io/collector/pipeline => ../../pipeline
5 changes: 3 additions & 2 deletions config/configauth/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions config/configgrpc/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/extension v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata/pprofile v0.120.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
Expand Down Expand Up @@ -82,3 +83,7 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component
replace go.opentelemetry.io/collector/consumer => ../../consumer

replace go.opentelemetry.io/collector/extension/auth/authtest => ../../extension/auth/authtest

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry

replace go.opentelemetry.io/collector/pipeline => ../../pipeline
5 changes: 5 additions & 0 deletions config/confighttp/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/extension v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata v1.26.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
Expand Down Expand Up @@ -72,3 +73,7 @@ replace go.opentelemetry.io/collector/consumer => ../../consumer
replace go.opentelemetry.io/collector/client => ../../client

replace go.opentelemetry.io/collector/extension/auth/authtest => ../../extension/auth/authtest

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

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
5 changes: 5 additions & 0 deletions config/confighttp/xconfighttp/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ require (
go.opentelemetry.io/collector/config/configtls v1.26.0 // indirect
go.opentelemetry.io/collector/extension v0.120.0 // indirect
go.opentelemetry.io/collector/extension/auth v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata v1.26.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
Expand Down Expand Up @@ -73,3 +74,7 @@ replace go.opentelemetry.io/collector/extension => ../../../extension
replace go.opentelemetry.io/collector/config/configtls => ../../configtls

replace go.opentelemetry.io/collector/config/configcompression => ../../configcompression

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

replace go.opentelemetry.io/collector/internal/telemetry => ../../../internal/telemetry
3 changes: 3 additions & 0 deletions connector/connectortest/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/internal/fanoutconsumer v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pipeline v0.120.0 // indirect
go.opentelemetry.io/collector/pipeline/xpipeline v0.120.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
Expand Down Expand Up @@ -71,3 +72,5 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline
replace go.opentelemetry.io/collector/pipeline/xpipeline => ../../pipeline/xpipeline

replace go.opentelemetry.io/collector/internal/fanoutconsumer => ../../internal/fanoutconsumer

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
3 changes: 3 additions & 0 deletions connector/forwardconnector/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ require (
go.opentelemetry.io/collector/connector/xconnector v0.120.0 // indirect
go.opentelemetry.io/collector/consumer/xconsumer v0.120.0 // indirect
go.opentelemetry.io/collector/internal/fanoutconsumer v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata/pprofile v0.120.0 // indirect
go.opentelemetry.io/collector/pipeline/xpipeline v0.120.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
Expand Down Expand Up @@ -88,3 +89,5 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline
replace go.opentelemetry.io/collector/pipeline/xpipeline => ../../pipeline/xpipeline

replace go.opentelemetry.io/collector/internal/fanoutconsumer => ../../internal/fanoutconsumer

replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry
9 changes: 8 additions & 1 deletion connector/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,21 @@ require (

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/consumer/xconsumer v0.120.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.120.0 // indirect
go.opentelemetry.io/collector/pdata/pprofile v0.120.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/net v0.33.0 // indirect
Expand Down Expand Up @@ -55,3 +60,5 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consu
replace go.opentelemetry.io/collector/pipeline => ../pipeline

replace go.opentelemetry.io/collector/internal/fanoutconsumer => ../internal/fanoutconsumer

replace go.opentelemetry.io/collector/internal/telemetry => ../internal/telemetry
5 changes: 3 additions & 2 deletions connector/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading