From 1b8db66d0d69a8155d8743d3477b8ec95e3a4679 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 31 Oct 2025 14:24:19 +0100 Subject: [PATCH 1/3] add declarative config parameters --- .../jdbc/OpenTelemetryDriver.java | 2 +- .../internal/JdbcInstrumenterFactory.java | 35 +++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java index 34a96c2caa0f..8e32d65c9a67 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java @@ -253,7 +253,7 @@ public Connection connect(String url, Properties info) throws SQLException { Instrumenter statementInstrumenter = JdbcInstrumenterFactory.createStatementInstrumenter(openTelemetry); - boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters(); + boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters(openTelemetry); Instrumenter transactionInstrumenter = JdbcInstrumenterFactory.createTransactionInstrumenter(openTelemetry); 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 ce9bd75a0bdc..e672113234d0 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 @@ -5,9 +5,12 @@ package io.opentelemetry.instrumentation.jdbc.internal; +import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; import static java.util.Collections.emptyList; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; @@ -32,14 +35,14 @@ public final class JdbcInstrumenterFactory { private static final JdbcNetworkAttributesGetter netAttributesGetter = new JdbcNetworkAttributesGetter(); - public static boolean captureQueryParameters() { + public static boolean captureQueryParameters(OpenTelemetry openTelemetry) { return ConfigPropertiesUtil.getBoolean( "otel.instrumentation.jdbc.experimental.capture-query-parameters", false); } public static Instrumenter createStatementInstrumenter( OpenTelemetry openTelemetry) { - return createStatementInstrumenter(openTelemetry, captureQueryParameters()); + return createStatementInstrumenter(openTelemetry, captureQueryParameters(openTelemetry)); } static Instrumenter createStatementInstrumenter( @@ -97,10 +100,30 @@ public static Instrumenter createDataSourceInstrumenter( public static Instrumenter createTransactionInstrumenter( OpenTelemetry openTelemetry) { - return createTransactionInstrumenter( - openTelemetry, - ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.jdbc.experimental.transaction.enabled", false)); + + return createTransactionInstrumenter(openTelemetry, transactionEnabled(openTelemetry, false)); + } + + private static boolean transactionEnabled(OpenTelemetry openTelemetry, boolean defaultEnabled) { + if (openTelemetry instanceof ExtendedOpenTelemetry) { + ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; + + DeclarativeConfigProperties instrumentationConfig = + extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig(); + + if (instrumentationConfig == null) { + return defaultEnabled; + } + + return instrumentationConfig + .getStructured("jdbc", empty()) + .getStructured("experimental", empty()) + .getStructured("transaction", empty()) + .getBoolean("enabled", defaultEnabled); + } else { + return ConfigPropertiesUtil.getBoolean( + "otel.instrumentation.jdbc.experimental.transaction.enabled", defaultEnabled); + } } public static Instrumenter createTransactionInstrumenter( From 709e4f29b29042b104e60a9d4a7b0e2ec33336be Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 31 Oct 2025 14:33:46 +0100 Subject: [PATCH 2/3] add declarative config parameters --- .../internal/JdbcInstrumenterFactory.java | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) 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 e672113234d0..012c413667a8 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 @@ -36,8 +36,24 @@ public final class JdbcInstrumenterFactory { new JdbcNetworkAttributesGetter(); public static boolean captureQueryParameters(OpenTelemetry openTelemetry) { - return ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.jdbc.experimental.capture-query-parameters", false); + if (openTelemetry instanceof ExtendedOpenTelemetry) { + ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; + + DeclarativeConfigProperties instrumentationConfig = + extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig(); + + if (instrumentationConfig == null) { + return false; + } + + return instrumentationConfig + .getStructured("jdbc", empty()) + .getStructured("experimental", empty()) + .getBoolean("capture-query-parameters", false); + } else { + return ConfigPropertiesUtil.getBoolean( + "otel.instrumentation.jdbc.experimental.capture-query-parameters", false); + } } public static Instrumenter createStatementInstrumenter( @@ -51,8 +67,7 @@ static Instrumenter createStatementInstrumenter( openTelemetry, emptyList(), true, - ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.common.db-statement-sanitizer.enabled", true), + statementSanitizationEnabled(openTelemetry, true), captureQueryParameters); } @@ -126,6 +141,28 @@ private static boolean transactionEnabled(OpenTelemetry openTelemetry, boolean d } } + private static boolean statementSanitizationEnabled( + OpenTelemetry openTelemetry, boolean defaultEnabled) { + if (openTelemetry instanceof ExtendedOpenTelemetry) { + ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; + + DeclarativeConfigProperties instrumentationConfig = + extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig(); + + if (instrumentationConfig == null) { + return defaultEnabled; + } + + return instrumentationConfig + .getStructured("common", empty()) + .getStructured("db-statement-sanitizer", empty()) + .getBoolean("enabled", defaultEnabled); + } else { + return ConfigPropertiesUtil.getBoolean( + "otel.instrumentation.common.db-statement-sanitizer.enabled", defaultEnabled); + } + } + public static Instrumenter createTransactionInstrumenter( OpenTelemetry openTelemetry, boolean enabled) { return createTransactionInstrumenter(openTelemetry, emptyList(), enabled); From cebb7a5d3c96973d87534dcfc95c280c07cb088b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 3 Nov 2025 11:08:05 +0100 Subject: [PATCH 3/3] lint --- .../internal/JdbcInstrumenterFactory.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) 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 012c413667a8..607efe27213e 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 @@ -119,6 +119,25 @@ public static Instrumenter createTransactionInstrumenter( return createTransactionInstrumenter(openTelemetry, transactionEnabled(openTelemetry, false)); } + public static Instrumenter createTransactionInstrumenter( + OpenTelemetry openTelemetry, boolean enabled) { + return createTransactionInstrumenter(openTelemetry, emptyList(), enabled); + } + + public static Instrumenter createTransactionInstrumenter( + OpenTelemetry openTelemetry, + List> extractors, + boolean enabled) { + return Instrumenter.builder( + openTelemetry, INSTRUMENTATION_NAME, DbRequest::getOperation) + .addAttributesExtractor(SqlClientAttributesExtractor.builder(dbAttributesGetter).build()) + .addAttributesExtractor(TransactionAttributeExtractor.INSTANCE) + .addAttributesExtractor(ServerAttributesExtractor.create(netAttributesGetter)) + .addAttributesExtractors(extractors) + .setEnabled(enabled) + .buildInstrumenter(SpanKindExtractor.alwaysClient()); + } + private static boolean transactionEnabled(OpenTelemetry openTelemetry, boolean defaultEnabled) { if (openTelemetry instanceof ExtendedOpenTelemetry) { ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; @@ -163,24 +182,5 @@ private static boolean statementSanitizationEnabled( } } - public static Instrumenter createTransactionInstrumenter( - OpenTelemetry openTelemetry, boolean enabled) { - return createTransactionInstrumenter(openTelemetry, emptyList(), enabled); - } - - public static Instrumenter createTransactionInstrumenter( - OpenTelemetry openTelemetry, - List> extractors, - boolean enabled) { - return Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, DbRequest::getOperation) - .addAttributesExtractor(SqlClientAttributesExtractor.builder(dbAttributesGetter).build()) - .addAttributesExtractor(TransactionAttributeExtractor.INSTANCE) - .addAttributesExtractor(ServerAttributesExtractor.create(netAttributesGetter)) - .addAttributesExtractors(extractors) - .setEnabled(enabled) - .buildInstrumenter(SpanKindExtractor.alwaysClient()); - } - private JdbcInstrumenterFactory() {} }