Skip to content

Commit f330cfb

Browse files
authored
Add profiles support to OTLP HTTP exporter (open-telemetry#11450)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> #### Description This uses the profiles internal packages that were implemented in previous PRs to provide profiles support to the OTLP HTTP exporter. This PR requires open-telemetry#11226✅ to be merged first.
1 parent 9cb0761 commit f330cfb

File tree

15 files changed

+318
-19
lines changed

15 files changed

+318
-19
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: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: otlphttpexporter
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Add profiles support to OTLP HTTP exporter
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [11450]
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: [api]

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,13 @@ check-contrib:
287287
-replace go.opentelemetry.io/collector/connector/connectorprofiles=$(CURDIR)/connector/connectorprofiles \
288288
-replace go.opentelemetry.io/collector/connector/forwardconnector=$(CURDIR)/connector/forwardconnector \
289289
-replace go.opentelemetry.io/collector/consumer=$(CURDIR)/consumer \
290+
-replace go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles=$(CURDIR)/consumer/consumererror/consumererrorprofiles \
290291
-replace go.opentelemetry.io/collector/consumer/consumerprofiles=$(CURDIR)/consumer/consumerprofiles \
291292
-replace go.opentelemetry.io/collector/consumer/consumertest=$(CURDIR)/consumer/consumertest \
292293
-replace go.opentelemetry.io/collector/exporter=$(CURDIR)/exporter \
293294
-replace go.opentelemetry.io/collector/exporter/debugexporter=$(CURDIR)/exporter/debugexporter \
294295
-replace go.opentelemetry.io/collector/exporter/exporterprofiles=$(CURDIR)/exporter/exporterprofiles \
296+
-replace go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles=$(CURDIR)/exporter/exporterhelper/exporterhelperprofiles \
295297
-replace go.opentelemetry.io/collector/exporter/nopexporter=$(CURDIR)/exporter/nopexporter \
296298
-replace go.opentelemetry.io/collector/exporter/otlpexporter=$(CURDIR)/exporter/otlpexporter \
297299
-replace go.opentelemetry.io/collector/exporter/otlphttpexporter=$(CURDIR)/exporter/otlphttpexporter \
@@ -360,9 +362,11 @@ restore-contrib:
360362
-dropreplace go.opentelemetry.io/collector/connector/connectorprofiles \
361363
-dropreplace go.opentelemetry.io/collector/connector/forwardconnector \
362364
-dropreplace go.opentelemetry.io/collector/consumer \
365+
-dropreplace go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles \
363366
-dropreplace go.opentelemetry.io/collector/consumer/consumerprofiles \
364367
-dropreplace go.opentelemetry.io/collector/consumer/consumertest \
365368
-dropreplace go.opentelemetry.io/collector/exporter \
369+
-dropreplace go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles \
366370
-dropreplace go.opentelemetry.io/collector/exporter/debugexporter \
367371
-dropreplace go.opentelemetry.io/collector/exporter/nopexporter \
368372
-dropreplace go.opentelemetry.io/collector/exporter/otlpexporter \

cmd/builder/internal/builder/main_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ var (
6060
"/confmap/provider/httpsprovider",
6161
"/confmap/provider/yamlprovider",
6262
"/consumer",
63+
"/consumer/consumererror/consumererrorprofiles",
6364
"/consumer/consumerprofiles",
6465
"/consumer/consumertest",
6566
"/connector",
@@ -68,6 +69,7 @@ var (
6869
"/exporter",
6970
"/exporter/debugexporter",
7071
"/exporter/exporterprofiles",
72+
"/exporter/exporterhelper/exporterhelperprofiles",
7173
"/exporter/nopexporter",
7274
"/exporter/otlpexporter",
7375
"/exporter/otlphttpexporter",

cmd/builder/test/core.builder.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ replaces:
4141
- go.opentelemetry.io/collector/exporter => ${WORKSPACE_DIR}/exporter
4242
- go.opentelemetry.io/collector/exporter/debugexporter => ${WORKSPACE_DIR}/exporter/debugexporter
4343
- go.opentelemetry.io/collector/exporter/exporterprofiles => ${WORKSPACE_DIR}/exporter/exporterprofiles
44+
- go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles => ${WORKSPACE_DIR}/exporter/exporterhelper/exporterhelperprofiles
4445
- go.opentelemetry.io/collector/extension => ${WORKSPACE_DIR}/extension
4546
- go.opentelemetry.io/collector/extension/auth => ${WORKSPACE_DIR}/extension/auth
4647
- go.opentelemetry.io/collector/extension/experimental/storage => ${WORKSPACE_DIR}/extension/experimental/storage

cmd/otelcorecol/builder-config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ replaces:
6060
- go.opentelemetry.io/collector/confmap/provider/yamlprovider => ../../confmap/provider/yamlprovider
6161
- go.opentelemetry.io/collector/consumer => ../../consumer
6262
- go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consumer/consumerprofiles
63+
- go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles => ../../consumer/consumererror/consumererrorprofiles
6364
- go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
6465
- go.opentelemetry.io/collector/connector => ../../connector
6566
- go.opentelemetry.io/collector/connector/connectortest => ../../connector/connectortest
@@ -68,6 +69,7 @@ replaces:
6869
- go.opentelemetry.io/collector/exporter => ../../exporter
6970
- go.opentelemetry.io/collector/exporter/debugexporter => ../../exporter/debugexporter
7071
- go.opentelemetry.io/collector/exporter/exporterprofiles => ../../exporter/exporterprofiles
72+
- go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles => ../../exporter/exporterhelper/exporterhelperprofiles
7173
- go.opentelemetry.io/collector/exporter/nopexporter => ../../exporter/nopexporter
7274
- go.opentelemetry.io/collector/exporter/otlpexporter => ../../exporter/otlpexporter
7375
- go.opentelemetry.io/collector/exporter/otlphttpexporter => ../../exporter/otlphttpexporter

cmd/otelcorecol/go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,10 @@ require (
9595
go.opentelemetry.io/collector/connector/connectorprofiles v0.111.0 // indirect
9696
go.opentelemetry.io/collector/connector/connectortest v0.111.0 // indirect
9797
go.opentelemetry.io/collector/consumer v0.111.0 // indirect
98+
go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.0.0-00010101000000-000000000000 // indirect
9899
go.opentelemetry.io/collector/consumer/consumerprofiles v0.111.0 // indirect
99100
go.opentelemetry.io/collector/consumer/consumertest v0.111.0 // indirect
101+
go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.0.0-00010101000000-000000000000 // indirect
100102
go.opentelemetry.io/collector/exporter/exporterprofiles v0.111.0 // indirect
101103
go.opentelemetry.io/collector/extension/auth v0.111.0 // indirect
102104
go.opentelemetry.io/collector/extension/experimental/storage v0.111.0 // indirect
@@ -193,6 +195,8 @@ replace go.opentelemetry.io/collector/consumer => ../../consumer
193195

194196
replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consumer/consumerprofiles
195197

198+
replace go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles => ../../consumer/consumererror/consumererrorprofiles
199+
196200
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
197201

198202
replace go.opentelemetry.io/collector/connector => ../../connector
@@ -209,6 +213,8 @@ replace go.opentelemetry.io/collector/exporter/debugexporter => ../../exporter/d
209213

210214
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../../exporter/exporterprofiles
211215

216+
replace go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles => ../../exporter/exporterhelper/exporterhelperprofiles
217+
212218
replace go.opentelemetry.io/collector/exporter/nopexporter => ../../exporter/nopexporter
213219

214220
replace go.opentelemetry.io/collector/exporter/otlpexporter => ../../exporter/otlpexporter

exporter/otlphttpexporter/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
<!-- status autogenerated section -->
44
| Status | |
55
| ------------- |-----------|
6-
| Stability | [beta]: logs |
6+
| Stability | [development]: profiles |
7+
| | [beta]: logs |
78
| | [stable]: traces, metrics |
89
| Distributions | [core], [contrib], [k8s] |
910
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fotlphttp%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fotlphttp) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fotlphttp%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fotlphttp) |
1011

12+
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
1113
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
1214
[stable]: https://github.com/open-telemetry/opentelemetry-collector#stable
1315
[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol

exporter/otlphttpexporter/factory.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,20 @@ import (
1717
"go.opentelemetry.io/collector/consumer"
1818
"go.opentelemetry.io/collector/exporter"
1919
"go.opentelemetry.io/collector/exporter/exporterhelper"
20+
"go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles"
21+
"go.opentelemetry.io/collector/exporter/exporterprofiles"
2022
"go.opentelemetry.io/collector/exporter/otlphttpexporter/internal/metadata"
2123
)
2224

2325
// NewFactory creates a factory for OTLP exporter.
2426
func NewFactory() exporter.Factory {
25-
return exporter.NewFactory(
27+
return exporterprofiles.NewFactory(
2628
metadata.Type,
2729
createDefaultConfig,
28-
exporter.WithTraces(createTraces, metadata.TracesStability),
29-
exporter.WithMetrics(createMetrics, metadata.MetricsStability),
30-
exporter.WithLogs(createLogs, metadata.LogsStability),
30+
exporterprofiles.WithTraces(createTraces, metadata.TracesStability),
31+
exporterprofiles.WithMetrics(createMetrics, metadata.MetricsStability),
32+
exporterprofiles.WithLogs(createLogs, metadata.LogsStability),
33+
exporterprofiles.WithProfiles(createProfiles, metadata.ProfilesStability),
3134
)
3235
}
3336

@@ -146,3 +149,29 @@ func createLogs(
146149
exporterhelper.WithRetry(oCfg.RetryConfig),
147150
exporterhelper.WithQueue(oCfg.QueueConfig))
148151
}
152+
153+
func createProfiles(
154+
ctx context.Context,
155+
set exporter.Settings,
156+
cfg component.Config,
157+
) (exporterprofiles.Profiles, error) {
158+
oce, err := newExporter(cfg, set)
159+
if err != nil {
160+
return nil, err
161+
}
162+
oCfg := cfg.(*Config)
163+
164+
oce.profilesURL, err = composeSignalURL(oCfg, "", "profiles", "v1development")
165+
if err != nil {
166+
return nil, err
167+
}
168+
169+
return exporterhelperprofiles.NewProfilesExporter(ctx, set, cfg,
170+
oce.pushProfiles,
171+
exporterhelper.WithStart(oce.start),
172+
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
173+
// explicitly disable since we rely on http.Client timeout logic.
174+
exporterhelper.WithTimeout(exporterhelper.TimeoutConfig{Timeout: 0}),
175+
exporterhelper.WithRetry(oCfg.RetryConfig),
176+
exporterhelper.WithQueue(oCfg.QueueConfig))
177+
}

exporter/otlphttpexporter/factory_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"go.opentelemetry.io/collector/config/confighttp"
1818
"go.opentelemetry.io/collector/config/configopaque"
1919
"go.opentelemetry.io/collector/config/configtls"
20+
"go.opentelemetry.io/collector/exporter/exporterprofiles"
2021
"go.opentelemetry.io/collector/exporter/exportertest"
2122
"go.opentelemetry.io/collector/internal/testutil"
2223
)
@@ -198,6 +199,17 @@ func TestCreateLogs(t *testing.T) {
198199
require.NotNil(t, oexp)
199200
}
200201

202+
func TestCreateProfiles(t *testing.T) {
203+
factory := NewFactory()
204+
cfg := factory.CreateDefaultConfig().(*Config)
205+
cfg.ClientConfig.Endpoint = "http://" + testutil.GetAvailableLocalAddress(t)
206+
207+
set := exportertest.NewNopSettings()
208+
oexp, err := factory.(exporterprofiles.Factory).CreateProfiles(context.Background(), set, cfg)
209+
require.NoError(t, err)
210+
require.NotNil(t, oexp)
211+
}
212+
201213
func TestComposeSignalURL(t *testing.T) {
202214
factory := NewFactory()
203215
cfg := factory.CreateDefaultConfig().(*Config)

exporter/otlphttpexporter/go.mod

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ require (
1414
go.opentelemetry.io/collector/confmap v1.17.0
1515
go.opentelemetry.io/collector/consumer v0.111.0
1616
go.opentelemetry.io/collector/exporter v0.111.0
17+
go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.0.0-00010101000000-000000000000
18+
go.opentelemetry.io/collector/exporter/exporterprofiles v0.111.0
1719
go.opentelemetry.io/collector/pdata v1.17.0
20+
go.opentelemetry.io/collector/pdata/pprofile v0.111.0
1821
go.uber.org/goleak v1.3.0
1922
go.uber.org/zap v1.27.0
2023
google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd
@@ -49,14 +52,14 @@ require (
4952
go.opentelemetry.io/collector/config/configauth v0.111.0 // indirect
5053
go.opentelemetry.io/collector/config/configtelemetry v0.111.0 // indirect
5154
go.opentelemetry.io/collector/config/internal v0.111.0 // indirect
55+
go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.0.0-00010101000000-000000000000 // indirect
5256
go.opentelemetry.io/collector/consumer/consumerprofiles v0.111.0 // indirect
5357
go.opentelemetry.io/collector/consumer/consumertest v0.111.0 // indirect
54-
go.opentelemetry.io/collector/exporter/exporterprofiles v0.111.0 // indirect
5558
go.opentelemetry.io/collector/extension v0.111.0 // indirect
5659
go.opentelemetry.io/collector/extension/auth v0.111.0 // indirect
5760
go.opentelemetry.io/collector/extension/experimental/storage v0.111.0 // indirect
58-
go.opentelemetry.io/collector/pdata/pprofile v0.111.0 // indirect
5961
go.opentelemetry.io/collector/pipeline v0.111.0 // indirect
62+
go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.0.0-00010101000000-000000000000 // indirect
6063
go.opentelemetry.io/collector/receiver v0.111.0 // indirect
6164
go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.0 // indirect
6265
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
@@ -122,6 +125,12 @@ replace go.opentelemetry.io/collector/component/componentstatus => ../../compone
122125

123126
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
124127

128+
replace go.opentelemetry.io/collector/pipeline/pipelineprofiles => ../../pipeline/pipelineprofiles
129+
130+
replace go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles => ../../consumer/consumererror/consumererrorprofiles
131+
132+
replace go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles => ../exporterhelper/exporterhelperprofiles
133+
125134
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
126135

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

0 commit comments

Comments
 (0)