diff --git a/custom/src/test/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProviderTest.java b/custom/src/test/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProviderTest.java index f04ac0ae..d62226f5 100644 --- a/custom/src/test/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProviderTest.java +++ b/custom/src/test/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProviderTest.java @@ -58,7 +58,8 @@ void defaultConfiguration() { void disableCustomResourceProvider() { Map userConfig = new HashMap<>(); userConfig.put("otel.java.disabled.resource.providers", "my.disabled.provider.Provider"); - Map config = propertiesCustomizer(DefaultConfigProperties.create(userConfig)); + Map config = + propertiesCustomizer(DefaultConfigProperties.createFromMap(userConfig)); String value = config.get("otel.java.disabled.resource.providers"); assertThat(value) .satisfies( @@ -73,7 +74,8 @@ void disableCustomResourceProvider() { void disableExperimentalRuntimeMetrics() { Map userConfig = new HashMap<>(); userConfig.put("otel.instrumentation.runtime-telemetry.emit-experimental-telemetry", "false"); - Map config = propertiesCustomizer(DefaultConfigProperties.create(userConfig)); + Map config = + propertiesCustomizer(DefaultConfigProperties.createFromMap(userConfig)); String value = config.get("otel.instrumentation.runtime-telemetry.emit-experimental-telemetry"); assertThat(value).isEqualTo("false"); } @@ -81,7 +83,7 @@ void disableExperimentalRuntimeMetrics() { @Test void ensureDefaultMetricTemporalityIsDelta() { Map config = - propertiesCustomizer(DefaultConfigProperties.create(new HashMap<>())); + propertiesCustomizer(DefaultConfigProperties.createFromMap(new HashMap<>())); String value = config.get("otel.exporter.otlp.metrics.temporality.preference"); assertThat(value).isEqualTo("DELTA"); } @@ -90,7 +92,8 @@ void ensureDefaultMetricTemporalityIsDelta() { void customizeMetricTemporalityPreference() { Map userConfig = new HashMap<>(); userConfig.put("otel.exporter.otlp.metrics.temporality.preference", "LOWMEMORY"); - Map config = propertiesCustomizer(DefaultConfigProperties.create(userConfig)); + Map config = + propertiesCustomizer(DefaultConfigProperties.createFromMap(userConfig)); String value = config.get("otel.exporter.otlp.metrics.temporality.preference"); assertThat(value).isEqualTo("LOWMEMORY"); } diff --git a/docs/release-notes/breaking-changes.md b/docs/release-notes/breaking-changes.md index 24e3257c..9657af61 100644 --- a/docs/release-notes/breaking-changes.md +++ b/docs/release-notes/breaking-changes.md @@ -28,4 +28,9 @@ Breaking changes can impact your applications, potentially disrupting normal ope % :::: % TEMPLATE END -No breaking changes. \ No newline at end of file +::::{dropdown} OpenAI instrumentation switched from openai-client to openai +In OpenTelemetry Java agent version 2.18.0, an `openai` instrumentation module was added. This conflicted with the `openai-client` instrumentation module that was implemented in the EDOT agent. Since the `openai` module is on by default, we switched off the `openai-client` instrumentation module (previously on by default). The functionality is broadly the same. +**Impact**
Small changes in span names and attributes expected. If the elastic specific `ELASTIC_OTEL_JAVA_INSTRUMENTATION_GENAI_EMIT_EVENTS` was previously set to true, this would no longer produce events. +**Action**
The equivalent of `ELASTIC_OTEL_JAVA_INSTRUMENTATION_GENAI_EMIT_EVENTS` is `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT`. If you want to revert entirely to the previous setup, turn off the upstream implementation and turn on the EDOT one. For example: `OTEL_INSTRUMENTATION_OPENAI=false` and `OTEL_INSTRUMENTATION_OPENAI_CLIENT=true` +View [PR #763](https://github.com/elastic/elastic-otel-java/pull/763). +:::: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 56089e14..3fc4eaf5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,11 +11,11 @@ opentelemetryProto = "1.3.2-alpha" # otel agent, we rely on the '*-alpha' and get the non-alpha dependencies transitively # updated from upstream agent with gradle/update-upstream.sh -opentelemetryJavaagentAlpha = "2.17.1-alpha" +opentelemetryJavaagentAlpha = "2.18.1-alpha" # otel contrib # updated from upstream agent with gradle/update-upstream.sh -opentelemetryContribAlpha = "1.46.0-alpha" +opentelemetryContribAlpha = "1.47.0-alpha" # otel semconv # updated from upstream agent with gradle/update-upstream.sh diff --git a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/OpenAiClientInstrumentationModule.java b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/OpenAiClientInstrumentationModule.java index cd5ae070..0381508a 100644 --- a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/OpenAiClientInstrumentationModule.java +++ b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/OpenAiClientInstrumentationModule.java @@ -22,6 +22,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.Collections; import java.util.List; @@ -41,4 +42,13 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("co.elastic.otel.openai"); } + + @Override + public boolean defaultEnabled(ConfigProperties config) { + // the upstream implementation - openai or openai-java - is used in preference to this + // you could disable that and enable this with + // OTEL_INSTRUMENTATION_OPENAI=false + // OTEL_INSTRUMENTATION_OPENAI_CLIENT=true + return false; + } } diff --git a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/ChatTest.java b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/ChatTest.java index 141cfa1c..a375e66b 100644 --- a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/ChatTest.java +++ b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/ChatTest.java @@ -85,9 +85,11 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +@Disabled class ChatTest { @RegisterExtension diff --git a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/EmbeddingsTest.java b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/EmbeddingsTest.java index 57e78f51..b7e97cc0 100644 --- a/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/EmbeddingsTest.java +++ b/instrumentation/openai-client-instrumentation/instrumentation-1.1/src/test/java/co/elastic/otel/openai/v1_1/EmbeddingsTest.java @@ -37,9 +37,11 @@ import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import java.util.Collections; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +@Disabled class EmbeddingsTest { @RegisterExtension static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();