Skip to content

Commit c21ea0f

Browse files
author
Mateusz Rzeszutek
authored
Make server.socket.* attributes on the HTTP server side opt-in (#8747)
1 parent 56a592d commit c21ea0f

File tree

10 files changed

+60
-11
lines changed

10 files changed

+60
-11
lines changed

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ public static <REQUEST, RESPONSE> HttpClientAttributesExtractorBuilder<REQUEST,
102102
addressPortExtractor,
103103
SemconvStability.emitStableHttpSemconv(),
104104
SemconvStability.emitOldHttpSemconv(),
105-
InternalServerAttributesExtractor.Mode.PEER);
105+
InternalServerAttributesExtractor.Mode.PEER,
106+
/* captureServerSocketAttributes= */ true);
106107
this.resendCountIncrementer = resendCountIncrementer;
107108
}
108109

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,15 @@ public static <REQUEST, RESPONSE> HttpServerAttributesExtractorBuilder<REQUEST,
8080
NetServerAttributesGetter<REQUEST, RESPONSE> netAttributesGetter,
8181
List<String> capturedRequestHeaders,
8282
List<String> capturedResponseHeaders,
83-
Set<String> knownMethods) {
83+
Set<String> knownMethods,
84+
boolean captureServerSocketAttributes) {
8485
this(
8586
httpAttributesGetter,
8687
netAttributesGetter,
8788
capturedRequestHeaders,
8889
capturedResponseHeaders,
8990
knownMethods,
91+
captureServerSocketAttributes,
9092
HttpRouteHolder::getRoute);
9193
}
9294

@@ -97,6 +99,7 @@ public static <REQUEST, RESPONSE> HttpServerAttributesExtractorBuilder<REQUEST,
9799
List<String> capturedRequestHeaders,
98100
List<String> capturedResponseHeaders,
99101
Set<String> knownMethods,
102+
boolean captureServerSocketAttributes,
100103
Function<Context, String> httpRouteHolderGetter) {
101104
super(httpAttributesGetter, capturedRequestHeaders, capturedResponseHeaders, knownMethods);
102105
HttpNetAddressPortExtractor<REQUEST> addressPortExtractor =
@@ -123,7 +126,10 @@ public static <REQUEST, RESPONSE> HttpServerAttributesExtractorBuilder<REQUEST,
123126
addressPortExtractor,
124127
SemconvStability.emitStableHttpSemconv(),
125128
SemconvStability.emitOldHttpSemconv(),
126-
InternalServerAttributesExtractor.Mode.HOST);
129+
InternalServerAttributesExtractor.Mode.HOST,
130+
// we're not capturing these by default, since they're opt-in
131+
// we'll add a configuration flag if someone happens to request them
132+
/* captureServerSocketAttributes= */ false);
127133
internalClientExtractor =
128134
new InternalClientAttributesExtractor<>(
129135
netAttributesGetter,

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public final class HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> {
2222
List<String> capturedRequestHeaders = emptyList();
2323
List<String> capturedResponseHeaders = emptyList();
2424
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
25+
boolean captureServerSocketAttributes = false;
2526

2627
HttpServerAttributesExtractorBuilder(
2728
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,
@@ -89,6 +90,20 @@ public HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> setKnownMethods(
8990
return this;
9091
}
9192

93+
/**
94+
* Configures the extractor to capture the optional {@code server.socket.address} and {@code
95+
* server.socket.port} attributes, which are not collected by default.
96+
*
97+
* @param captureServerSocketAttributes {@code true} if the extractor should collect the optional
98+
* {@code server.socket.address} and {@code server.socket.port} attributes.
99+
*/
100+
@CanIgnoreReturnValue
101+
public HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> setCaptureServerSocketAttributes(
102+
boolean captureServerSocketAttributes) {
103+
this.captureServerSocketAttributes = captureServerSocketAttributes;
104+
return this;
105+
}
106+
92107
/**
93108
* Returns a new {@link HttpServerAttributesExtractor} with the settings of this {@link
94109
* HttpServerAttributesExtractorBuilder}.
@@ -99,6 +114,7 @@ public AttributesExtractor<REQUEST, RESPONSE> build() {
99114
netAttributesGetter,
100115
capturedRequestHeaders,
101116
capturedResponseHeaders,
102-
knownMethods);
117+
knownMethods,
118+
captureServerSocketAttributes);
103119
}
104120
}

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ private NetClientAttributesExtractor(NetClientAttributesGetter<REQUEST, RESPONSE
5353
FallbackAddressPortExtractor.noop(),
5454
SemconvStability.emitStableHttpSemconv(),
5555
SemconvStability.emitOldHttpSemconv(),
56-
InternalServerAttributesExtractor.Mode.PEER);
56+
InternalServerAttributesExtractor.Mode.PEER,
57+
/* captureServerSocketAttributes= */ true);
5758
}
5859

5960
@Override

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ private NetServerAttributesExtractor(NetServerAttributesGetter<REQUEST, RESPONSE
5252
FallbackAddressPortExtractor.noop(),
5353
SemconvStability.emitStableHttpSemconv(),
5454
SemconvStability.emitOldHttpSemconv(),
55-
InternalServerAttributesExtractor.Mode.HOST);
55+
InternalServerAttributesExtractor.Mode.HOST,
56+
/* captureServerSocketAttributes= */ true);
5657
internalClientExtractor =
5758
new InternalClientAttributesExtractor<>(
5859
getter,

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public static <REQUEST, RESPONSE> ServerAttributesExtractor<REQUEST, RESPONSE> c
4141
/* emitStableUrlAttributes= */ true,
4242
/* emitOldHttpAttributes= */ false,
4343
// this param does not matter when old semconv is off
44-
InternalServerAttributesExtractor.Mode.HOST);
44+
InternalServerAttributesExtractor.Mode.HOST,
45+
/* captureServerSocketAttributes= */ true);
4546
}
4647

