Skip to content

Commit 3fd1479

Browse files
authored
Add JDBC transaction duration metrics (#19003)
1 parent 4593933 commit 3fd1479

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ public static Instrumenter<DbRequest, Void> createTransactionInstrumenter(
133133
SqlClientAttributesExtractor.builder(new JdbcAttributesGetter()).build())
134134
.addAttributesExtractor(new TransactionAttributeExtractor())
135135
.addAttributesExtractors(extractors)
136+
.addOperationMetrics(DbClientMetrics.get())
136137
.setEnabled(enabled)
137138
.buildInstrumenter(SpanKindExtractor.alwaysClient());
138139
}

instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1212
import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE;
1313
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE;
14+
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME;
1415
import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_TEXT;
1516
import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME;
1617
import static io.opentelemetry.semconv.DbAttributes.DbSystemNameValues.POSTGRESQL;
@@ -203,6 +204,32 @@ void buildWithTransactionInstrumenterEnabled() throws SQLException {
203204
span -> span.hasName("ROLLBACK")));
204205
}
205206

207+
@Test
208+
void transactionMetrics() throws SQLException {
209+
JdbcTelemetry telemetry =
210+
JdbcTelemetry.builder(testing.getOpenTelemetry())
211+
.setTransactionInstrumenterEnabled(true)
212+
.build();
213+
214+
DataSource dataSource = telemetry.wrap(new TestDataSource());
215+
216+
testing.runWithSpan("parent", () -> dataSource.getConnection().commit());
217+
218+
testing.waitAndAssertTraces(
219+
trace ->
220+
trace.hasSpansSatisfyingExactly(
221+
span -> span.hasName("parent"), span -> span.hasName("COMMIT")));
222+
223+
assertDurationMetric(
224+
testing,
225+
"io.opentelemetry.jdbc",
226+
DB_NAMESPACE,
227+
DB_OPERATION_NAME,
228+
DB_SYSTEM_NAME,
229+
SERVER_ADDRESS,
230+
SERVER_PORT);
231+
}
232+
206233
@Test
207234
void buildWithSanitizationDisabled() throws SQLException {
208235
JdbcTelemetry telemetry =

0 commit comments

Comments
 (0)