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() {} -}