Skip to content

Commit e8246f6

Browse files
authored
Merge pull request #881 from DataDog/tyler/instance-name
Add `dd.trace.db.client.split-by-instance` Config
2 parents 350ff9b + 4c5793b commit e8246f6

6 files changed

Lines changed: 47 additions & 15 deletions

File tree

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/decorator/DatabaseClientDecorator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.agent.decorator;
22

3+
import datadog.trace.api.Config;
4+
import datadog.trace.api.DDTags;
35
import io.opentracing.Span;
46
import io.opentracing.tag.Tags;
57

@@ -29,7 +31,11 @@ public Span onConnection(final Span span, final CONNECTION connection) {
2931
assert span != null;
3032
if (connection != null) {
3133
Tags.DB_USER.set(span, dbUser(connection));
32-
Tags.DB_INSTANCE.set(span, dbInstance(connection));
34+
final String instanceName = dbInstance(connection);
35+
Tags.DB_INSTANCE.set(span, instanceName);
36+
if (instanceName != null && Config.get().isDbClientSplitByInstance()) {
37+
span.setTag(DDTags.SERVICE_NAME, instanceName);
38+
}
3339
}
3440
return span;
3541
}

dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/decorator/DatabaseClientDecoratorTest.groovy

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package datadog.trace.agent.decorator
22

3+
import datadog.trace.api.Config
34
import datadog.trace.api.DDTags
45
import io.opentracing.Span
56
import io.opentracing.tag.Tags
67

