opentelemetry-java icon indicating copy to clipboard operation
opentelemetry-java copied to clipboard

Move declarative config to permanent home

Open jack-berg opened this issue 8 months ago • 1 comments

Declarative config currently resides in the opentelemetry-sdk-extension-incubator.

As declarative config approaches stability, its time to find a permanent home for this functionality.

Some quirks:

  • It depends on jackson, YAML parsing libraries, which probably require that it to be opt in (as opposed to automatically bundled with a common dependency with opentelemetry-sdk.
  • It depends on ComponentLoader, SpiHelper for loading SPIs, which currently reside in opentelemetry-sdk-extensions-autoconfigure-spi
  • It depends on all core SDK packages, including opentelemetry-sdk-trace, opentelemetry-sdk-logs, opentelemetry-sdk-metrics, opentelemetry-sdk-common, and opentelemetry-sdk.
  • opentelemetry-sdk-extension-autoconfigure depends on it (currently with a compileOnly dependency to avoid cycle but we may want to revisit that)
  • It contains SdkConfigProvider, the config analog of SdkTracerProvider, SdkMeterProvider, SdkLoggerProvider. For symmetry, this should become part of OpenTelemetrySdk, which resides in opentelemetry-sdk.
  • ComponentProvider SPI plays a key role, also have DeclarativeConfigurationCustomizer SPI for customizing data model

jack-berg avatar Apr 22 '25 19:04 jack-berg

Proposal:

  • Move SpiHelper, ComponentLoader to opentelemetry-sdk-common. This will break the dependency cycle, and also solidifies ComponentLoader (not ClassLoader) as our defacto interface for loading SPIs, which makes it easier for exporters to load SPIs (#7181). Arguably, we should move these all the way to opentelemetry-context since we load ContextStorageProvider via SPI.
  • Introduce two new config artifacts
    • opentelemetry-sdk-config: Holds model classes, create operation, factories, SdkConfigProvider, ComponentProvider SPI, DeclarativeConfigurationCustomizer SPI. Depends on opentelemetry-sdk-trace, opentelemetry-sdk-metrics, opentelemetry-sdk-logs. opentelemetry-sdk depends on opentelemetry-sdk-config so OpenTelemetrySdk can (eventually) incorporate SdkConfigProvider. Notably, this means create needs to return alternative data structure since OpenTelemetrySdk isn't available.
    • opentelemetry-sdk-config-parse: Holds parse operation. Depends on jackson / YAML libraries required for parsing. Depends on opentelemetry-sdk-config.
  • opentelemetry-sdk-extension-autoconfigure depends on opentelemetry-sdk-config, opentelemetry-sdk-config-parse and holds the logic for invoking parse / create when OTEL_EXPERIMENTAL_CONFIG_FILE is set.

jack-berg avatar Apr 22 '25 20:04 jack-berg