diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/CapturedHttpHeaders.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/CapturedHttpHeaders.java
index fc854dc884..4f9c119ea4 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/CapturedHttpHeaders.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/CapturedHttpHeaders.java
@@ -8,33 +8,58 @@ package io.opentelemetry.instrumentation.api.instrumenter.http;
import static java.util.Collections.emptyList;
import com.google.auto.value.AutoValue;
+import io.opentelemetry.instrumentation.api.config.Config;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
/**
- * Represents the configuration that specifies which HTTP request/response headers should be
- * captured as span attributes.
+ * Represents the configuration that specifies which HTTP request and response headers should be
+ * captured as span attributes as described in HTTP
+ * semantic conventions.
+ *
+ *
The HTTP request header values will be captured under the {@code http.request.header.}
+ * attribute key. The HTTP response header values will be captured under the {@code
+ * http.response.header.} attribute key. The {@code } part in the attribute key is the
+ * normalized header name: lowercase, with dashes replaced by underscores.
*/
@AutoValue
public abstract class CapturedHttpHeaders {
private static final CapturedHttpHeaders EMPTY = create(emptyList(), emptyList());
- /** Don't capture any HTTP headers as span attributes. */
+ /** Returns a configuration that does not capture any HTTP headers as span attributes. */
public static CapturedHttpHeaders empty() {
return EMPTY;
}
/**
- * Captures the configured HTTP request and response headers as span attributes as described in HTTP
- * semantic conventions.
- *
- * The HTTP request header values will be captured under the {@code http.request.header.}
- * attribute key. The HTTP response header values will be captured under the {@code
- * http.response.header.} attribute key. The {@code } part in the attribute key is the
- * normalized header name: lowercase, with dashes replaced by underscores.
+ * Returns a configuration that captures HTTP client request and response headers as configured in
+ * the received {@code config}.
+ */
+ public static CapturedHttpHeaders client(Config config) {
+ return CapturedHttpHeaders.create(
+ config.getList(
+ "otel.instrumentation.common.experimental.capture-http-headers.client.request"),
+ config.getList(
+ "otel.instrumentation.common.experimental.capture-http-headers.client.response"));
+ }
+
+ /**
+ * Returns a configuration that captures HTTP server request and response headers as configured in
+ * the received {@code config}.
+ */
+ public static CapturedHttpHeaders server(Config config) {
+ return CapturedHttpHeaders.create(
+ config.getList(
+ "otel.instrumentation.common.experimental.capture-http-headers.server.request"),
+ config.getList(
+ "otel.instrumentation.common.experimental.capture-http-headers.server.response"));
+ }
+
+ /**
+ * Returns a configuration that captures chosen HTTP request and response headers.
*
* @param capturedRequestHeaders A list of HTTP request header names that are to be captured as
* span attributes.
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java
index 8464b07cd1..10ba8385ec 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java
@@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
+import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -24,7 +25,7 @@ public abstract class HttpClientAttributesExtractor
extends HttpCommonAttributesExtractor {
/**
- * Create the HTTP client attributes extractor.
+ * Creates the HTTP client attributes extractor.
*
* @param capturedHttpHeaders A configuration object specifying which HTTP request and response
* headers should be captured as span attributes.
@@ -33,6 +34,11 @@ public abstract class HttpClientAttributesExtractor
super(capturedHttpHeaders);
}
+ /** Creates the HTTP client attributes extractor with default configuration. */
+ protected HttpClientAttributesExtractor() {
+ this(CapturedHttpHeaders.client(Config.get()));
+ }
+
@Override
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
super.onStart(attributes, request);
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java
index 7a409a597d..70a0a60614 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java
@@ -10,6 +10,7 @@ import static io.opentelemetry.instrumentation.api.instrumenter.http.ForwarderHe
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
+import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -27,7 +28,7 @@ public abstract class HttpServerAttributesExtractor
extends HttpCommonAttributesExtractor {
/**
- * Create the HTTP server attributes extractor.
+ * Creates the HTTP server attributes extractor.
*
* @param capturedHttpHeaders A configuration object specifying which HTTP request and response
* headers should be captured as span attributes.
@@ -36,6 +37,11 @@ public abstract class HttpServerAttributesExtractor
super(capturedHttpHeaders);
}
+ /** Creates the HTTP server attributes extractor with default configuration. */
+ protected HttpServerAttributesExtractor() {
+ this(CapturedHttpHeaders.server(Config.get()));
+ }
+
@Override
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
super.onStart(attributes, request);
diff --git a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientHttpAttributesExtractor.java b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientHttpAttributesExtractor.java
index 556d6d571f..0d6dfeb475 100644
--- a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientHttpAttributesExtractor.java
+++ b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient;
import static io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient.ApacheHttpClientRequest.headersToList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
@@ -17,10 +16,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class ApacheHttpAsyncClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- ApacheHttpAsyncClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(ApacheHttpClientRequest request) {
return request.getMethod();
diff --git a/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientHttpAttributesExtractor.java b/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientHttpAttributesExtractor.java
index 5974773d78..515e7b0ab6 100644
--- a/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientHttpAttributesExtractor.java
@@ -9,7 +9,6 @@ import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import org.apache.commons.httpclient.Header;
@@ -22,10 +21,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class ApacheHttpClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- ApacheHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(HttpMethod request) {
return request.getName();
diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientHttpAttributesExtractor.java b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientHttpAttributesExtractor.java
index 72f67311bf..e3b2695a47 100644
--- a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v4_0;
import static io.opentelemetry.javaagent.instrumentation.apachehttpclient.v4_0.ApacheHttpClientRequest.headersToList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import java.util.List;
import org.apache.http.HttpResponse;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -16,10 +15,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class ApacheHttpClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- ApacheHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(ApacheHttpClientRequest request) {
return request.getMethod();
diff --git a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientHttpAttributesExtractor.java b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientHttpAttributesExtractor.java
index 76691012c8..b0c25cceca 100644
--- a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v5_0;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.ArrayList;
import java.util.Collections;
@@ -26,10 +25,6 @@ final class ApacheHttpClientHttpAttributesExtractor
private static final Logger logger =
LoggerFactory.getLogger(ApacheHttpClientHttpAttributesExtractor.class);
- ApacheHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(ClassicHttpRequest request) {
return request.getMethod();
diff --git a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientHttpAttributesExtractor.java b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientHttpAttributesExtractor.java
index f3889db42f..38eefc7666 100644
--- a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.asynchttpclient.v1_9;
import com.ning.http.client.Request;
import com.ning.http.client.Response;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.Collections;
import java.util.List;
@@ -17,10 +16,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class AsyncHttpClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- AsyncHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(Request request) {
return request.getMethod();
diff --git a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientHttpAttributesExtractor.java b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientHttpAttributesExtractor.java
index 16b307f5d3..ed4907130e 100644
--- a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.asynchttpclient.v2_0;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import org.asynchttpclient.Response;
@@ -16,10 +15,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class AsyncHttpClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- AsyncHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(RequestContext requestContext) {
return requestContext.getRequest().getMethod();
diff --git a/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientHttpAttributesExtractor.java b/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientHttpAttributesExtractor.java
index dc91cecae4..ab37cb2846 100644
--- a/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientHttpAttributesExtractor.java
+++ b/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.googlehttpclient;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -16,10 +15,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class GoogleHttpClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- GoogleHttpClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected @Nullable String method(HttpRequest httpRequest) {
return httpRequest.getRequestMethod();
diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlHttpAttributesExtractor.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlHttpAttributesExtractor.java
index 372c6df787..b5943432e9 100644
--- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlHttpAttributesExtractor.java
+++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlHttpAttributesExtractor.java
@@ -9,7 +9,6 @@ import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.net.HttpURLConnection;
import java.util.List;
@@ -18,10 +17,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
class HttpUrlHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- HttpUrlHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(HttpURLConnection connection) {
return connection.getRequestMethod();
diff --git a/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JdkHttpAttributesExtractor.java b/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JdkHttpAttributesExtractor.java
index c54a7fb584..6bab0cbb60 100644
--- a/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JdkHttpAttributesExtractor.java
+++ b/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JdkHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.httpclient;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest;
@@ -17,10 +16,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
class JdkHttpAttributesExtractor
extends HttpClientAttributesExtractor> {
- JdkHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(HttpRequest httpRequest) {
return httpRequest.method();
diff --git a/instrumentation/jaxrs-client/jaxrs-client-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v1_1/JaxRsClientHttpAttributesExtractor.java b/instrumentation/jaxrs-client/jaxrs-client-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v1_1/JaxRsClientHttpAttributesExtractor.java
index 68c96c08e7..3c815c745b 100644
--- a/instrumentation/jaxrs-client/jaxrs-client-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v1_1/JaxRsClientHttpAttributesExtractor.java
+++ b/instrumentation/jaxrs-client/jaxrs-client-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v1_1/JaxRsClientHttpAttributesExtractor.java
@@ -10,7 +10,6 @@ import static java.util.Collections.emptyList;
import com.sun.jersey.api.client.ClientRequest;
import com.sun.jersey.api.client.ClientResponse;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.ArrayList;
import java.util.List;
@@ -19,10 +18,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class JaxRsClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- JaxRsClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected @Nullable String method(ClientRequest httpRequest) {
return httpRequest.getMethod();
diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesExtractor.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesExtractor.java
index a9c4a2b394..742a288d1a 100644
--- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesExtractor.java
+++ b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0;
import static java.util.Collections.emptyList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import javax.ws.rs.client.ClientRequestContext;
@@ -18,10 +17,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class JaxRsClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- JaxRsClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected @Nullable String method(ClientRequestContext httpRequest) {
return httpRequest.getMethod();
diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesExtractor.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesExtractor.java
index 5c81d3bd77..14226f1065 100644
--- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesExtractor.java
+++ b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0;
import static java.util.Collections.emptyList;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.ArrayList;
import java.util.List;
@@ -19,10 +18,6 @@ import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation;
final class ResteasyClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- ResteasyClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected @Nullable String method(ClientInvocation httpRequest) {
return httpRequest.getMethod();
diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesHttpAttributesExtractor.java b/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesHttpAttributesExtractor.java
index 596e4cf51c..272b30d4a4 100644
--- a/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesHttpAttributesExtractor.java
+++ b/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesHttpAttributesExtractor.java
@@ -9,7 +9,6 @@ import static java.util.Collections.emptyList;
import io.kubernetes.client.openapi.ApiResponse;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import okhttp3.Request;
@@ -18,10 +17,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
class KubernetesHttpAttributesExtractor
extends HttpClientAttributesExtractor> {
- KubernetesHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(Request request) {
return request.method();
diff --git a/instrumentation/liberty/liberty-dispatcher/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherHttpAttributesExtractor.java b/instrumentation/liberty/liberty-dispatcher/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherHttpAttributesExtractor.java
index c58077c28b..d38393c1ff 100644
--- a/instrumentation/liberty/liberty-dispatcher/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherHttpAttributesExtractor.java
+++ b/instrumentation/liberty/liberty-dispatcher/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherHttpAttributesExtractor.java
@@ -6,17 +6,12 @@
package io.opentelemetry.javaagent.instrumentation.liberty.dispatcher;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
public class LibertyDispatcherHttpAttributesExtractor
extends HttpServerAttributesExtractor {
- public LibertyDispatcherHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedServerHeaders());
- }
-
@Override
protected @Nullable String method(LibertyRequest libertyRequest) {
return libertyRequest.getMethod();
diff --git a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2HttpAttributesExtractor.java b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2HttpAttributesExtractor.java
index 4f482b3224..931b234d1a 100644
--- a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2HttpAttributesExtractor.java
+++ b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2HttpAttributesExtractor.java
@@ -8,7 +8,6 @@ package io.opentelemetry.javaagent.instrumentation.okhttp.v2_2;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -16,10 +15,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
final class OkHttp2HttpAttributesExtractor
extends HttpClientAttributesExtractor {
- OkHttp2HttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(Request request) {
return request.method();
diff --git a/instrumentation/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientHttpAttributesExtractor.java b/instrumentation/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientHttpAttributesExtractor.java
index a04e3eb78a..e14630524b 100644
--- a/instrumentation/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientHttpAttributesExtractor.java
+++ b/instrumentation/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.playws;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -16,10 +15,6 @@ import play.shaded.ahc.org.asynchttpclient.Response;
final class PlayWsClientHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- PlayWsClientHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedClientHeaders());
- }
-
@Override
protected String method(Request request) {
return request.getMethod();
diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletHttpAttributesExtractor.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletHttpAttributesExtractor.java
index e764844d0d..5ff2ae3df9 100644
--- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletHttpAttributesExtractor.java
+++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletHttpAttributesExtractor.java
@@ -7,7 +7,6 @@ package io.opentelemetry.javaagent.instrumentation.servlet;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.servlet.ServletAccessor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -17,7 +16,6 @@ public class ServletHttpAttributesExtractor
protected final ServletAccessor accessor;
public ServletHttpAttributesExtractor(ServletAccessor accessor) {
- super(HttpHeadersConfig.capturedServerHeaders());
this.accessor = accessor;
}
diff --git a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebHttpAttributesExtractor.java b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebHttpAttributesExtractor.java
index fa00732f5d..567f915e0f 100644
--- a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebHttpAttributesExtractor.java
+++ b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebHttpAttributesExtractor.java
@@ -19,9 +19,8 @@ import org.springframework.http.client.ClientHttpResponse;
final class SpringWebHttpAttributesExtractor
extends HttpClientAttributesExtractor {
- // TODO: add support for capturing HTTP headers in library instrumentations
- SpringWebHttpAttributesExtractor() {
- super(CapturedHttpHeaders.empty());
+ SpringWebHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) {
+ super(capturedHttpHeaders);
}
@Override
diff --git a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java
index 54389dc4d6..bcbfeb181a 100644
--- a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java
+++ b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java
@@ -6,8 +6,10 @@
package io.opentelemetry.instrumentation.spring.web;
import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
+import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
@@ -23,6 +25,7 @@ public final class SpringWebTracingBuilder {
private final OpenTelemetry openTelemetry;
private final List> additionalExtractors =
new ArrayList<>();
+ private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
SpringWebTracingBuilder(OpenTelemetry openTelemetry) {
this.openTelemetry = openTelemetry;
@@ -38,13 +41,25 @@ public final class SpringWebTracingBuilder {
return this;
}
+ /**
+ * Configure the instrumentation to capture chosen HTTP request and response headers as span
+ * attributes.
+ *
+ * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
+ * HTTP request and response names.
+ */
+ public SpringWebTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
+ this.capturedHttpHeaders = capturedHttpHeaders;
+ return this;
+ }
+
/**
* Returns a new {@link SpringWebTracing} with the settings of this {@link
* SpringWebTracingBuilder}.
*/
public SpringWebTracing build() {
SpringWebHttpAttributesExtractor httpAttributesExtractor =
- new SpringWebHttpAttributesExtractor();
+ new SpringWebHttpAttributesExtractor(capturedHttpHeaders);
SpringWebNetAttributesExtractor netAttributesExtractor = new SpringWebNetAttributesExtractor();
Instrumenter instrumenter =
diff --git a/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatHttpAttributesExtractor.java b/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatHttpAttributesExtractor.java
index 12db8edcf4..e29759a9e5 100644
--- a/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatHttpAttributesExtractor.java
+++ b/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.tomcat.common;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import java.util.Collections;
import java.util.List;
import org.apache.coyote.Request;
@@ -17,10 +16,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public class TomcatHttpAttributesExtractor
extends HttpServerAttributesExtractor {
- public TomcatHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedServerHeaders());
- }
-
@Override
protected String method(Request request) {
return request.method().toString();
diff --git a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowHttpAttributesExtractor.java b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowHttpAttributesExtractor.java
index 0913e7b327..620ce9f4a7 100644
--- a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowHttpAttributesExtractor.java
+++ b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowHttpAttributesExtractor.java
@@ -6,7 +6,6 @@
package io.opentelemetry.javaagent.instrumentation.undertow;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
-import io.opentelemetry.javaagent.instrumentation.api.config.HttpHeadersConfig;
import io.undertow.server.HttpServerExchange;
import io.undertow.util.HeaderValues;
import java.util.Collections;
@@ -16,10 +15,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public class UndertowHttpAttributesExtractor
extends HttpServerAttributesExtractor {
- public UndertowHttpAttributesExtractor() {
- super(HttpHeadersConfig.capturedServerHeaders());
- }
-
@Override
protected String method(HttpServerExchange exchange) {
return exchange.getRequestMethod().toString();
diff --git a/javaagent-instrumentation-api/src/main/java/io/opentelemetry/javaagent/instrumentation/api/config/HttpHeadersConfig.java b/javaagent-instrumentation-api/src/main/java/io/opentelemetry/javaagent/instrumentation/api/config/HttpHeadersConfig.java
deleted file mode 100644
index ca5556b091..0000000000
--- a/javaagent-instrumentation-api/src/main/java/io/opentelemetry/javaagent/instrumentation/api/config/HttpHeadersConfig.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.javaagent.instrumentation.api.config;
-
-import io.opentelemetry.instrumentation.api.config.Config;
-import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
-
-/** Javaagent configuration of captured HTTP request/response headers. */
-public final class HttpHeadersConfig {
-
- private static final CapturedHttpHeaders CLIENT;
- private static final CapturedHttpHeaders SERVER;
-
- static {
- Config config = Config.get();
- CLIENT =
- CapturedHttpHeaders.create(
- config.getList(
- "otel.instrumentation.common.experimental.capture-http-headers.client.request"),
- config.getList(
- "otel.instrumentation.common.experimental.capture-http-headers.client.response"));
- SERVER =
- CapturedHttpHeaders.create(
- config.getList(
- "otel.instrumentation.common.experimental.capture-http-headers.server.request"),
- config.getList(
- "otel.instrumentation.common.experimental.capture-http-headers.server.response"));
- }
-
- public static CapturedHttpHeaders capturedClientHeaders() {
- return CLIENT;
- }
-
- public static CapturedHttpHeaders capturedServerHeaders() {
- return SERVER;
- }
-
- private HttpHeadersConfig() {}
-}