diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 13a7aaa49097..778704a02f03 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -93,7 +94,6 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties // jmx properties don't have an "instrumentation" segment SPECIAL_MAPPINGS.put("java.jmx.enabled", "otel.jmx.enabled"); SPECIAL_MAPPINGS.put("java.jmx.config", "otel.jmx.config"); - SPECIAL_MAPPINGS.put("java.jmx.discovery.delay", "otel.jmx.discovery.delay"); SPECIAL_MAPPINGS.put("java.jmx.target_system", "otel.jmx.target.system"); } @@ -144,6 +144,22 @@ public Integer getInt(String name) { @Nullable @Override public Long getLong(String name) { + String fullPath = pathWithName(name); + + if (fullPath.equals("java.jmx.discovery.delay")) { + Duration duration = configProperties.getDuration("otel.jmx.discovery.delay"); + if (duration != null) { + return duration.toMillis(); + } + // If discovery delay has not been configured, have a peek at the metric export interval. + // It makes sense for both of these values to be similar. + Duration fallback = configProperties.getDuration("otel.metric.export.interval"); + if (fallback != null) { + return fallback.toMillis(); + } + return null; + } + return configProperties.getLong(resolvePropertyKey(name)); } diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java index 82bd2f60d0e6..18c3a907fa27 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java @@ -122,23 +122,36 @@ void testGeneralPeerServiceMapping() { @Test void testGetInt() { - DeclarativeConfigProperties config = createConfig("otel.jmx.discovery.delay", "5000"); + DeclarativeConfigProperties config = + createConfig("otel.instrumentation.aws-lambda.flush-timeout", "5000"); - assertThat( - config - .getStructured("java") - .getStructured("jmx") - .getStructured("discovery") - .getInt("delay")) + assertThat(config.getStructured("java").getStructured("aws_lambda").getInt("flush_timeout")) .isEqualTo(5000); } @Test void testGetLong() { - DeclarativeConfigProperties config = - createConfig("otel.instrumentation.aws-lambda.flush-timeout", "30000"); + assertThat( + createConfig("otel.instrumentation.aws-lambda.flush-timeout", "30000") + .getStructured("java") + .getStructured("aws_lambda") + .getLong("flush_timeout")) + .isEqualTo(30000L); - assertThat(config.getStructured("java").getStructured("aws_lambda").getLong("flush_timeout")) + // special case: duration string + assertThat( + createConfig("otel.jmx.discovery.delay", "30s") + .getStructured("java") + .getStructured("jmx") + .getStructured("discovery") + .getLong("delay")) + .isEqualTo(30000L); + assertThat( + createConfig("otel.metric.export.interval", "30s") + .getStructured("java") + .getStructured("jmx") + .getStructured("discovery") + .getLong("delay")) .isEqualTo(30000L); } diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 148986110699..6fdde2db0f2c 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -15,8 +15,6 @@ import io.opentelemetry.instrumentation.jmx.JmxTelemetryBuilder; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; @@ -32,14 +30,15 @@ public class JmxMetricInsightInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { - ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk); ExtendedDeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "jmx"); if (config.getBoolean("enabled", true)) { JmxTelemetryBuilder jmx = JmxTelemetry.builder(GlobalOpenTelemetry.get()) - .beanDiscoveryDelay(beanDiscoveryDelay(config, configProperties)); + .beanDiscoveryDelay( + Duration.ofMillis( + config.get("discovery").getLong("delay", Duration.ofMinutes(1).toMillis()))); config.getScalarList("config", String.class, emptyList()).stream() .map(Paths::get) @@ -73,16 +72,4 @@ private static void addClasspathRules(String target, JmxTelemetryBuilder builder Level.SEVERE, "Error while loading JMX configuration from classpath " + resource, e); } } - - private static Duration beanDiscoveryDelay( - ExtendedDeclarativeConfigProperties config, ConfigProperties configProperties) { - Long discoveryDelayMs = config.get("discovery").getLong("delay"); - if (discoveryDelayMs != null) { - return Duration.ofMillis(discoveryDelayMs); - } - - // If discovery delay has not been configured, have a peek at the metric export interval. - // It makes sense for both of these values to be similar. - return configProperties.getDuration("otel.metric.export.interval", Duration.ofMinutes(1)); - } } diff --git a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java index 5a5b04443d2e..bbe976063531 100644 --- a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java +++ b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.oshi; import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.AgentListener; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.reflect.Method; /** @@ -21,10 +21,11 @@ public class OshiMetricsInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { - ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk); - - boolean defaultEnabled = config.getBoolean("otel.instrumentation.common.default-enabled", true); - if (!config.getBoolean("otel.instrumentation.oshi.enabled", defaultEnabled)) { + boolean enabled = + DeclarativeConfigUtil.getInstrumentationConfig( + autoConfiguredSdk.getOpenTelemetrySdk(), "oshi") + .getBoolean("enabled", AgentConfig.instrumentationMode().equals("default")); + if (!enabled) { return; } diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java index 3a064418a590..ce34e2f28af5 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java @@ -6,11 +6,13 @@ package io.opentelemetry.javaagent.instrumentation.runtimemetrics.java8; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder; import io.opentelemetry.javaagent.tooling.BeforeAgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.instrument.Instrumentation; /** Installs the {@link JarAnalyzer}. */ @@ -19,21 +21,19 @@ public class JarAnalyzerInstaller implements BeforeAgentListener { @Override public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); - - boolean enabled = - config.getBoolean("otel.instrumentation.runtime-telemetry.package-emitter.enabled", false); - if (!enabled) { + OpenTelemetry openTelemetry = GlobalOpenTelemetry.get(); + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "runtime_telemetry"); + if (!config.get("package_emitter").getBoolean("enabled", false)) { return; } Instrumentation inst = InstrumentationHolder.getInstrumentation(); if (inst == null) { return; } - int jarsPerSecond = - config.getInt("otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second", 10); JarAnalyzer jarAnalyzer = - JarAnalyzer.create(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(), jarsPerSecond); + JarAnalyzer.create( + openTelemetry, config.get("package_emitter").getInt("jars_per_second", 10)); inst.addTransformer(jarAnalyzer); } }