Extract `net.peer.{name,port}` on start for CLIENT spans (#6828)

The [HTTP
spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md#http-client)
says these two attributes must be provided at span creation time - I
think it makes sense to extend it over to all `net`-related
instrumentations, cause these are supposed to be the logical peer
name/port, which are supposed to be known before the connection is
started/exchange is made.
This commit is contained in:
Mateusz Rzeszutek 2022-10-11 01:00:19 +02:00 committed by GitHub
parent 418c414de9
commit 77035fc88c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
58 changed files with 174 additions and 168 deletions

View File

@ -37,7 +37,16 @@ public final class NetClientAttributesExtractor<REQUEST, RESPONSE>
} }
@Override @Override
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {} public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
String peerName = getter.peerName(request);
Integer peerPort = getter.peerPort(request);
if (peerName != null) {
internalSet(attributes, SemanticAttributes.NET_PEER_NAME, peerName);
if (peerPort != null && peerPort > 0) {
internalSet(attributes, SemanticAttributes.NET_PEER_PORT, (long) peerPort);
}
}
}
@Override @Override
public void onEnd( public void onEnd(
@ -49,14 +58,8 @@ public final class NetClientAttributesExtractor<REQUEST, RESPONSE>
internalSet(attributes, SemanticAttributes.NET_TRANSPORT, getter.transport(request, response)); internalSet(attributes, SemanticAttributes.NET_TRANSPORT, getter.transport(request, response));
String peerName = getter.peerName(request, response); String peerName = getter.peerName(request);
Integer peerPort = getter.peerPort(request, response); Integer peerPort = getter.peerPort(request);
if (peerName != null) {
internalSet(attributes, SemanticAttributes.NET_PEER_NAME, peerName);
if (peerPort != null && peerPort > 0) {
internalSet(attributes, SemanticAttributes.NET_PEER_PORT, (long) peerPort);
}
}
String sockPeerAddr = getter.sockPeerAddr(request, response); String sockPeerAddr = getter.sockPeerAddr(request, response);
if (sockPeerAddr != null && !sockPeerAddr.equals(peerName)) { if (sockPeerAddr != null && !sockPeerAddr.equals(peerName)) {

View File

@ -20,13 +20,39 @@ public interface NetClientAttributesGetter<REQUEST, RESPONSE> {
@Nullable @Nullable
String transport(REQUEST request, @Nullable RESPONSE response); String transport(REQUEST request, @Nullable RESPONSE response);
// TODO: peerName and peerPort should be extracted onStart /**
* Logical remote hostname.
*
* @deprecated This method is deprecated and will be removed in the next release.
*/
@Deprecated
@Nullable
default String peerName(REQUEST request, @Nullable RESPONSE response) {
throw new UnsupportedOperationException(
"This method is deprecated and will be removed in the next release");
}
@Nullable @Nullable
String peerName(REQUEST request, @Nullable RESPONSE response); default String peerName(REQUEST request) {
return peerName(request, null);
}
/**
* Logical remote port number.
*
* @deprecated This method is deprecated and will be removed in the next release.
*/
@Deprecated
@Nullable
default Integer peerPort(REQUEST request, @Nullable RESPONSE response) {
throw new UnsupportedOperationException(
"This method is deprecated and will be removed in the next release");
}
@Nullable @Nullable
Integer peerPort(REQUEST request, @Nullable RESPONSE response); default Integer peerPort(REQUEST request) {
return peerPort(request, null);
}
@Nullable @Nullable
default String sockFamily(REQUEST request, @Nullable RESPONSE response) { default String sockFamily(REQUEST request, @Nullable RESPONSE response) {

View File

@ -57,7 +57,7 @@ public final class PeerServiceAttributesExtractor<REQUEST, RESPONSE>
return; return;
} }
String peerName = attributesGetter.peerName(request, response); String peerName = attributesGetter.peerName(request);
String peerService = mapToPeerService(peerName); String peerService = mapToPeerService(peerName);
if (peerService != null) { if (peerService != null) {
attributes.put(SemanticAttributes.PEER_SERVICE, peerService); attributes.put(SemanticAttributes.PEER_SERVICE, peerService);

View File

@ -30,13 +30,13 @@ class InetSocketAddressNetClientAttributesGetterTest {
} }
@Override @Override
public String peerName(InetSocketAddress request, InetSocketAddress response) { public String peerName(InetSocketAddress request) {
// net.peer.name and net.peer.port are tested in NetClientAttributesExtractorTest // net.peer.name and net.peer.port are tested in NetClientAttributesExtractorTest
return null; return null;
} }
@Override @Override
public Integer peerPort(InetSocketAddress request, InetSocketAddress response) { public Integer peerPort(InetSocketAddress request) {
// net.peer.name and net.peer.port are tested in NetClientAttributesExtractorTest // net.peer.name and net.peer.port are tested in NetClientAttributesExtractorTest
return null; return null;
} }

View File

@ -31,13 +31,13 @@ class NetClientAttributesExtractorTest {
} }
@Override @Override
public String peerName(Map<String, String> request, Map<String, String> response) { public String peerName(Map<String, String> request) {
return response.get("peerName"); return request.get("peerName");
} }
@Override @Override
public Integer peerPort(Map<String, String> request, Map<String, String> response) { public Integer peerPort(Map<String, String> request) {
String peerPort = response.get("peerPort"); String peerPort = request.get("peerPort");
return peerPort == null ? null : Integer.valueOf(peerPort); return peerPort == null ? null : Integer.valueOf(peerPort);
} }
@ -88,13 +88,14 @@ class NetClientAttributesExtractorTest {
extractor.onEnd(endAttributes, context, map, map, null); extractor.onEnd(endAttributes, context, map, map, null);
// then // then
assertThat(startAttributes.build()).isEmpty(); assertThat(startAttributes.build())
.containsOnly(
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(SemanticAttributes.NET_PEER_PORT, 42L));
assertThat(endAttributes.build()) assertThat(endAttributes.build())
.containsOnly( .containsOnly(
entry(SemanticAttributes.NET_TRANSPORT, IP_TCP), entry(SemanticAttributes.NET_TRANSPORT, IP_TCP),
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(SemanticAttributes.NET_PEER_PORT, 42L),
entry(NetAttributes.NET_SOCK_FAMILY, "inet6"), entry(NetAttributes.NET_SOCK_FAMILY, "inet6"),
entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::"), entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::"),
entry(NetAttributes.NET_SOCK_PEER_NAME, "proxy.opentelemetry.io"), entry(NetAttributes.NET_SOCK_PEER_NAME, "proxy.opentelemetry.io"),
@ -141,13 +142,12 @@ class NetClientAttributesExtractorTest {
extractor.onEnd(endAttributes, context, map, map, null); extractor.onEnd(endAttributes, context, map, map, null);
// then // then
assertThat(startAttributes.build()).isEmpty(); assertThat(startAttributes.build())
assertThat(endAttributes.build())
.containsOnly( .containsOnly(
entry(SemanticAttributes.NET_TRANSPORT, IP_TCP),
entry(SemanticAttributes.NET_PEER_NAME, "1:2:3:4::"), entry(SemanticAttributes.NET_PEER_NAME, "1:2:3:4::"),
entry(SemanticAttributes.NET_PEER_PORT, 42L)); entry(SemanticAttributes.NET_PEER_PORT, 42L));
assertThat(endAttributes.build()).containsOnly(entry(SemanticAttributes.NET_TRANSPORT, IP_TCP));
} }
@Test @Test
@ -174,13 +174,14 @@ class NetClientAttributesExtractorTest {
extractor.onEnd(endAttributes, context, map, map, null); extractor.onEnd(endAttributes, context, map, map, null);
// then // then
assertThat(startAttributes.build()).isEmpty(); assertThat(startAttributes.build())
.containsOnly(
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(SemanticAttributes.NET_PEER_PORT, 42L));
assertThat(endAttributes.build()) assertThat(endAttributes.build())
.containsOnly( .containsOnly(
entry(SemanticAttributes.NET_TRANSPORT, IP_TCP), entry(SemanticAttributes.NET_TRANSPORT, IP_TCP),
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(SemanticAttributes.NET_PEER_PORT, 42L),
entry(NetAttributes.NET_SOCK_FAMILY, "inet6"), entry(NetAttributes.NET_SOCK_FAMILY, "inet6"),
entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::")); entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::"));
} }
@ -204,12 +205,11 @@ class NetClientAttributesExtractorTest {
extractor.onEnd(endAttributes, context, map, map, null); extractor.onEnd(endAttributes, context, map, map, null);
// then // then
assertThat(startAttributes.build()).isEmpty(); assertThat(startAttributes.build())
.containsOnly(entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"));
assertThat(endAttributes.build()) assertThat(endAttributes.build())
.containsOnly( .containsOnly(entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::"));
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(NetAttributes.NET_SOCK_PEER_ADDR, "1:2:3:4::"));
} }
@Test @Test
@ -230,11 +230,10 @@ class NetClientAttributesExtractorTest {
extractor.onEnd(endAttributes, context, map, map, null); extractor.onEnd(endAttributes, context, map, map, null);
// then // then
assertThat(startAttributes.build()).isEmpty(); assertThat(startAttributes.build())
.containsOnly(entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"));
assertThat(endAttributes.build()) assertThat(endAttributes.build())
.containsOnly( .containsOnly(entry(NetAttributes.NET_SOCK_PEER_ADDR, "1.2.3.4"));
entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"),
entry(NetAttributes.NET_SOCK_PEER_ADDR, "1.2.3.4"));
} }
} }

View File

@ -54,7 +54,7 @@ class PeerServiceAttributesExtractorTest {
PeerServiceAttributesExtractor<String, String> underTest = PeerServiceAttributesExtractor<String, String> underTest =
new PeerServiceAttributesExtractor<>(netAttributesExtractor, peerServiceMapping); new PeerServiceAttributesExtractor<>(netAttributesExtractor, peerServiceMapping);
when(netAttributesExtractor.peerName(any(), any())).thenReturn("example2.com"); when(netAttributesExtractor.peerName(any())).thenReturn("example2.com");
Context context = Context.root(); Context context = Context.root();
@ -79,7 +79,7 @@ class PeerServiceAttributesExtractorTest {
PeerServiceAttributesExtractor<String, String> underTest = PeerServiceAttributesExtractor<String, String> underTest =
new PeerServiceAttributesExtractor<>(netAttributesExtractor, peerServiceMapping); new PeerServiceAttributesExtractor<>(netAttributesExtractor, peerServiceMapping);
when(netAttributesExtractor.peerName(any(), any())).thenReturn("example.com"); when(netAttributesExtractor.peerName(any())).thenReturn("example.com");
Context context = Context.root(); Context context = Context.root();

View File

@ -19,12 +19,12 @@ class AkkaHttpNetAttributesGetter implements NetClientAttributesGetter<HttpReque
} }
@Override @Override
public String peerName(HttpRequest httpRequest, @Nullable HttpResponse httpResponse) { public String peerName(HttpRequest httpRequest) {
return httpRequest.uri().authority().host().address(); return httpRequest.uri().authority().host().address();
} }
@Override @Override
public Integer peerPort(HttpRequest httpRequest, @Nullable HttpResponse httpResponse) { public Integer peerPort(HttpRequest httpRequest) {
return httpRequest.uri().authority().port(); return httpRequest.uri().authority().port();
} }
} }

View File

@ -26,12 +26,12 @@ public final class DubboNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(DubboRequest request, @Nullable Result result) { public String peerName(DubboRequest request) {
return request.url().getHost(); return request.url().getHost();
} }
@Override @Override
public Integer peerPort(DubboRequest request, @Nullable Result result) { public Integer peerPort(DubboRequest request) {
return request.url().getPort(); return request.url().getPort();
} }

View File

@ -21,12 +21,12 @@ final class ApacheHttpAsyncClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public String peerName(ApacheHttpClientRequest request) {
return request.getPeerName(); return request.getPeerName();
} }
@Override @Override
public Integer peerPort(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public Integer peerPort(ApacheHttpClientRequest request) {
return request.getPeerPort(); return request.getPeerPort();
} }

View File

@ -21,14 +21,14 @@ final class ApacheHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(HttpMethod request, @Nullable HttpMethod response) { public String peerName(HttpMethod request) {
HostConfiguration hostConfiguration = request.getHostConfiguration(); HostConfiguration hostConfiguration = request.getHostConfiguration();
return hostConfiguration != null ? hostConfiguration.getHost() : null; return hostConfiguration != null ? hostConfiguration.getHost() : null;
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(HttpMethod request, @Nullable HttpMethod response) { public Integer peerPort(HttpMethod request) {
HostConfiguration hostConfiguration = request.getHostConfiguration(); HostConfiguration hostConfiguration = request.getHostConfiguration();
return hostConfiguration != null ? hostConfiguration.getPort() : null; return hostConfiguration != null ? hostConfiguration.getPort() : null;
} }

View File

@ -20,12 +20,12 @@ final class ApacheHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public String peerName(ApacheHttpClientRequest request) {
return request.getPeerName(); return request.getPeerName();
} }
@Override @Override
public Integer peerPort(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public Integer peerPort(ApacheHttpClientRequest request) {
return request.getPeerPort(); return request.getPeerPort();
} }
} }