4748
@Override

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/internal/InternalServerAttributesExtractor.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,23 @@ public final class InternalServerAttributesExtractor<REQUEST, RESPONSE> {
2626
private final boolean emitStableUrlAttributes;
2727
private final boolean emitOldHttpAttributes;
2828
private final Mode oldSemconvMode;
29+
private final boolean captureServerSocketAttributes;
2930

3031
public InternalServerAttributesExtractor(
3132
ServerAttributesGetter<REQUEST, RESPONSE> getter,
3233
BiPredicate<Integer, REQUEST> captureServerPortCondition,
3334
FallbackAddressPortExtractor<REQUEST> fallbackAddressPortExtractor,
3435
boolean emitStableUrlAttributes,
3536
boolean emitOldHttpAttributes,
36-
Mode oldSemconvMode) {
37+
Mode oldSemconvMode,
38+
boolean captureServerSocketAttributes) {
3739
this.getter = getter;
3840
this.captureServerPortCondition = captureServerPortCondition;
3941
this.fallbackAddressPortExtractor = fallbackAddressPortExtractor;
4042
this.emitStableUrlAttributes = emitStableUrlAttributes;
4143
this.emitOldHttpAttributes = emitOldHttpAttributes;
4244
this.oldSemconvMode = oldSemconvMode;
45+
this.captureServerSocketAttributes = captureServerSocketAttributes;
4346
}
4447

4548
public void onStart(AttributesBuilder attributes, REQUEST request) {
@@ -69,7 +72,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO
6972

7073
String serverSocketAddress = getter.getServerSocketAddress(request, response);
7174
if (serverSocketAddress != null && !serverSocketAddress.equals(serverAddressAndPort.address)) {
72-
if (emitStableUrlAttributes) {
75+
if (emitStableUrlAttributes && captureServerSocketAttributes) {
7376
internalSet(attributes, NetworkAttributes.SERVER_SOCKET_ADDRESS, serverSocketAddress);
7477
}
7578
if (emitOldHttpAttributes) {
@@ -81,7 +84,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO
8184
if (serverSocketPort != null
8285
&& serverSocketPort > 0
8386
&& !serverSocketPort.equals(serverAddressAndPort.port)) {
84-
if (emitStableUrlAttributes) {
87+
if (emitStableUrlAttributes && captureServerSocketAttributes) {
8588
internalSet(attributes, NetworkAttributes.SERVER_SOCKET_PORT, (long) serverSocketPort);
8689
}
8790
if (emitOldHttpAttributes) {
@@ -91,7 +94,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO
9194

9295
String serverSocketDomain = getter.getServerSocketDomain(request, response);
9396
if (serverSocketDomain != null && !serverSocketDomain.equals(serverAddressAndPort.address)) {
94-
if (emitStableUrlAttributes) {
97+
if (emitStableUrlAttributes && captureServerSocketAttributes) {
9598
internalSet(attributes, NetworkAttributes.SERVER_SOCKET_DOMAIN, serverSocketDomain);
9699
}
97100
if (emitOldHttpAttributes && oldSemconvMode.socketDomain != null) {

instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ void normal() {
164164
singletonList("Custom-Request-Header"),
165165
singletonList("Custom-Response-Header"),
166166
HttpConstants.KNOWN_METHODS,
167+
false,
167168
routeFromContext);
168169

169170
AttributesBuilder startAttributes = Attributes.builder();

instrumentation-api-semconv/src/testBothHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBothSemconvTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ void normal() {
158158
singletonList("Custom-Request-Header"),
159159
singletonList("Custom-Response-Header"),
160160
HttpConstants.KNOWN_METHODS,
161+
false,
161162
routeFromContext);
162163

163164
AttributesBuilder startAttributes = Attributes.builder();

instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java

+18
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,21 @@ public Integer getServerPort(Map<String, String> request) {
134134
String value = request.get("hostPort");
135135
return value == null ? null : Integer.parseInt(value);
136136
}
137+
138+
@Nullable
139+
@Override
140+
public String getServerSocketAddress(
141+
Map<String, String> request, @Nullable Map<String, String> response) {
142+
return request.get("serverSocketAddress");
143+
}
144+
145+
@Nullable
146+
@Override
147+
public Integer getServerSocketPort(
148+
Map<String, String> request, @Nullable Map<String, String> response) {
149+
String value = request.get("serverSocketPort");
150+
return value == null ? null : Integer.parseInt(value);
151+
}
137152
}
138153

139154
@Test
@@ -154,6 +169,8 @@ void normal() {
154169
request.put("type", "ipv4");
155170
request.put("protocolName", "http");
156171
request.put("protocolVersion", "2.0");
172+
request.put("serverSocketAddress", "1.2.3.4");
173+
request.put("serverSocketPort", "42");
157174

158175
Map<String, String> response = new HashMap<>();
159176
response.put("statusCode", "202");
@@ -169,6 +186,7 @@ void normal() {
169186
singletonList("Custom-Request-Header"),
170187
singletonList("Custom-Response-Header"),
171188
HttpConstants.KNOWN_METHODS,
189+
false,
172190
routeFromContext);
173191

174192
AttributesBuilder startAttributes = Attributes.builder();

0 commit comments

Comments
 (0)