From 20c6a3da9a58d0a413a007869608585eabca6cff Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 20 Mar 2025 22:30:42 +0000 Subject: [PATCH 1/2] Introduce cache for peer.hostname lookup --- .../decorator/BaseDecorator.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java index ae38ea8af3c..010244fa3ae 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java @@ -6,6 +6,8 @@ import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.Functions; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import datadog.trace.api.cache.QualifiedClassNameCache; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -37,6 +39,8 @@ public String apply(Class clazz) { }, Functions.PrefixJoin.of(".")); + private static final DDCache HOSTNAME_CACHE = DDCaches.newFixedSizeCache(64); + protected final boolean traceAnalyticsEnabled; protected final Double traceAnalyticsSampleRate; @@ -114,13 +118,14 @@ public AgentSpan onPeerConnection(final AgentSpan span, final InetAddress remote public AgentSpan onPeerConnection(AgentSpan span, InetAddress remoteAddress, boolean resolved) { if (remoteAddress != null) { + String ip = remoteAddress.getHostAddress(); if (resolved) { - span.setTag(Tags.PEER_HOSTNAME, remoteAddress.getHostName()); + span.setTag(Tags.PEER_HOSTNAME, hostName(remoteAddress, ip)); } if (remoteAddress instanceof Inet4Address) { - span.setTag(Tags.PEER_HOST_IPV4, remoteAddress.getHostAddress()); + span.setTag(Tags.PEER_HOST_IPV4, ip); } else if (remoteAddress instanceof Inet6Address) { - span.setTag(Tags.PEER_HOST_IPV6, remoteAddress.getHostAddress()); + span.setTag(Tags.PEER_HOST_IPV6, ip); } } return span; @@ -187,4 +192,11 @@ public CharSequence className(final Class clazz) { String simpleName = clazz.getSimpleName(); return simpleName.isEmpty() ? CLASS_NAMES.getClassName(clazz) : simpleName; } + + private static String hostName(InetAddress remoteAddress, String ip) { + if (null != ip) { + return HOSTNAME_CACHE.computeIfAbsent(ip, _ip -> remoteAddress.getHostName()); + } + return remoteAddress.getHostName(); + } } From 3cf184decea4f323837ca4dabb95031fe5c1ede7 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 21 Mar 2025 10:40:53 +0000 Subject: [PATCH 2/2] Add switch to turn off peer.hostname collection --- .../instrumentation/decorator/BaseDecorator.java | 2 +- .../main/java/datadog/trace/api/config/TracerConfig.java | 5 +++-- internal-api/src/main/java/datadog/trace/api/Config.java | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java index 010244fa3ae..2c33d88bd3c 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java @@ -119,7 +119,7 @@ public AgentSpan onPeerConnection(final AgentSpan span, final InetAddress remote public AgentSpan onPeerConnection(AgentSpan span, InetAddress remoteAddress, boolean resolved) { if (remoteAddress != null) { String ip = remoteAddress.getHostAddress(); - if (resolved) { + if (resolved && Config.get().isPeerHostNameEnabled()) { span.setTag(Tags.PEER_HOSTNAME, hostName(remoteAddress, ip)); } if (remoteAddress instanceof Inet4Address) { diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index e049ffec190..d817c88666e 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -131,12 +131,13 @@ public final class TracerConfig { "trace.experimental.long-running.initial.flush.interval"; public static final String TRACE_LONG_RUNNING_FLUSH_INTERVAL = "trace.experimental.long-running.flush.interval"; + + public static final String TRACE_PEER_HOSTNAME_ENABLED = "trace.peer.hostname.enabled"; + public static final String TRACE_PEER_SERVICE_DEFAULTS_ENABLED = "trace.peer.service.defaults.enabled"; - public static final String TRACE_PEER_SERVICE_COMPONENT_OVERRIDES = "trace.peer.service.component.overrides"; - public static final String TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED = "trace.remove.integration-service-names.enabled"; diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 2677379ae1f..fd7eca95403 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -146,6 +146,7 @@ public static String getHostName() { private final String prioritySamplingForce; private final boolean traceResolverEnabled; private final int spanAttributeSchemaVersion; + private final boolean peerHostNameEnabled; private final boolean peerServiceDefaultsEnabled; private final Map peerServiceComponentOverrides; private final boolean removeIntegrationServiceNamesEnabled; @@ -827,6 +828,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins spanAttributeSchemaVersion = schemaVersionFromConfig(); + peerHostNameEnabled = configProvider.getBoolean(TRACE_PEER_HOSTNAME_ENABLED, true); + // following two only used in v0. // in v1+ defaults are always calculated regardless this feature flag peerServiceDefaultsEnabled = @@ -2167,6 +2170,10 @@ public int getSpanAttributeSchemaVersion() { return spanAttributeSchemaVersion; } + public boolean isPeerHostNameEnabled() { + return peerHostNameEnabled; + } + public boolean isPeerServiceDefaultsEnabled() { return peerServiceDefaultsEnabled; } @@ -4820,6 +4827,8 @@ public String toString() { + jaxRsExceptionAsErrorsEnabled + ", axisPromoteResourceName=" + axisPromoteResourceName + + ", peerHostNameEnabled=" + + peerHostNameEnabled + ", peerServiceDefaultsEnabled=" + peerServiceDefaultsEnabled + ", peerServiceComponentOverrides="