View File

@ -21,13 +21,13 @@ final class ApacheHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public String peerName(ApacheHttpClientRequest request) {
return request.getPeerName(); return request.getPeerName();
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(ApacheHttpClientRequest request, @Nullable HttpResponse response) { public Integer peerPort(ApacheHttpClientRequest request) {
return request.getPeerPort(); return request.getPeerPort();
} }

View File

@ -26,12 +26,12 @@ final class ApacheHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(HttpRequest request, @Nullable HttpResponse response) { public String peerName(HttpRequest request) {
return request.getAuthority().getHostName(); return request.getAuthority().getHostName();
} }
@Override @Override
public Integer peerPort(HttpRequest request, @Nullable HttpResponse response) { public Integer peerPort(HttpRequest request) {
int port = request.getAuthority().getPort(); int port = request.getAuthority().getPort();
if (port != -1) { if (port != -1) {
return port; return port;

View File

@ -28,12 +28,12 @@ public final class ArmeriaNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(RequestContext ctx, @Nullable RequestLog requestLog) { public String peerName(RequestContext ctx) {
return request(ctx).uri().getHost(); return request(ctx).uri().getHost();
} }
@Override @Override
public Integer peerPort(RequestContext ctx, @Nullable RequestLog requestLog) { public Integer peerPort(RequestContext ctx) {
return request(ctx).uri().getPort(); return request(ctx).uri().getPort();
} }

View File

@ -20,12 +20,12 @@ final class AsyncHttpClientNetAttributesGetter
} }
@Override @Override
public String peerName(Request request, @Nullable Response response) { public String peerName(Request request) {
return request.getUri().getHost(); return request.getUri().getHost();
} }
@Override @Override
public Integer peerPort(Request request, @Nullable Response response) { public Integer peerPort(Request request) {
return request.getUri().getPort(); return request.getUri().getPort();
} }
} }

View File

@ -21,12 +21,12 @@ final class AsyncHttpClientNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(RequestContext requestContext, @Nullable Response response) { public String peerName(RequestContext requestContext) {
return requestContext.getRequest().getUri().getHost(); return requestContext.getRequest().getUri().getHost();
} }
@Override @Override
public Integer peerPort(RequestContext requestContext, @Nullable Response response) { public Integer peerPort(RequestContext requestContext) {
return requestContext.getRequest().getUri().getPort(); return requestContext.getRequest().getUri().getPort();
} }

View File

@ -20,12 +20,12 @@ class AwsSdkNetAttributesGetter implements NetClientAttributesGetter<Request<?>,
@Override @Override
@Nullable @Nullable
public String peerName(Request<?> request, @Nullable Response<?> response) { public String peerName(Request<?> request) {
return request.getEndpoint().getHost(); return request.getEndpoint().getHost();
} }
@Override @Override
public Integer peerPort(Request<?> request, @Nullable Response<?> response) { public Integer peerPort(Request<?> request) {
return request.getEndpoint().getPort(); return request.getEndpoint().getPort();
} }
} }

