Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ Extensions to the OpenTelemetry SDK.
|-------------------------------------------------------------------------------|------------------------------------------------------------------------------------|-----------------------------------------------------|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [SDK Autoconfigure](./sdk-extensions/autoconfigure) | Autoconfigure OpenTelemetry SDK from env vars, system properties, and SPI | `opentelemetry-sdk-extension-autoconfigure` | <!--VERSION_STABLE-->1.60.1<!--/VERSION_STABLE--> | [![Javadocs](https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure.svg)](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure) |
| [SDK Autoconfigure SPI](./sdk-extensions/autoconfigure-spi) | Service Provider Interface (SPI) definitions for autoconfigure | `opentelemetry-sdk-extension-autoconfigure-spi` | <!--VERSION_STABLE-->1.60.1<!--/VERSION_STABLE--> | [![Javadocs](https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure-spi.svg)](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-autoconfigure-spi) |
| [SDK Declarative Config](./sdk-extensions/jaeger-remote-sampler) | Declarative config implementation for YAML-based SDK configuration | `opentelemetry-sdk-extension-declarative-config` | TODO: add after first release | TODO: add after first release |
Comment thread
jack-berg marked this conversation as resolved.
Outdated
| [SDK Jaeger Remote Sampler Extension](./sdk-extensions/jaeger-remote-sampler) | Sampler which obtains sampling configuration from remote Jaeger server | `opentelemetry-sdk-extension-jaeger-remote-sampler` | <!--VERSION_STABLE-->1.60.1<!--/VERSION_STABLE--> | [![Javadocs](https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-sdk-extension-jaeger-remote-sampler.svg)](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-jaeger-remote-sampler) |
| [SDK Incubator](./sdk-extensions/incubator) | SDK incubator, including YAML based view configuration, LeakDetectingSpanProcessor | `opentelemetry-sdk-extension-incubator` | <!--VERSION_UNSTABLE-->1.60.1-alpha<!--/VERSION_UNSTABLE--> | [![Javadocs](https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-sdk-extension-incubator.svg)](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-extension-incubator) |
</details>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class NoSharedInternalCodeTest {
"opentelemetry-sdk-trace",
"opentelemetry-sdk-extension-autoconfigure",
"opentelemetry-sdk-extension-autoconfigure-spi",
"opentelemetry-sdk-extension-declarative-config",
"opentelemetry-sdk-extension-incubator",
"opentelemetry-sdk-extension-jaeger-remote-sampler",
"opentelemetry-exporter-otlp",
Expand Down
4 changes: 2 additions & 2 deletions api/incubator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ dependencies {
annotationProcessor("com.google.auto.value:auto-value")

// To use parsed config file as input for InstrumentationConfigUtilTest
testImplementation(project(":sdk-extensions:incubator"))
testImplementation(project(":sdk-extensions:declarative-config"))

testImplementation(project(":sdk:testing"))
testImplementation(project(":api:testing-internal"))
Expand All @@ -33,7 +33,7 @@ testing {
register<JvmTestSuite>("testConvertToModel") {
dependencies {
implementation("com.fasterxml.jackson.core:jackson-databind")
implementation(project(":sdk-extensions:incubator"))
implementation(project(":sdk-extensions:declarative-config"))
implementation(project(":sdk-extensions:autoconfigure"))
implementation("com.google.guava:guava")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.internal.ExtendedOpenTelemetrySdk;
import io.opentelemetry.sdk.internal.SdkConfigProvider;
import java.io.ByteArrayInputStream;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import static org.assertj.core.api.Assertions.assertThat;

import com.google.common.collect.ImmutableMap;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.YamlDeclarativeConfigProperties;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.YamlDeclarativeConfigProperties;
import io.opentelemetry.sdk.internal.SdkConfigProvider;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
import io.opentelemetry.api.incubator.config.ConfigProvider;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.internal.model.ExperimentalInstrumentationModel;
import io.opentelemetry.sdk.declarativeconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
import io.opentelemetry.sdk.declarativeconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
import io.opentelemetry.sdk.declarativeconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.internal.SdkConfigProvider;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/graal-incubating/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ dependencies {
implementation(project(":sdk:testing"))
implementation(project(":exporters:otlp:all"))
implementation(project(":api:incubator"))
implementation(project(":sdk-extensions:incubator"))
implementation(project(":sdk-extensions:declarative-config"))
}

// org.graalvm.buildtools.native plugin requires java 17+ as of version 0.11.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
Expand Down
8 changes: 5 additions & 3 deletions sdk-extensions/autoconfigure/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ dependencies {
api(project(":sdk-extensions:autoconfigure-spi"))

compileOnly(project(":api:incubator"))
compileOnly(project(":sdk-extensions:incubator"))
compileOnly(project(":sdk-extensions:declarative-config"))
// compileOnly(project(":sdk-extensions:incubator"))
Comment thread
jack-berg marked this conversation as resolved.
Outdated

annotationProcessor("com.google.auto.value:auto-value")

Expand Down Expand Up @@ -61,6 +62,7 @@ testing {
implementation(project(":sdk:trace-shaded-deps"))
implementation(project(":sdk-extensions:jaeger-remote-sampler"))
implementation(project(":sdk-extensions:incubator"))
implementation(project(":sdk-extensions:declarative-config"))

implementation("com.google.guava:guava")
implementation("io.opentelemetry.proto:opentelemetry-proto")
Expand All @@ -85,7 +87,7 @@ testing {
}
register<JvmTestSuite>("testIncubating") {
dependencies {
implementation(project(":sdk-extensions:incubator"))
implementation(project(":sdk-extensions:declarative-config"))
implementation(project(":exporters:logging"))
implementation(project(":exporters:otlp:all"))
implementation(project(":sdk:testing"))
Expand All @@ -98,7 +100,7 @@ testing {

register<JvmTestSuite>("testDeclarativeConfigSpi") {
dependencies {
implementation(project(":sdk-extensions:incubator"))
implementation(project(":sdk-extensions:declarative-config"))
implementation(project(":exporters:logging"))
implementation(project(":sdk:testing"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,20 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur

private static final Logger logger =
Logger.getLogger(AutoConfiguredOpenTelemetrySdkBuilder.class.getName());
private static final boolean INCUBATOR_AVAILABLE;
private static final boolean DECLARATIVE_CONFIG_AVAILABLE;

static {
boolean incubatorAvailable = false;
Comment thread
jack-berg marked this conversation as resolved.
Outdated
try {
Class.forName(
"io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration",
"io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration",
false,
AutoConfiguredOpenTelemetrySdkBuilder.class.getClassLoader());
incubatorAvailable = true;
} catch (ClassNotFoundException e) {
// Not available
}
INCUBATOR_AVAILABLE = incubatorAvailable;
DECLARATIVE_CONFIG_AVAILABLE = incubatorAvailable;
}

@Nullable private ConfigProperties config;
Expand Down Expand Up @@ -571,10 +571,10 @@ void configureSdk(
@Nullable
private static AutoConfiguredOpenTelemetrySdk maybeConfigureFromFile(
ConfigProperties config, ComponentLoader componentLoader) {
if (INCUBATOR_AVAILABLE) {
AutoConfiguredOpenTelemetrySdk sdk = IncubatingUtil.configureFromSpi(componentLoader);
if (DECLARATIVE_CONFIG_AVAILABLE) {
AutoConfiguredOpenTelemetrySdk sdk = DeclarativeConfigUtil.configureFromSpi(componentLoader);
if (sdk != null) {
logger.fine("Autoconfigured from SPI by opentelemetry-sdk-extension-incubator");
logger.fine("Autoconfigured from SPI by opentelemetry-sdk-extension-declarative-config");
return sdk;
}
}
Expand All @@ -591,11 +591,11 @@ private static AutoConfiguredOpenTelemetrySdk maybeConfigureFromFile(
return null;
}

if (!INCUBATOR_AVAILABLE) {
if (!DECLARATIVE_CONFIG_AVAILABLE) {
throw new ConfigurationException(
"Cannot autoconfigure from config file without opentelemetry-sdk-extension-incubator on the classpath");
"Cannot autoconfigure from config file without opentelemetry-sdk-extension-declarative-config on the classpath");
}
return IncubatingUtil.configureFromFile(logger, configurationFile, componentLoader);
return DeclarativeConfigUtil.configureFromFile(logger, configurationFile, componentLoader);
}

private void maybeRegisterShutdownHook(OpenTelemetrySdk openTelemetrySdk) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,25 @@
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import io.opentelemetry.common.ComponentLoader;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigResult;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfigResult;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfigurationProvider;
import io.opentelemetry.sdk.declarativeconfig.internal.model.OpenTelemetryConfigurationModel;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Logger;
import javax.annotation.Nullable;

/**
* Utilities for interacting with incubating components ({@code
* io.opentelemetry:opentelemetry-api-incubator} and {@code
* io.opentelemetry:opentelemetry-sdk-extension-incubator}), which are not guaranteed to be present
* on the classpath. For all methods, callers MUST first separately reflectively confirm that the
* incubator is available on the classpath.
* Utilities for interacting with ({@code
* io.opentelemetry:opentelemetry-sdk-extension-declarative-config}, which is not guaranteed to be
* present on the classpath. For all methods, callers MUST first separately reflectively confirm
* that the incubator is available on the classpath.
Comment thread
jack-berg marked this conversation as resolved.
Outdated
*/
final class IncubatingUtil {
final class DeclarativeConfigUtil {

private IncubatingUtil() {}
private DeclarativeConfigUtil() {}

static AutoConfiguredOpenTelemetrySdk configureFromFile(
Logger logger, String configurationFile, ComponentLoader componentLoader) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void configFile(@TempDir Path tempDir) throws IOException {
assertThatThrownBy(() -> AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).build())
.isInstanceOf(ConfigurationException.class)
.hasMessage(
"Cannot autoconfigure from config file without opentelemetry-sdk-extension-incubator on the classpath");
"Cannot autoconfigure from config file without opentelemetry-sdk-extension-declarative-config on the classpath");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

package io.opentelemetry.sdk.autoconfigure;

import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.declarativeconfig.DeclarativeConfigurationProvider;
import io.opentelemetry.sdk.declarativeconfig.internal.model.OpenTelemetryConfigurationModel;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;

Expand Down
28 changes: 28 additions & 0 deletions sdk-extensions/declarative-config/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Declarative Configuration

The [declarative configuration interface](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/README.md#declarative-configuration) allows for YAML based file configuration of `OpenTelemetrySdk`.

Usage:

```shell
File yamlConfigFile = new File("/path/to/config.yaml");
OpenTelemetrySdk openTelemetrySdk;
try (FileInputStream yamlConfigFileInputStream = new FileInputStream("/path/to/config.yaml")) {
openTelemetrySdk = DeclarativeConfiguration.parseAndCreate(yamlConfigFileInputStream).getSdk();
}
// ...proceed with application after successful initialization of OpenTelemetrySdk
```

Notes:
* Environment variable substitution is supported as [defined in the spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/data-model.md#environment-variable-substitution)
* Customization is limited to customizing the in-memory config model, or exporters. See `DeclarativeConfigurationCustomizer` SPI for details.
* Custom SDK extension components which reference the [ComponentProvider](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java) SPI can be referenced in declarative configuration. Supported types include:
* `Resource`
* `SpanExporter`
* `MetricExporter`
* `LogRecordExporter`
* `SpanProcessor`
* `LogRecordProcessor`
* `TextMapPropagator`
* `Sampler`
* You can use declarative configuration with [autoconfigure](https://opentelemetry.io/docs/languages/java/configuration/#declarative-configuration) to specify a configuration file via environment variable, e.g. `OTEL_CONFIG_FILE=/path/to/config.yaml`.
Loading
Loading