Skip to content

Commit c490b29

Browse files
Mateusz Rzeszutektrask
Mateusz Rzeszutek
andauthored
Extract net attributes both on start and on end in netty HTTP client (#4420)
* Extract net attributes both on start and on end in netty HTTP client * storing remote address in HttpRequestAndChannel * Update instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyNetClientAttributesExtractor.java Co-authored-by: Trask Stalnaker <[email protected]> Co-authored-by: Trask Stalnaker <[email protected]>
1 parent b1d638f commit c490b29

File tree

5 files changed

+19
-11
lines changed

5 files changed

+19
-11
lines changed

instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/HttpRequestAndChannel.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,22 @@
88
import com.google.auto.value.AutoValue;
99
import io.netty.channel.Channel;
1010
import io.netty.handler.codec.http.HttpRequest;
11+
import java.net.SocketAddress;
12+
import javax.annotation.Nullable;
1113

1214
@AutoValue
1315
public abstract class HttpRequestAndChannel {
1416

1517
public static HttpRequestAndChannel create(HttpRequest request, Channel channel) {
16-
return new AutoValue_HttpRequestAndChannel(request, channel);
18+
return new AutoValue_HttpRequestAndChannel(request, channel, channel.remoteAddress());
1719
}
1820

1921
public abstract HttpRequest request();
2022

2123
public abstract Channel channel();
24+
25+
// we're capturing the remote address early because in case of timeouts or other connection issues
26+
// netty may return null when calling Channel.remoteAddress() at the end of processing
27+
@Nullable
28+
public abstract SocketAddress remoteAddress();
2229
}

instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyClientInstrumenterFactory.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
import io.netty.handler.codec.http.HttpResponse;
99
import io.opentelemetry.api.GlobalOpenTelemetry;
1010
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
11+
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
1112
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
1213
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
1314
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
1415
import io.opentelemetry.javaagent.instrumentation.netty.common.HttpRequestAndChannel;
15-
import io.opentelemetry.javaagent.instrumentation.netty.common.NettyCommonNetAttributesExtractor;
1616

1717
public final class NettyClientInstrumenterFactory {
1818

@@ -25,16 +25,17 @@ public NettyClientInstrumenterFactory(String instrumentationName) {
2525
public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter() {
2626
NettyHttpClientAttributesExtractor httpClientAttributesExtractor =
2727
new NettyHttpClientAttributesExtractor();
28+
NettyNetClientAttributesExtractor netClientAttributesExtractor =
29+
new NettyNetClientAttributesExtractor();
2830

2931
return Instrumenter.<HttpRequestAndChannel, HttpResponse>newBuilder(
3032
GlobalOpenTelemetry.get(),
3133
instrumentationName,
3234
HttpSpanNameExtractor.create(httpClientAttributesExtractor))
3335
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesExtractor))
3436
.addAttributesExtractor(httpClientAttributesExtractor)
35-
.addAttributesExtractor(new NettyCommonNetAttributesExtractor())
36-
// TODO: add peer extractor attributes once Net*AttributesExtractors are refactored
37-
// .addAttributesExtractor(PeerServiceAttributesExtractor.create(netClientAttributesExtractor))
37+
.addAttributesExtractor(netClientAttributesExtractor)
38+
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netClientAttributesExtractor))
3839
.addRequestMetrics(HttpClientMetrics.get())
3940
.newClientInstrumenter(new HttpRequestHeadersSetter());
4041
}

instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyNetClientAttributesExtractor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ final class NettyNetClientAttributesExtractor
1919
@Nullable
2020
public InetSocketAddress getAddress(
2121
HttpRequestAndChannel requestAndChannel, @Nullable HttpResponse response) {
22-
SocketAddress address = requestAndChannel.channel().remoteAddress();
22+
SocketAddress address = requestAndChannel.remoteAddress();
2323
if (address instanceof InetSocketAddress) {
2424
return (InetSocketAddress) address;
2525
}
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.javaagent.instrumentation.netty.common;
6+
package io.opentelemetry.javaagent.instrumentation.netty.common.server;
77

88
import io.netty.handler.codec.http.HttpResponse;
99
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
10+
import io.opentelemetry.javaagent.instrumentation.netty.common.HttpRequestAndChannel;
1011
import java.net.InetSocketAddress;
1112
import java.net.SocketAddress;
1213
import javax.annotation.Nullable;
1314

14-
public final class NettyCommonNetAttributesExtractor
15+
final class NettyNetServerAttributesExtractor
1516
extends InetSocketAddressNetServerAttributesExtractor<HttpRequestAndChannel, HttpResponse> {
1617

1718
@Override
@@ -23,7 +24,7 @@ public String transport(HttpRequestAndChannel requestAndChannel) {
2324
@Override
2425
@Nullable
2526
public InetSocketAddress getAddress(HttpRequestAndChannel requestAndChannel) {
26-
SocketAddress address = requestAndChannel.channel().remoteAddress();
27+
SocketAddress address = requestAndChannel.remoteAddress();
2728
if (address instanceof InetSocketAddress) {
2829
return (InetSocketAddress) address;
2930
}

instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/server/NettyServerInstrumenterFactory.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
1414
import io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming;
1515
import io.opentelemetry.javaagent.instrumentation.netty.common.HttpRequestAndChannel;
16-
import io.opentelemetry.javaagent.instrumentation.netty.common.NettyCommonNetAttributesExtractor;
1716
import io.opentelemetry.javaagent.instrumentation.netty.common.NettyErrorHolder;
1817

1918
public final class NettyServerInstrumenterFactory {
@@ -30,7 +29,7 @@ public static Instrumenter<HttpRequestAndChannel, HttpResponse> create(
3029
HttpSpanNameExtractor.create(httpAttributesExtractor))
3130
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesExtractor))
3231
.addAttributesExtractor(httpAttributesExtractor)
33-
.addAttributesExtractor(new NettyCommonNetAttributesExtractor())
32+
.addAttributesExtractor(new NettyNetServerAttributesExtractor())
3433
.addRequestMetrics(HttpServerMetrics.get())
3534
.addContextCustomizer(
3635
(context, request, attributes) -> {

0 commit comments

Comments
 (0)