Skip to content

Commit b1c322b

Browse files
authored
Introduce cache for peer.hostname lookup (#8601)
* And add switch to turn off peer.hostname collection
1 parent dfe3134 commit b1c322b

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

+16-4
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

+3-2
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,13 @@ public final class TracerConfig {
131131
"trace.experimental.long-running.initial.flush.interval";
132132
public static final String TRACE_LONG_RUNNING_FLUSH_INTERVAL =
133133
"trace.experimental.long-running.flush.interval";
134+
135+
public static final String TRACE_PEER_HOSTNAME_ENABLED = "trace.peer.hostname.enabled";
136+
134137
public static final String TRACE_PEER_SERVICE_DEFAULTS_ENABLED =
135138
"trace.peer.service.defaults.enabled";
136-
137139
public static final String TRACE_PEER_SERVICE_COMPONENT_OVERRIDES =
138140
"trace.peer.service.component.overrides";
139-
140141
public static final String TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED =
141142
"trace.remove.integration-service-names.enabled";
142143

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

+9
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;
@@ -827,6 +828,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
827828

828829
spanAttributeSchemaVersion = schemaVersionFromConfig();
829830

831+
peerHostNameEnabled = configProvider.getBoolean(TRACE_PEER_HOSTNAME_ENABLED, true);
832+
830833
// following two only used in v0.
831834
// in v1+ defaults are always calculated regardless this feature flag
832835
peerServiceDefaultsEnabled =
@@ -2167,6 +2170,10 @@ public int getSpanAttributeSchemaVersion() {
21672170
return spanAttributeSchemaVersion;
21682171
}
21692172

2173+
public boolean isPeerHostNameEnabled() {
2174+
return peerHostNameEnabled;
2175+
}
2176+
21702177
public boolean isPeerServiceDefaultsEnabled() {
21712178
return peerServiceDefaultsEnabled;
21722179
}
@@ -4820,6 +4827,8 @@ public String toString() {
48204827
+ jaxRsExceptionAsErrorsEnabled
48214828
+ ", axisPromoteResourceName="
48224829
+ axisPromoteResourceName
4830+
+ ", peerHostNameEnabled="
4831+
+ peerHostNameEnabled
48234832
+ ", peerServiceDefaultsEnabled="
48244833
+ peerServiceDefaultsEnabled
48254834
+ ", peerServiceComponentOverrides="

0 commit comments

Comments
 (0)