Skip to content

Commit 44bea8d

Browse files
authored
add db client metrics for dynamo db (#13033)
1 parent 4d2ea25 commit 44bea8d

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts

+8
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ tasks {
140140
}
141141
}
142142

143+
val testStableSemconv by registering(Test::class) {
144+
jvmArgs("-Dotel.semconv-stability.opt-in=database")
145+
}
146+
147+
check {
148+
dependsOn(testStableSemconv)
149+
}
150+
143151
test {
144152
usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service)
145153
}

instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts

+10
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,13 @@ if (!(findProperty("testLatestDeps") as Boolean)) {
3434
}
3535
}
3636
}
37+
38+
tasks {
39+
val testStableSemconv by registering(Test::class) {
40+
jvmArgs("-Dotel.semconv-stability.opt-in=database")
41+
}
42+
43+
check {
44+
dependsOn(testStableSemconv)
45+
}
46+
}

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.api.common.AttributesBuilder;
1515
import io.opentelemetry.api.trace.Span;
1616
import io.opentelemetry.context.Context;
17+
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics;
1718
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation;
1819
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor;
1920
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
@@ -27,6 +28,7 @@
2728
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
2829
import java.util.ArrayList;
2930
import java.util.Arrays;
31+
import java.util.Collections;
3032
import java.util.List;
3133
import javax.annotation.Nullable;
3234

@@ -189,13 +191,12 @@ Instrumenter<Request<?>, Response<?>> producerInstrumenter() {
189191
Instrumenter<Request<?>, Response<?>> dynamoDbInstrumenter() {
190192
DynamoDbAttributesExtractor dynamoDbAttributesExtractor = new DynamoDbAttributesExtractor();
191193

192-
return createInstrumenter(
193-
openTelemetry,
194-
spanName,
195-
SpanKindExtractor.alwaysClient(),
196-
attributesExtractors(),
197-
singletonList(dynamoDbAttributesExtractor),
198-
true);
194+
return Instrumenter.<Request<?>, Response<?>>builder(
195+
openTelemetry, INSTRUMENTATION_NAME, spanName)
196+
.addAttributesExtractors(attributesExtractors())
197+
.addAttributesExtractors(Collections.singletonList(dynamoDbAttributesExtractor))
198+
.addOperationMetrics(DbClientMetrics.get())
199+
.buildInstrumenter(SpanKindExtractor.alwaysClient());
199200
}
200201

201202
private static <REQUEST, RESPONSE> Instrumenter<REQUEST, RESPONSE> createInstrumenter(

instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractDynamoDbClientTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
package io.opentelemetry.instrumentation.awssdk.v1_11;
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
9+
import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
11+
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
12+
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;
1013
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_DYNAMODB_TABLE_NAMES;
1114
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM;
1215
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemIncubatingValues.DYNAMODB;
@@ -52,5 +55,8 @@ public void sendRequestWithMockedResponse() throws Exception {
5255
Object response = client.createTable(new CreateTableRequest("sometable", null));
5356
assertRequestWithMockedResponse(
5457
response, client, "DynamoDBv2", "CreateTable", "POST", additionalAttributes);
58+
59+
assertDurationMetric(
60+
testing(), "io.opentelemetry.aws-sdk-1.11", DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT);
5561
}
5662
}

0 commit comments

Comments
 (0)