View File

@ -22,14 +22,14 @@ class AwsSdkNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ExecutionAttributes request, @Nullable SdkHttpResponse response) { public String peerName(ExecutionAttributes request) {
SdkHttpRequest httpRequest = SdkHttpRequest httpRequest =
request.getAttribute(TracingExecutionInterceptor.SDK_HTTP_REQUEST_ATTRIBUTE); request.getAttribute(TracingExecutionInterceptor.SDK_HTTP_REQUEST_ATTRIBUTE);
return httpRequest.host(); return httpRequest.host();
} }
@Override @Override
public Integer peerPort(ExecutionAttributes request, @Nullable SdkHttpResponse response) { public Integer peerPort(ExecutionAttributes request) {
SdkHttpRequest httpRequest = SdkHttpRequest httpRequest =
request.getAttribute(TracingExecutionInterceptor.SDK_HTTP_REQUEST_ATTRIBUTE); request.getAttribute(TracingExecutionInterceptor.SDK_HTTP_REQUEST_ATTRIBUTE);
return httpRequest.port(); return httpRequest.port();

View File

@ -21,13 +21,13 @@ final class CassandraNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(CassandraRequest request, @Nullable ExecutionInfo executionInfo) { public String peerName(CassandraRequest request) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(CassandraRequest request, @Nullable ExecutionInfo executionInfo) { public Integer peerPort(CassandraRequest request) {
return null; return null;
} }

View File

@ -23,13 +23,13 @@ final class CassandraNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(CassandraRequest request, @Nullable ExecutionInfo executionInfo) { public String peerName(CassandraRequest request) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(CassandraRequest request, @Nullable ExecutionInfo executionInfo) { public Integer peerPort(CassandraRequest request) {
return null; return null;
} }

View File

@ -23,13 +23,13 @@ public class CouchbaseNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(CouchbaseRequestInfo couchbaseRequest, @Nullable Void unused) { public String peerName(CouchbaseRequestInfo couchbaseRequest) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(CouchbaseRequestInfo couchbaseRequest, @Nullable Void unused) { public Integer peerPort(CouchbaseRequestInfo couchbaseRequest) {
return null; return null;
} }

View File

@ -80,8 +80,6 @@ class ElasticsearchRest5Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(1) { span(1) {
@ -155,8 +153,6 @@ class ElasticsearchRest5Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(2) { span(2) {

View File

@ -74,8 +74,6 @@ class ElasticsearchRest6Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(1) { span(1) {
@ -148,8 +146,6 @@ class ElasticsearchRest6Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(2) { span(2) {

View File

@ -73,8 +73,6 @@ class ElasticsearchRest7Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(1) { span(1) {
@ -147,8 +145,6 @@ class ElasticsearchRest7Test extends AgentInstrumentationSpecification {
"$SemanticAttributes.DB_OPERATION" "GET" "$SemanticAttributes.DB_OPERATION" "GET"
"$SemanticAttributes.DB_STATEMENT" "GET _cluster/health" "$SemanticAttributes.DB_STATEMENT" "GET _cluster/health"
"$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP "$SemanticAttributes.NET_TRANSPORT" SemanticAttributes.NetTransportValues.IP_TCP
"$SemanticAttributes.NET_PEER_NAME" httpHost.hostName
"$SemanticAttributes.NET_PEER_PORT" httpHost.port
} }
} }
span(2) { span(2) {

View File

@ -21,28 +21,13 @@ final class ElasticsearchRestNetResponseAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ElasticsearchRestRequest request, @Nullable Response response) { public String peerName(ElasticsearchRestRequest request) {
if (response != null) {
return response.getHost().getHostName();
}
return null; return null;
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(ElasticsearchRestRequest request, @Nullable Response response) { public Integer peerPort(ElasticsearchRestRequest request) {
if (response != null) {
return response.getHost().getPort();
}
return null;
}
@Override
@Nullable
public String sockPeerAddr(ElasticsearchRestRequest request, @Nullable Response response) {
if (response != null && response.getHost().getAddress() != null) {
return response.getHost().getAddress().getHostAddress();
}
return null; return null;
} }
@ -55,4 +40,13 @@ final class ElasticsearchRestNetResponseAttributesGetter
} }
return null; return null;
} }
@Override
@Nullable
public String sockPeerAddr(ElasticsearchRestRequest request, @Nullable Response response) {
if (response != null && response.getHost().getAddress() != null) {
return response.getHost().getAddress().getHostAddress();
}
return null;
}
} }

View File

@ -21,13 +21,13 @@ public class Elasticsearch6TransportNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(ElasticTransportRequest request, @Nullable ActionResponse response) { public String peerName(ElasticTransportRequest request) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(ElasticTransportRequest request, @Nullable ActionResponse response) { public Integer peerPort(ElasticTransportRequest request) {
return null; return null;
} }

View File

@ -20,13 +20,13 @@ public class ElasticTransportNetResponseAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ElasticTransportRequest request, @Nullable ActionResponse response) { public String peerName(ElasticTransportRequest request) {
return null; return null;
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(ElasticTransportRequest request, @Nullable ActionResponse response) { public Integer peerPort(ElasticTransportRequest request) {
return null; return null;
} }

View File

@ -21,12 +21,12 @@ final class GoogleHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(HttpRequest request, @Nullable HttpResponse response) { public String peerName(HttpRequest request) {
return request.getUrl().getHost(); return request.getUrl().getHost();
} }
@Override @Override
public Integer peerPort(HttpRequest request, @Nullable HttpResponse response) { public Integer peerPort(HttpRequest request) {
return request.getUrl().getPort(); return request.getUrl().getPort();
} }
} }

View File

@ -27,12 +27,12 @@ public final class GrpcNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(GrpcRequest grpcRequest, @Nullable Status status) { public String peerName(GrpcRequest grpcRequest) {
return grpcRequest.getLogicalHost(); return grpcRequest.getLogicalHost();
} }
@Override @Override
public Integer peerPort(GrpcRequest grpcRequest, @Nullable Status status) { public Integer peerPort(GrpcRequest grpcRequest) {
return grpcRequest.getLogicalPort(); return grpcRequest.getLogicalPort();
} }

View File

@ -19,12 +19,12 @@ class HttpUrlNetAttributesGetter implements NetClientAttributesGetter<HttpURLCon
} }
@Override @Override
public String peerName(HttpURLConnection connection, @Nullable Integer status) { public String peerName(HttpURLConnection connection) {
return connection.getURL().getHost(); return connection.getURL().getHost();
} }
@Override @Override
public Integer peerPort(HttpURLConnection connection, @Nullable Integer status) { public Integer peerPort(HttpURLConnection connection) {
return connection.getURL().getPort(); return connection.getURL().getPort();
} }
} }

View File

@ -26,13 +26,13 @@ public class JdkHttpNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(HttpRequest httpRequest, @Nullable HttpResponse<?> response) { public String peerName(HttpRequest httpRequest) {
return httpRequest.uri().getHost(); return httpRequest.uri().getHost();
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(HttpRequest httpRequest, @Nullable HttpResponse<?> response) { public Integer peerPort(HttpRequest httpRequest) {
int port = httpRequest.uri().getPort(); int port = httpRequest.uri().getPort();
if (port != -1) { if (port != -1) {
return port; return port;

View File

@ -21,12 +21,12 @@ final class JaxRsClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(ClientRequest request, @Nullable ClientResponse response) { public String peerName(ClientRequest request) {
return request.getURI().getHost(); return request.getURI().getHost();
} }
@Override @Override
public Integer peerPort(ClientRequest request, @Nullable ClientResponse response) { public Integer peerPort(ClientRequest request) {
return request.getURI().getPort(); return request.getURI().getPort();
} }
} }

View File

@ -22,13 +22,13 @@ public final class JdbcNetAttributesGetter implements NetClientAttributesGetter<
@Nullable @Nullable
@Override @Override
public String peerName(DbRequest request, @Nullable Void unused) { public String peerName(DbRequest request) {
return request.getDbInfo().getHost(); return request.getDbInfo().getHost();
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(DbRequest request, @Nullable Void unused) { public Integer peerPort(DbRequest request) {
return request.getDbInfo().getPort(); return request.getDbInfo().getPort();
} }
} }

View File

@ -17,12 +17,12 @@ final class JedisNetAttributesGetter implements NetClientAttributesGetter<JedisR
} }
@Override @Override
public String peerName(JedisRequest request, @Nullable Void unused) { public String peerName(JedisRequest request) {
return request.getConnection().getHost(); return request.getConnection().getHost();
} }
@Override @Override
public Integer peerPort(JedisRequest request, @Nullable Void unused) { public Integer peerPort(JedisRequest request) {
return request.getConnection().getPort(); return request.getConnection().getPort();
} }
} }

View File

@ -21,12 +21,12 @@ final class JedisNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(JedisRequest jedisRequest, @Nullable Void unused) { public String peerName(JedisRequest jedisRequest) {
return jedisRequest.getConnection().getHost(); return jedisRequest.getConnection().getHost();
} }
@Override @Override
public Integer peerPort(JedisRequest jedisRequest, @Nullable Void unused) { public Integer peerPort(JedisRequest jedisRequest) {
return jedisRequest.getConnection().getPort(); return jedisRequest.getConnection().getPort();
} }

View File

@ -21,13 +21,13 @@ final class JedisNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(JedisRequest jedisRequest, @Nullable Void unused) { public String peerName(JedisRequest jedisRequest) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(JedisRequest jedisRequest, @Nullable Void unused) { public Integer peerPort(JedisRequest jedisRequest) {
return null; return null;
} }

View File

@ -25,13 +25,13 @@ public class JettyHttpClientNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(Request request, @Nullable Response response) { public String peerName(Request request) {
return request.getHost(); return request.getHost();
} }
@Override @Override
@Nullable @Nullable
public Integer peerPort(Request request, @Nullable Response response) { public Integer peerPort(Request request) {
return request.getPort(); return request.getPort();
} }
} }

View File

@ -19,12 +19,12 @@ class KubernetesNetAttributesGetter implements NetClientAttributesGetter<Request
} }
@Override @Override
public String peerName(Request request, @Nullable ApiResponse<?> response) { public String peerName(Request request) {
return request.url().host(); return request.url().host();
} }
@Override @Override
public Integer peerPort(Request request, @Nullable ApiResponse<?> response) { public Integer peerPort(Request request) {
return request.url().port(); return request.url().port();
} }
} }

