diff --git a/custom/build.gradle.kts b/custom/build.gradle.kts index d75f7807..3acbcdb1 100644 --- a/custom/build.gradle.kts +++ b/custom/build.gradle.kts @@ -37,6 +37,13 @@ dependencies { // exclude transitive dependency as it's provided through agent packaging exclude(group = "io.opentelemetry", module = "opentelemetry-sdk") } + implementation(libs.contribInferredSpans) { + // exclude transitive dependency as it's provided through agent packaging + exclude(group = "io.opentelemetry", module = "opentelemetry-sdk") + exclude(group = "io.opentelemetry", module = "opentelemetry-semconv") + exclude(group = "io.opentelemetry", module = "opentelemetry-sdk-extension-autoconfigure-spi") +} + testImplementation(libs.contribSpanStacktrace) // needs to be added in order to allow access to AgentListener interface diff --git a/custom/src/main/java/co/elastic/otel/dynamicconfig/CentralConfig.java b/custom/src/main/java/co/elastic/otel/dynamicconfig/CentralConfig.java index 17eff61e..9cee1555 100644 --- a/custom/src/main/java/co/elastic/otel/dynamicconfig/CentralConfig.java +++ b/custom/src/main/java/co/elastic/otel/dynamicconfig/CentralConfig.java @@ -21,6 +21,7 @@ import co.elastic.otel.compositesampling.DynamicCompositeParentBasedTraceIdRatioBasedSampler; import co.elastic.otel.dynamicconfig.internal.OpampManager; import co.elastic.otel.logging.AgentLog; +import io.opentelemetry.contrib.inferredspans.InferredSpans; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; import java.io.IOException; @@ -130,6 +131,7 @@ public static class Configs { new DeactivateInstrumentations(), new LoggingLevel(), new SamplingRate(), + new InferSpans(), new PollingInterval()) .collect(Collectors.toMap(ConfigOption::getConfigName, option -> option)); } @@ -314,6 +316,22 @@ void update(String configurationValue, OpampManager opampManager) } } + public static final class InferSpans extends ConfigOption { + InferSpans() { + super("infer_spans", "true"); + } + + @Override + void update(String configurationValue, OpampManager opampManager) + throws IllegalArgumentException { + // TODO when setProfilerInterval() returns the old value, use that for 'true' + InferredSpans.setProfilerInterval( + configurationValue.equals("true") + ? Duration.ofSeconds(5) + : Duration.ofSeconds(Integer.MAX_VALUE)); + } + } + public static final class PollingInterval extends ConfigOption { PollingInterval() { super("opamp_polling_interval", "30s"); diff --git a/custom/src/main/java/co/elastic/otel/dynamicconfig/internal/OpampManager.java b/custom/src/main/java/co/elastic/otel/dynamicconfig/internal/OpampManager.java index d9dc2056..6adf5973 100644 --- a/custom/src/main/java/co/elastic/otel/dynamicconfig/internal/OpampManager.java +++ b/custom/src/main/java/co/elastic/otel/dynamicconfig/internal/OpampManager.java @@ -21,8 +21,8 @@ import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonReader; import com.dslplatform.json.MapConverter; -import io.opentelemetry.opamp.client.internal.OpampClient; -import io.opentelemetry.opamp.client.internal.OpampClientBuilder; +import io.opentelemetry.opamp.client.OpampClient; +import io.opentelemetry.opamp.client.OpampClientBuilder; import io.opentelemetry.opamp.client.internal.connectivity.http.OkHttpSender; import io.opentelemetry.opamp.client.internal.request.delay.PeriodicDelay; import io.opentelemetry.opamp.client.internal.request.delay.RetryPeriodicDelay; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d1787ce8..374b544c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ opentelemetryJavaagentAlpha = "2.20.1-alpha" # otel contrib # updated from upstream agent with gradle/update-upstream.sh -opentelemetryContribAlpha = "1.49.0-alpha" +opentelemetryContribAlpha = "1.50.0-alpha" # otel semconv # updated from upstream agent with gradle/update-upstream.sh