diff --git a/.chloggen/ddexp-trace-http.yaml b/.chloggen/ddexp-trace-http.yaml new file mode 100644 index 000000000000..6b47cfc63b7c --- /dev/null +++ b/.chloggen/ddexp-trace-http.yaml @@ -0,0 +1,27 @@ +# 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. filelogreceiver) +component: datadogexporter + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Add a feature gate `exporter.datadogexporter.TraceExportUseCustomHTTPClient` that allows a custom HTTP client to be used in trace export" + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [34025] + +# (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: "This is an experimental feature. By default the feature gate is disabled and trace export uses a default HTTP client." + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# 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: [] diff --git a/cmd/otelcontribcol/go.mod b/cmd/otelcontribcol/go.mod index f1b375c1fda1..fef432ef1d76 100644 --- a/cmd/otelcontribcol/go.mod +++ b/cmd/otelcontribcol/go.mod @@ -327,7 +327,7 @@ require ( github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 // indirect - github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 // indirect + github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.1 // indirect diff --git a/cmd/otelcontribcol/go.sum b/cmd/otelcontribcol/go.sum index 2a5dff7f8785..4bda4f6b97d3 100644 --- a/cmd/otelcontribcol/go.sum +++ b/cmd/otelcontribcol/go.sum @@ -813,8 +813,8 @@ github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 h1:EoliKKR76N8dw github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1/go.mod h1:sNLVlyEtkYal/+kTj+mTp239DdwVuYBYOnpS90RKk5E= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 h1:esIonH+3dYwSrTVMtTD3bGGJvd9+yVt4r9q6Cw8uXUo= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1/go.mod h1:v369ANtHEIt5AvDPAZLs6paKioXhvpWCAM5CB1Syy1g= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 h1:V7sm69xhL9r2XlPE3VyvU7jYrdLZR8HeJWR3IT9vEwM= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f h1:0ErjSIbMq6VP16/XTFzwj030wXwucEWCsmi+RdMSmyE= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 h1:ZYX5KnklcbqvMdGmicwJuTwTzdybRTsQ4t/SGui6deQ= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1/go.mod h1:HcSwqoxWLfevi1vuDZuFeRHfSuHGakTN6/u42WbxQHE= github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 h1:79wJLXex6qheSfSDNlPOHmIqj72uK6FbQ6M1fKJYE0Q= diff --git a/connector/datadogconnector/go.mod b/connector/datadogconnector/go.mod index a0d0745c7274..3fe0d5929299 100644 --- a/connector/datadogconnector/go.mod +++ b/connector/datadogconnector/go.mod @@ -6,7 +6,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/metricsclient v0.56.0-rc.1 github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/statsprocessor v0.56.0-rc.1 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.1 - github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 + github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f github.com/DataDog/datadog-go/v5 v5.5.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.17.0 diff --git a/connector/datadogconnector/go.sum b/connector/datadogconnector/go.sum index b73bb14557d0..294af61ba6e4 100644 --- a/connector/datadogconnector/go.sum +++ b/connector/datadogconnector/go.sum @@ -158,8 +158,8 @@ github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 h1:EoliKKR76N8dw github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1/go.mod h1:sNLVlyEtkYal/+kTj+mTp239DdwVuYBYOnpS90RKk5E= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 h1:esIonH+3dYwSrTVMtTD3bGGJvd9+yVt4r9q6Cw8uXUo= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1/go.mod h1:v369ANtHEIt5AvDPAZLs6paKioXhvpWCAM5CB1Syy1g= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 h1:V7sm69xhL9r2XlPE3VyvU7jYrdLZR8HeJWR3IT9vEwM= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f h1:0ErjSIbMq6VP16/XTFzwj030wXwucEWCsmi+RdMSmyE= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 h1:ZYX5KnklcbqvMdGmicwJuTwTzdybRTsQ4t/SGui6deQ= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1/go.mod h1:HcSwqoxWLfevi1vuDZuFeRHfSuHGakTN6/u42WbxQHE= github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 h1:79wJLXex6qheSfSDNlPOHmIqj72uK6FbQ6M1fKJYE0Q= diff --git a/exporter/datadogexporter/go.mod b/exporter/datadogexporter/go.mod index 86423589c595..3f3fc7356123 100644 --- a/exporter/datadogexporter/go.mod +++ b/exporter/datadogexporter/go.mod @@ -22,7 +22,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/status/statusinterface v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.1 github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 // indirect - github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 + github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.27.0 github.com/DataDog/datadog-go/v5 v5.5.0 diff --git a/exporter/datadogexporter/go.sum b/exporter/datadogexporter/go.sum index 3ac7bdaac0e2..8cf855daae86 100644 --- a/exporter/datadogexporter/go.sum +++ b/exporter/datadogexporter/go.sum @@ -165,8 +165,8 @@ github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 h1:EoliKKR76N8dw github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1/go.mod h1:sNLVlyEtkYal/+kTj+mTp239DdwVuYBYOnpS90RKk5E= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 h1:esIonH+3dYwSrTVMtTD3bGGJvd9+yVt4r9q6Cw8uXUo= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1/go.mod h1:v369ANtHEIt5AvDPAZLs6paKioXhvpWCAM5CB1Syy1g= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 h1:V7sm69xhL9r2XlPE3VyvU7jYrdLZR8HeJWR3IT9vEwM= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f h1:0ErjSIbMq6VP16/XTFzwj030wXwucEWCsmi+RdMSmyE= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 h1:ZYX5KnklcbqvMdGmicwJuTwTzdybRTsQ4t/SGui6deQ= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1/go.mod h1:HcSwqoxWLfevi1vuDZuFeRHfSuHGakTN6/u42WbxQHE= github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 h1:79wJLXex6qheSfSDNlPOHmIqj72uK6FbQ6M1fKJYE0Q= diff --git a/exporter/datadogexporter/integrationtest/go.mod b/exporter/datadogexporter/integrationtest/go.mod index f05d571a4b5d..e2ea10e74df4 100644 --- a/exporter/datadogexporter/integrationtest/go.mod +++ b/exporter/datadogexporter/integrationtest/go.mod @@ -70,7 +70,7 @@ require ( github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 // indirect - github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 // indirect + github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 // indirect github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.1 // indirect diff --git a/exporter/datadogexporter/integrationtest/go.sum b/exporter/datadogexporter/integrationtest/go.sum index 27b4b5ee96a7..d57838d6fb1f 100644 --- a/exporter/datadogexporter/integrationtest/go.sum +++ b/exporter/datadogexporter/integrationtest/go.sum @@ -158,8 +158,8 @@ github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1 h1:EoliKKR76N8dw github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.1/go.mod h1:sNLVlyEtkYal/+kTj+mTp239DdwVuYBYOnpS90RKk5E= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1 h1:esIonH+3dYwSrTVMtTD3bGGJvd9+yVt4r9q6Cw8uXUo= github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.1/go.mod h1:v369ANtHEIt5AvDPAZLs6paKioXhvpWCAM5CB1Syy1g= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1 h1:V7sm69xhL9r2XlPE3VyvU7jYrdLZR8HeJWR3IT9vEwM= -github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f h1:0ErjSIbMq6VP16/XTFzwj030wXwucEWCsmi+RdMSmyE= +github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.1.0.20240711082232-dc70454ece9f/go.mod h1:1/d0P1YxPTMLcFUMvYyIIEwqW1e+z0J/pt0YXpbtnME= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1 h1:ZYX5KnklcbqvMdGmicwJuTwTzdybRTsQ4t/SGui6deQ= github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.1/go.mod h1:HcSwqoxWLfevi1vuDZuFeRHfSuHGakTN6/u42WbxQHE= github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.1 h1:79wJLXex6qheSfSDNlPOHmIqj72uK6FbQ6M1fKJYE0Q= diff --git a/exporter/datadogexporter/traces_exporter.go b/exporter/datadogexporter/traces_exporter.go index 04134645450d..899ea006fd7c 100644 --- a/exporter/datadogexporter/traces_exporter.go +++ b/exporter/datadogexporter/traces_exporter.go @@ -22,6 +22,7 @@ import ( "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/ptrace" "go.uber.org/zap" @@ -33,6 +34,13 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/scrub" ) +var traceCustomHTTPFeatureGate = featuregate.GlobalRegistry().MustRegister( + "exporter.datadogexporter.TraceExportUseCustomHTTPClient", + featuregate.StageAlpha, + featuregate.WithRegisterDescription("When enabled, trace export uses the HTTP client from the exporter HTTP configs"), + featuregate.WithRegisterFromVersion("v0.105.0"), +) + type traceExporter struct { params exporter.Settings cfg *Config @@ -212,6 +220,12 @@ func newTraceAgentConfig(ctx context.Context, params exporter.Settings, cfg *Con acfg.PeerTagsAggregation = cfg.Traces.PeerTagsAggregation acfg.PeerTags = cfg.Traces.PeerTags acfg.MaxSenderRetries = 4 + if traceCustomHTTPFeatureGate.IsEnabled() { + params.Logger.Info("Experimental feature: datadog exporter trace export uses a custom HTTP client from the exporter HTTP configs") + acfg.HTTPClientFunc = func() *http.Client { + return clientutil.NewHTTPClient(cfg.ClientConfig) + } + } if v := cfg.Traces.flushInterval; v > 0 { acfg.TraceWriter.FlushPeriodSeconds = v }