View File

@ -18,12 +18,12 @@ final class LettuceConnectNetAttributesGetter implements NetClientAttributesGett
} }
@Override @Override
public String peerName(RedisURI redisUri, @Nullable Void unused) { public String peerName(RedisURI redisUri) {
return redisUri.getHost(); return redisUri.getHost();
} }
@Override @Override
public Integer peerPort(RedisURI redisUri, @Nullable Void unused) { public Integer peerPort(RedisURI redisUri) {
return redisUri.getPort(); return redisUri.getPort();
} }
} }

View File

@ -18,12 +18,12 @@ final class LettuceConnectNetAttributesGetter implements NetClientAttributesGett
} }
@Override @Override
public String peerName(RedisURI redisUri, @Nullable Void unused) { public String peerName(RedisURI redisUri) {
return redisUri.getHost(); return redisUri.getHost();
} }
@Override @Override
public Integer peerPort(RedisURI redisUri, @Nullable Void unused) { public Integer peerPort(RedisURI redisUri) {
return redisUri.getPort(); return redisUri.getPort();
} }
} }

View File

@ -22,13 +22,13 @@ final class LettuceNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(OpenTelemetryEndpoint openTelemetryEndpoint, @Nullable Void unused) { public String peerName(OpenTelemetryEndpoint openTelemetryEndpoint) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(OpenTelemetryEndpoint openTelemetryEndpoint, @Nullable Void unused) { public Integer peerPort(OpenTelemetryEndpoint openTelemetryEndpoint) {
return null; return null;
} }

View File

@ -19,7 +19,7 @@ class MongoNetAttributesGetter implements NetClientAttributesGetter<CommandStart
@Nullable @Nullable
@Override @Override
public String peerName(CommandStartedEvent event, @Nullable Void unused) { public String peerName(CommandStartedEvent event) {
if (event.getConnectionDescription() != null if (event.getConnectionDescription() != null
&& event.getConnectionDescription().getServerAddress() != null) { && event.getConnectionDescription().getServerAddress() != null) {
return event.getConnectionDescription().getServerAddress().getHost(); return event.getConnectionDescription().getServerAddress().getHost();
@ -29,7 +29,7 @@ class MongoNetAttributesGetter implements NetClientAttributesGetter<CommandStart
@Nullable @Nullable
@Override @Override
public Integer peerPort(CommandStartedEvent event, @Nullable Void unused) { public Integer peerPort(CommandStartedEvent event) {
if (event.getConnectionDescription() != null if (event.getConnectionDescription() != null
&& event.getConnectionDescription().getServerAddress() != null) { && event.getConnectionDescription().getServerAddress() != null) {
return event.getConnectionDescription().getServerAddress().getPort(); return event.getConnectionDescription().getServerAddress().getPort();

View File

@ -26,7 +26,7 @@ final class NettyConnectNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(NettyConnectionRequest request, @Nullable Channel channel) { public String peerName(NettyConnectionRequest request) {
SocketAddress requestedAddress = request.remoteAddressOnStart(); SocketAddress requestedAddress = request.remoteAddressOnStart();
if (requestedAddress instanceof InetSocketAddress) { if (requestedAddress instanceof InetSocketAddress) {
return ((InetSocketAddress) requestedAddress).getHostString(); return ((InetSocketAddress) requestedAddress).getHostString();
@ -36,7 +36,7 @@ final class NettyConnectNetAttributesGetter
@Nullable @Nullable
@Override @Override
public Integer peerPort(NettyConnectionRequest request, @Nullable Channel channel) { public Integer peerPort(NettyConnectionRequest request) {
SocketAddress requestedAddress = request.remoteAddressOnStart(); SocketAddress requestedAddress = request.remoteAddressOnStart();
if (requestedAddress instanceof InetSocketAddress) { if (requestedAddress instanceof InetSocketAddress) {
return ((InetSocketAddress) requestedAddress).getPort(); return ((InetSocketAddress) requestedAddress).getPort();

View File

@ -27,15 +27,13 @@ final class NettyNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName( public String peerName(HttpRequestAndChannel requestAndChannel) {
HttpRequestAndChannel requestAndChannel, @Nullable HttpResponse httpResponse) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort( public Integer peerPort(HttpRequestAndChannel requestAndChannel) {
HttpRequestAndChannel requestAndChannel, @Nullable HttpResponse httpResponse) {
return null; return null;
} }

View File

@ -26,7 +26,7 @@ final class NettyConnectNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(NettyConnectionRequest request, @Nullable Channel channel) { public String peerName(NettyConnectionRequest request) {
SocketAddress requestedAddress = request.remoteAddressOnStart(); SocketAddress requestedAddress = request.remoteAddressOnStart();
if (requestedAddress instanceof InetSocketAddress) { if (requestedAddress instanceof InetSocketAddress) {
return ((InetSocketAddress) requestedAddress).getHostString(); return ((InetSocketAddress) requestedAddress).getHostString();
@ -36,7 +36,7 @@ final class NettyConnectNetAttributesGetter
@Nullable @Nullable
@Override @Override
public Integer peerPort(NettyConnectionRequest request, @Nullable Channel channel) { public Integer peerPort(NettyConnectionRequest request) {
SocketAddress requestedAddress = request.remoteAddressOnStart(); SocketAddress requestedAddress = request.remoteAddressOnStart();
if (requestedAddress instanceof InetSocketAddress) { if (requestedAddress instanceof InetSocketAddress) {
return ((InetSocketAddress) requestedAddress).getPort(); return ((InetSocketAddress) requestedAddress).getPort();

View File

@ -27,15 +27,13 @@ final class NettyNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName( public String peerName(HttpRequestAndChannel requestAndChannel) {
HttpRequestAndChannel requestAndChannel, @Nullable HttpResponse httpResponse) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort( public Integer peerPort(HttpRequestAndChannel requestAndChannel) {
HttpRequestAndChannel requestAndChannel, @Nullable HttpResponse httpResponse) {
return null; return null;
} }

View File

@ -23,13 +23,13 @@ final class NettySslNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(NettySslRequest nettySslRequest, @Nullable Void unused) { public String peerName(NettySslRequest nettySslRequest) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(NettySslRequest nettySslRequest, @Nullable Void unused) { public Integer peerPort(NettySslRequest nettySslRequest) {
return null; return null;
} }

View File

@ -21,12 +21,12 @@ public final class OkHttp2NetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(Request request, @Nullable Response response) { public String peerName(Request request) {
return request.url().getHost(); return request.url().getHost();
} }
@Override @Override
public Integer peerPort(Request request, @Nullable Response response) { public Integer peerPort(Request request) {
return request.url().getPort(); return request.url().getPort();
} }
} }

View File

@ -25,12 +25,12 @@ public final class OkHttpNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(Request request, @Nullable Response response) { public String peerName(Request request) {
return request.url().host(); return request.url().host();
} }
@Override @Override
public Integer peerPort(Request request, @Nullable Response response) { public Integer peerPort(Request request) {
return request.url().port(); return request.url().port();
} }
} }

View File

@ -22,12 +22,12 @@ final class PlayWsClientNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(Request request, @Nullable Response response) { public String peerName(Request request) {
return request.getUri().getHost(); return request.getUri().getHost();
} }
@Override @Override
public Integer peerPort(Request request, @Nullable Response response) { public Integer peerPort(Request request) {
return request.getUri().getPort(); return request.getUri().getPort();
} }

View File

@ -20,13 +20,13 @@ public class RabbitChannelNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(ChannelAndMethod channelAndMethod, @Nullable Void unused) { public String peerName(ChannelAndMethod channelAndMethod) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(ChannelAndMethod channelAndMethod, @Nullable Void unused) { public Integer peerPort(ChannelAndMethod channelAndMethod) {
return null; return null;
} }

View File

@ -21,13 +21,13 @@ public class RabbitReceiveNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(ReceiveRequest request, @Nullable GetResponse response) { public String peerName(ReceiveRequest request) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(ReceiveRequest request, @Nullable GetResponse response) { public Integer peerPort(ReceiveRequest request) {
return null; return null;
} }

View File

@ -25,12 +25,12 @@ public final class RatpackHttpNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(RequestSpec request, @Nullable HttpResponse response) { public String peerName(RequestSpec request) {
return request.getUri().getHost(); return request.getUri().getHost();
} }
@Override @Override
public Integer peerPort(RequestSpec request, @Nullable HttpResponse response) { public Integer peerPort(RequestSpec request) {
return request.getUri().getPort(); return request.getUri().getPort();
} }
} }

View File

@ -24,13 +24,13 @@ final class ReactorNettyNetClientAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(HttpClientConfig request, @Nullable HttpClientResponse response) { public String peerName(HttpClientConfig request) {
return getHost(request); return getHost(request);
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(HttpClientConfig request, @Nullable HttpClientResponse response) { public Integer peerPort(HttpClientConfig request) {
return getPort(request); return getPort(request);
} }

View File

@ -20,13 +20,13 @@ final class RedissonNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(RedissonRequest redissonRequest, @Nullable Void unused) { public String peerName(RedissonRequest redissonRequest) {
return null; return null;
} }
@Nullable @Nullable
@Override @Override
public Integer peerPort(RedissonRequest redissonRequest, @Nullable Void unused) { public Integer peerPort(RedissonRequest redissonRequest) {
return null; return null;
} }

View File

@ -21,12 +21,12 @@ final class SpringWebNetAttributesGetter
@Override @Override
@Nullable @Nullable
public String peerName(HttpRequest httpRequest, @Nullable ClientHttpResponse response) { public String peerName(HttpRequest httpRequest) {
return httpRequest.getURI().getHost(); return httpRequest.getURI().getHost();
} }
@Override @Override
public Integer peerPort(HttpRequest httpRequest, @Nullable ClientHttpResponse response) { public Integer peerPort(HttpRequest httpRequest) {
return httpRequest.getURI().getPort(); return httpRequest.getURI().getPort();
} }
} }

View File

@ -25,12 +25,12 @@ public final class SpringWebfluxNetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(ClientRequest request, @Nullable ClientResponse response) { public String peerName(ClientRequest request) {
return request.url().getHost(); return request.url().getHost();
} }
@Override @Override
public Integer peerPort(ClientRequest request, @Nullable ClientResponse response) { public Integer peerPort(ClientRequest request) {
return request.url().getPort(); return request.url().getPort();
} }
} }

View File

@ -23,12 +23,12 @@ final class Vertx4NetAttributesGetter
@Nullable @Nullable
@Override @Override
public String peerName(HttpClientRequest request, @Nullable HttpClientResponse response) { public String peerName(HttpClientRequest request) {
return request.getHost(); return request.getHost();
} }
@Override @Override
public Integer peerPort(HttpClientRequest request, @Nullable HttpClientResponse response) { public Integer peerPort(HttpClientRequest request) {
return request.getPort(); return request.getPort();
} }