Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.instrumentation.api.incubator.config;

/**
* The instrumentation mode to use when configuring instrumentations via declarative configuration.
*/
public enum InstrumentationMode {
/** Most instrumentations are enabled and configured with their default settings. */
DEFAULT,
/** All instrumentations are disabled by default. */
NONE;

public static InstrumentationMode from(String mode) {
switch (mode) {
case "none":
return InstrumentationMode.NONE;
case "default":
return InstrumentationMode.DEFAULT;
default:
throw new IllegalArgumentException("Unknown instrumentation mode: " + mode);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics;
import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetricsBuilder;
Expand All @@ -20,7 +21,9 @@ private RuntimeMetricsConfigUtil() {}

@Nullable
public static RuntimeMetrics configure(
RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry, String instrumentationMode) {
RuntimeMetricsBuilder builder,
OpenTelemetry openTelemetry,
InstrumentationMode instrumentationMode) {
/*
By default, don't use any JFR metrics. May change this once semantic conventions are updated.
If enabled, default to only the metrics not already covered by runtime-telemetry-java8
Expand All @@ -33,7 +36,7 @@ public static RuntimeMetrics configure(
.getBoolean("enabled", false)) {
// default configuration
} else if (DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "runtime_telemetry")
.getBoolean("enabled", instrumentationMode.equals("default"))) {
.getBoolean("enabled", instrumentationMode.equals(InstrumentationMode.DEFAULT))) {
// This only uses metrics gathered by JMX
builder.disableAllFeatures();
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ plugins {
}

dependencies {
implementation(project(":instrumentation-api"))
implementation(project(":instrumentation-api-incubator"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.runtimemetrics.java8.internal;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics;
import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetricsBuilder;
Expand All @@ -20,9 +21,11 @@ private RuntimeMetricsConfigUtil() {}

@Nullable
public static RuntimeMetrics configure(
RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry, String instrumentationMode) {
RuntimeMetricsBuilder builder,
OpenTelemetry openTelemetry,
InstrumentationMode instrumentationMode) {
if (!DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "runtime_telemetry")
.getBoolean("enabled", instrumentationMode.equals("default"))) {
.getBoolean("enabled", instrumentationMode.equals(InstrumentationMode.DEFAULT))) {
// nothing is enabled
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package io.opentelemetry.instrumentation.spring.autoconfigure.internal;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import org.springframework.core.env.Environment;

/**
Expand All @@ -28,25 +28,20 @@ public static boolean isDeclarativeConfig(Environment environment) {
return environment.getProperty("otel.file_format", String.class) != null;
}

public static boolean isDefaultEnabled(Environment environment) {
public static InstrumentationMode getInstrumentationMode(Environment environment) {
if (isDeclarativeConfig(environment)) {
String mode =
environment.getProperty(
"otel.instrumentation/development.java.spring_starter.instrumentation_mode",
String.class,
"default");

switch (mode) {
case "none":
return false;
case "default":
return true;
default:
throw new ConfigurationException("Unknown instrumentation mode: " + mode);
}
return InstrumentationMode.from(mode);
} else {
return environment.getProperty(
"otel.instrumentation.common.default-enabled", Boolean.class, true);
"otel.instrumentation.common.default-enabled", Boolean.class, true)
? InstrumentationMode.DEFAULT
: InstrumentationMode.NONE;
}
}

Expand Down Expand Up @@ -81,10 +76,7 @@ public static boolean isInstrumentationEnabled(
if (explicit != null) {
return explicit;
}
if (!defaultValue) {
return false;
}
return isDefaultEnabled(environment);
return defaultValue && getInstrumentationMode(environment).equals(InstrumentationMode.DEFAULT);
}

private static String getPropertyName(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RuntimeMetricsConfigUtil;
import javax.annotation.Nullable;
Expand All @@ -28,7 +29,7 @@ public int minJavaVersion() {

@Nullable
@Override
public AutoCloseable start(OpenTelemetry openTelemetry, String instrumentationMode) {
public AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationMode instrumentationMode) {
logger.debug("Use runtime metrics instrumentation for Java 17+");
return RuntimeMetricsConfigUtil.configure(
RuntimeMetrics.builder(openTelemetry), openTelemetry, instrumentationMode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics;
import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.RuntimeMetricsConfigUtil;
import javax.annotation.Nullable;
Expand All @@ -28,7 +29,7 @@ public int minJavaVersion() {

@Nullable
@Override
public AutoCloseable start(OpenTelemetry openTelemetry, String instrumentationMode) {
public AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationMode instrumentationMode) {
logger.debug("Use runtime metrics instrumentation for Java 8");
return RuntimeMetricsConfigUtil.configure(
RuntimeMetrics.builder(openTelemetry), openTelemetry, instrumentationMode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.EarlyConfig;
import java.util.Comparator;
import java.util.Optional;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -57,19 +56,13 @@ public void handleApplicationReadyEvent(ApplicationReadyEvent event) {

if (metricsProvider.isPresent()) {
this.closeable =
metricsProvider.get().start(openTelemetry, instrumentationMode(openTelemetry));
metricsProvider
.get()
.start(
openTelemetry,
EarlyConfig.getInstrumentationMode(applicationContext.getEnvironment()));
} else {
logger.debug("No runtime metrics instrumentation available for Java {}", version);
}
}

private static String instrumentationMode(OpenTelemetry openTelemetry) {
String mode =
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "spring_starter")
.getString("instrumentation_mode", "default");
if (!mode.equals("default") && !mode.equals("none")) {
throw new ConfigurationException("Unknown instrumentation mode: " + mode);
}
return mode;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import javax.annotation.Nullable;

/**
Expand All @@ -18,5 +19,5 @@ public interface RuntimeMetricsProvider {
int minJavaVersion();

@Nullable
AutoCloseable start(OpenTelemetry openTelemetry, String instrumentationMode);
AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationMode instrumentationMode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,20 @@
package io.opentelemetry.javaagent.tooling.config;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.InstrumentationMode;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;

public final class AgentConfig {

public static boolean isDebugModeEnabled(ConfigProperties config) {
return config.getBoolean("otel.javaagent.debug", false);
}

public static String instrumentationMode() {
String mode =
public static InstrumentationMode instrumentationMode() {
return InstrumentationMode.from(
DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent")
.getString("instrumentation_mode", "default");
if (!mode.equals("default") && !mode.equals("none")) {
throw new ConfigurationException("Unknown instrumentation mode: " + mode);
}
return mode;
.getString("instrumentation_mode", "default"));
}

private AgentConfig() {}
Expand Down
Loading