8+
import static datadog.trace.agent.test.utils.ConfigUtils.withConfigOverride
9+
710
class DatabaseClientDecoratorTest extends ClientDecoratorTest {
811

912
def span = Mock(Span)
@@ -35,21 +38,26 @@ class DatabaseClientDecoratorTest extends ClientDecoratorTest {
3538
def decorator = newDecorator()
3639

3740
when:
38-
decorator.onConnection(span, session)
41+
withConfigOverride(Config.DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "$renameService") {
42+
decorator.onConnection(span, session)
43+
}
3944

4045
then:
4146
if (session) {
4247
1 * span.setTag(Tags.DB_USER.key, session.user)
4348
1 * span.setTag(Tags.DB_INSTANCE.key, session.instance)
49+
if (renameService && session.instance) {
50+
1 * span.setTag(DDTags.SERVICE_NAME, session.instance)
51+
}
4452
}
4553
0 * _
4654

4755
where:
48-
session | _
49-
null | _
50-
[user: "test-user"] | _
51-
[instance: "test-instance"] | _
52-
[user: "test-user", instance: "test-instance"] | _
56+
renameService | session
57+
false | null
58+
true | [user: "test-user"]
59+
false | [instance: "test-instance"]
60+
true | [user: "test-user", instance: "test-instance"]
5361
}
5462

5563
def "test onStatement"() {

dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/decorator/HttpClientDecoratorTest.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ class HttpClientDecoratorTest extends ClientDecoratorTest {
2626

2727
then:
2828
if (req) {
29-
1 * span.setTag(Tags.HTTP_METHOD.key, "test-method")
30-
1 * span.setTag(Tags.HTTP_URL.key, "$testUrl")
31-
1 * span.setTag(Tags.PEER_HOSTNAME.key, "test-host")
32-
1 * span.setTag(Tags.PEER_PORT.key, 555)
29+
1 * span.setTag(Tags.HTTP_METHOD.key, req.method)
30+
1 * span.setTag(Tags.HTTP_URL.key, "$req.url")
31+
1 * span.setTag(Tags.PEER_HOSTNAME.key, req.host)
32+
1 * span.setTag(Tags.PEER_PORT.key, req.port)
3333
if (renameService) {
34-
1 * span.setTag(DDTags.SERVICE_NAME, "test-host")
34+
1 * span.setTag(DDTags.SERVICE_NAME, req.host)
3535
}
3636
}
3737
0 * _

dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/decorator/OrmClientDecoratorTest.groovy

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package datadog.trace.agent.decorator
22

33
import datadog.trace.api.DDTags
4-
import io.opentracing.Span
54

65
class OrmClientDecoratorTest extends DatabaseClientDecoratorTest {
76

8-
def span = Mock(Span)
9-
107
def "test onOperation #testName"() {
118
setup:
129
decorator = newDecorator({ e -> entityName })

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public class Config {
6363
public static final String HTTP_SERVER_TAG_QUERY_STRING = "http.server.tag.query-string";
6464
public static final String HTTP_CLIENT_TAG_QUERY_STRING = "http.client.tag.query-string";
6565
public static final String HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN = "trace.http.client.split-by-domain";
66+
public static final String DB_CLIENT_HOST_SPLIT_BY_INSTANCE = "trace.db.client.split-by-instance";
6667
public static final String PARTIAL_FLUSH_MIN_SPANS = "trace.partial.flush.min.spans";
6768
public static final String RUNTIME_CONTEXT_FIELD_INJECTION =
6869
"trace.runtime.context.field.injection";
@@ -107,6 +108,7 @@ public class Config {
107108
private static final boolean DEFAULT_HTTP_SERVER_TAG_QUERY_STRING = false;
108109
private static final boolean DEFAULT_HTTP_CLIENT_TAG_QUERY_STRING = false;
109110
private static final boolean DEFAULT_HTTP_CLIENT_SPLIT_BY_DOMAIN = false;
111+
private static final boolean DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE = false;
110112
private static final int DEFAULT_PARTIAL_FLUSH_MIN_SPANS = 1000;
111113
private static final String DEFAULT_PROPAGATION_STYLE_EXTRACT = PropagationStyle.DATADOG.name();
112114
private static final String DEFAULT_PROPAGATION_STYLE_INJECT = PropagationStyle.DATADOG.name();
@@ -160,6 +162,7 @@ public enum PropagationStyle {
160162
@Getter private final boolean httpServerTagQueryString;
161163
@Getter private final boolean httpClientTagQueryString;
162164
@Getter private final boolean httpClientSplitByDomain;
165+
@Getter private final boolean dbClientSplitByInstance;
163166
@Getter private final Integer partialFlushMinSpans;
164167
@Getter private final boolean runtimeContextFieldInjection;
165168
@Getter private final Set<PropagationStyle> propagationStylesToExtract;
@@ -238,6 +241,10 @@ public enum PropagationStyle {
238241
getBooleanSettingFromEnvironment(
239242
HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, DEFAULT_HTTP_CLIENT_SPLIT_BY_DOMAIN);
240243

244+
dbClientSplitByInstance =
245+
getBooleanSettingFromEnvironment(
246+
DB_CLIENT_HOST_SPLIT_BY_INSTANCE, DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE);
247+
241248
partialFlushMinSpans =
242249
getIntegerSettingFromEnvironment(PARTIAL_FLUSH_MIN_SPANS, DEFAULT_PARTIAL_FLUSH_MIN_SPANS);
243250

@@ -342,6 +349,10 @@ private Config(final Properties properties, final Config parent) {
342349
getPropertyBooleanValue(
343350
properties, HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, parent.httpClientSplitByDomain);
344351

352+
dbClientSplitByInstance =
353+
getPropertyBooleanValue(
354+
properties, DB_CLIENT_HOST_SPLIT_BY_INSTANCE, parent.dbClientSplitByInstance);
355+
345356
partialFlushMinSpans =
346357
getPropertyIntegerValue(properties, PARTIAL_FLUSH_MIN_SPANS, parent.partialFlushMinSpans);
347358

dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import spock.lang.Specification
88
import static datadog.trace.api.Config.AGENT_HOST
99
import static datadog.trace.api.Config.AGENT_PORT_LEGACY
1010
import static datadog.trace.api.Config.AGENT_UNIX_DOMAIN_SOCKET
11+
import static datadog.trace.api.Config.DB_CLIENT_HOST_SPLIT_BY_INSTANCE
1112
import static datadog.trace.api.Config.DEFAULT_JMX_FETCH_STATSD_PORT
1213
import static datadog.trace.api.Config.GLOBAL_TAGS
1314
import static datadog.trace.api.Config.HEADER_TAGS
@@ -79,6 +80,7 @@ class ConfigTest extends Specification {
7980
config.httpServerErrorStatuses == (500..599).toSet()
8081
config.httpClientErrorStatuses == (400..499).toSet()
8182
config.httpClientSplitByDomain == false
83+
config.dbClientSplitByInstance == false
8284
config.partialFlushMinSpans == 1000
8385
config.reportHostName == false
8486
config.runtimeContextFieldInjection == true
@@ -120,6 +122,7 @@ class ConfigTest extends Specification {
120122
prop.setProperty(HTTP_SERVER_ERROR_STATUSES, "123-456,457,124-125,122")
121123
prop.setProperty(HTTP_CLIENT_ERROR_STATUSES, "111")
122124
prop.setProperty(HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "true")
125+
prop.setProperty(DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "true")
123126
prop.setProperty(PARTIAL_FLUSH_MIN_SPANS, "15")
124127
prop.setProperty(TRACE_REPORT_HOSTNAME, "true")
125128
prop.setProperty(RUNTIME_CONTEXT_FIELD_INJECTION, "false")
@@ -151,6 +154,7 @@ class ConfigTest extends Specification {
151154
config.httpServerErrorStatuses == (122..457).toSet()
152155
config.httpClientErrorStatuses == (111..111).toSet()
153156
config.httpClientSplitByDomain == true
157+
config.dbClientSplitByInstance == true
154158
config.partialFlushMinSpans == 15
155159
config.reportHostName == true
156160
config.runtimeContextFieldInjection == false
@@ -183,6 +187,7 @@ class ConfigTest extends Specification {
183187
System.setProperty(PREFIX + HTTP_SERVER_ERROR_STATUSES, "123-456,457,124-125,122")
184188
System.setProperty(PREFIX + HTTP_CLIENT_ERROR_STATUSES, "111")
185189
System.setProperty(PREFIX + HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "true")
190+
System.setProperty(PREFIX + DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "true")
186191
System.setProperty(PREFIX + PARTIAL_FLUSH_MIN_SPANS, "25")
187192
System.setProperty(PREFIX + TRACE_REPORT_HOSTNAME, "true")
188193
System.setProperty(PREFIX + RUNTIME_CONTEXT_FIELD_INJECTION, "false")
@@ -214,6 +219,7 @@ class ConfigTest extends Specification {
214219
config.httpServerErrorStatuses == (122..457).toSet()
215220
config.httpClientErrorStatuses == (111..111).toSet()
216221
config.httpClientSplitByDomain == true
222+
config.dbClientSplitByInstance == true
217223
config.partialFlushMinSpans == 25
218224
config.reportHostName == true
219225
config.runtimeContextFieldInjection == false
@@ -287,6 +293,7 @@ class ConfigTest extends Specification {
287293
System.setProperty(PREFIX + HTTP_SERVER_ERROR_STATUSES, "1111")
288294
System.setProperty(PREFIX + HTTP_CLIENT_ERROR_STATUSES, "1:1")
289295
System.setProperty(PREFIX + HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "invalid")
296+
System.setProperty(PREFIX + DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "invalid")
290297
System.setProperty(PREFIX + PROPAGATION_STYLE_EXTRACT, "some garbage")
291298
System.setProperty(PREFIX + PROPAGATION_STYLE_INJECT, " ")
292299

@@ -307,6 +314,7 @@ class ConfigTest extends Specification {
307314
config.httpServerErrorStatuses == (500..599).toSet()
308315
config.httpClientErrorStatuses == (400..499).toSet()
309316
config.httpClientSplitByDomain == false
317+
config.dbClientSplitByInstance == false
310318
config.propagationStylesToExtract.toList() == [Config.PropagationStyle.DATADOG]
311319
config.propagationStylesToInject.toList() == [Config.PropagationStyle.DATADOG]
312320
}
@@ -372,6 +380,7 @@ class ConfigTest extends Specification {
372380
properties.setProperty(HTTP_SERVER_ERROR_STATUSES, "123-456,457,124-125,122")
373381
properties.setProperty(HTTP_CLIENT_ERROR_STATUSES, "111")
374382
properties.setProperty(HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "true")
383+
properties.setProperty(DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "true")
375384
properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "15")
376385
properties.setProperty(PROPAGATION_STYLE_EXTRACT, "B3 Datadog")
377386
properties.setProperty(PROPAGATION_STYLE_INJECT, "Datadog B3")
@@ -400,6 +409,7 @@ class ConfigTest extends Specification {
400409
config.httpServerErrorStatuses == (122..457).toSet()
401410
config.httpClientErrorStatuses == (111..111).toSet()
402411
config.httpClientSplitByDomain == true
412+
config.dbClientSplitByInstance == true
403413
config.partialFlushMinSpans == 15
404414
config.propagationStylesToExtract.toList() == [Config.PropagationStyle.B3, Config.PropagationStyle.DATADOG]
405415
config.propagationStylesToInject.toList() == [Config.PropagationStyle.DATADOG, Config.PropagationStyle.B3]

0 commit comments

Comments
 (0)