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..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 @@ -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,30 @@ public final class JdbcInstrumenterFactory { private static final JdbcNetworkAttributesGetter netAttributesGetter = new JdbcNetworkAttributesGetter(); - public static boolean captureQueryParameters() { - return ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.jdbc.experimental.capture-query-parameters", false); + public static boolean captureQueryParameters(OpenTelemetry openTelemetry) { + 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( OpenTelemetry openTelemetry) { - return createStatementInstrumenter(openTelemetry, captureQueryParameters()); + return createStatementInstrumenter(openTelemetry, captureQueryParameters(openTelemetry)); } static Instrumenter createStatementInstrumenter( @@ -48,8 +67,7 @@ static Instrumenter createStatementInstrumenter( openTelemetry, emptyList(), true, - ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.common.db-statement-sanitizer.enabled", true), + statementSanitizationEnabled(openTelemetry, true), captureQueryParameters); } @@ -97,10 +115,8 @@ 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)); } public static Instrumenter createTransactionInstrumenter( @@ -122,5 +138,49 @@ public static Instrumenter createTransactionInstrumenter( .buildInstrumenter(SpanKindExtractor.alwaysClient()); } + 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); + } + } + + 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); + } + } + private JdbcInstrumenterFactory() {} }