diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java index 758e4bbd9c5a..62c28844ecc8 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java @@ -133,6 +133,7 @@ public static Instrumenter createTransactionInstrumenter( SqlClientAttributesExtractor.builder(new JdbcAttributesGetter()).build()) .addAttributesExtractor(new TransactionAttributeExtractor()) .addAttributesExtractors(extractors) + .addOperationMetrics(DbClientMetrics.get()) .setEnabled(enabled) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 0c28b0c009f4..f6daea823e6d 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; +import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_TEXT; import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME; import static io.opentelemetry.semconv.DbAttributes.DbSystemNameValues.POSTGRESQL; @@ -203,6 +204,32 @@ void buildWithTransactionInstrumenterEnabled() throws SQLException { span -> span.hasName("ROLLBACK"))); } + @Test + void transactionMetrics() throws SQLException { + JdbcTelemetry telemetry = + JdbcTelemetry.builder(testing.getOpenTelemetry()) + .setTransactionInstrumenterEnabled(true) + .build(); + + DataSource dataSource = telemetry.wrap(new TestDataSource()); + + testing.runWithSpan("parent", () -> dataSource.getConnection().commit()); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent"), span -> span.hasName("COMMIT"))); + + assertDurationMetric( + testing, + "io.opentelemetry.jdbc", + DB_NAMESPACE, + DB_OPERATION_NAME, + DB_SYSTEM_NAME, + SERVER_ADDRESS, + SERVER_PORT); + } + @Test void buildWithSanitizationDisabled() throws SQLException { JdbcTelemetry telemetry =