Skip to content

Commit 8634614

Browse files
authored
🍒 8601 - Introduce cache for peer.hostname lookup (#8611)
* Introduce cache for peer.hostname lookup (cherry picked from commit 20c6a3d) * Add switch to turn off peer.hostname collection (cherry picked from commit 3cf184d)
1 parent feebc3c commit 8634614

File tree

3 files changed

+28
-6
lines changed
  • dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator
  • dd-trace-api/src/main/java/datadog/trace/api/config
  • internal-api/src/main/java/datadog/trace/api

3 files changed

+28
-6
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import datadog.trace.api.Config;
77
import datadog.trace.api.DDTags;
88
import datadog.trace.api.Functions;
9+
import datadog.trace.api.cache.DDCache;
10+
import datadog.trace.api.cache.DDCaches;
911
import datadog.trace.api.cache.QualifiedClassNameCache;
1012
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1113
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -37,6 +39,8 @@ public String apply(Class<?> clazz) {
3739
},
3840
Functions.PrefixJoin.of("."));
3941

42+
private static final DDCache<String, String> HOSTNAME_CACHE = DDCaches.newFixedSizeCache(64);
43+
4044
protected final boolean traceAnalyticsEnabled;
4145
protected final Double traceAnalyticsSampleRate;
4246

@@ -114,13 +118,14 @@ public AgentSpan onPeerConnection(final AgentSpan span, final InetAddress remote
114118

115119
public AgentSpan onPeerConnection(AgentSpan span, InetAddress remoteAddress, boolean resolved) {
116120
if (remoteAddress != null) {
117-
if (resolved) {
118-
span.setTag(Tags.PEER_HOSTNAME, remoteAddress.getHostName());
121+
String ip = remoteAddress.getHostAddress();
122+
if (resolved && Config.get().isPeerHostNameEnabled()) {
123+
span.setTag(Tags.PEER_HOSTNAME, hostName(remoteAddress, ip));
119124
}
120125
if (remoteAddress instanceof Inet4Address) {
121-
span.setTag(Tags.PEER_HOST_IPV4, remoteAddress.getHostAddress());
126+
span.setTag(Tags.PEER_HOST_IPV4, ip);
122127
} else if (remoteAddress instanceof Inet6Address) {
123-
span.setTag(Tags.PEER_HOST_IPV6, remoteAddress.getHostAddress());
128+
span.setTag(Tags.PEER_HOST_IPV6, ip);
124129
}
125130
}
126131
return span;
@@ -187,4 +192,11 @@ public CharSequence className(final Class<?> clazz) {
187192
String simpleName = clazz.getSimpleName();
188193
return simpleName.isEmpty() ? CLASS_NAMES.getClassName(clazz) : simpleName;
189194
}
195+
196+
private static String hostName(InetAddress remoteAddress, String ip) {
197+
if (null != ip) {
198+
return HOSTNAME_CACHE.computeIfAbsent(ip, _ip -> remoteAddress.getHostName());
199+
}
200+
return remoteAddress.getHostName();
201+
}
190202
}

dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,13 @@ public final class TracerConfig {
126126
"trace.experimental.long-running.initial.flush.interval";
127127
public static final String TRACE_LONG_RUNNING_FLUSH_INTERVAL =
128128
"trace.experimental.long-running.flush.interval";
129+
130+
public static final String TRACE_PEER_HOSTNAME_ENABLED = "trace.peer.hostname.enabled";
131+
129132
public static final String TRACE_PEER_SERVICE_DEFAULTS_ENABLED =
130133
"trace.peer.service.defaults.enabled";
131-
132134
public static final String TRACE_PEER_SERVICE_COMPONENT_OVERRIDES =
133135
"trace.peer.service.component.overrides";
134-
135136
public static final String TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED =
136137
"trace.remove.integration-service-names.enabled";
137138

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public static String getHostName() {
146146
private final String prioritySamplingForce;
147147
private final boolean traceResolverEnabled;
148148
private final int spanAttributeSchemaVersion;
149+
private final boolean peerHostNameEnabled;
149150
private final boolean peerServiceDefaultsEnabled;
150151
private final Map<String, String> peerServiceComponentOverrides;
151152
private final boolean removeIntegrationServiceNamesEnabled;
@@ -800,6 +801,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
800801

801802
spanAttributeSchemaVersion = schemaVersionFromConfig();
802803

804+
peerHostNameEnabled = configProvider.getBoolean(TRACE_PEER_HOSTNAME_ENABLED, true);
805+
803806
// following two only used in v0.
804807
// in v1+ defaults are always calculated regardless this feature flag
805808
peerServiceDefaultsEnabled =
@@ -2094,6 +2097,10 @@ public int getSpanAttributeSchemaVersion() {
20942097
return spanAttributeSchemaVersion;
20952098
}
20962099

2100+
public boolean isPeerHostNameEnabled() {
2101+
return peerHostNameEnabled;
2102+
}
2103+
20972104
public boolean isPeerServiceDefaultsEnabled() {
20982105
return peerServiceDefaultsEnabled;
20992106
}
@@ -4711,6 +4718,8 @@ public String toString() {
47114718
+ jaxRsExceptionAsErrorsEnabled
47124719
+ ", axisPromoteResourceName="
47134720
+ axisPromoteResourceName
4721+
+ ", peerHostNameEnabled="
4722+
+ peerHostNameEnabled
47144723
+ ", peerServiceDefaultsEnabled="
47154724
+ peerServiceDefaultsEnabled
47164725
+ ", peerServiceComponentOverrides="

0 commit comments

Comments
 (0)