Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0d1e68b
Phase 1 declarative configuration implementation
stevejgordon Jun 9, 2026
216be4f
Formatting and markdown linting
stevejgordon Jun 17, 2026
acda79a
Apply EXPOSE_EXPERIMENTAL_FEATURES
stevejgordon Jun 17, 2026
3293c2b
Minor tweaks
stevejgordon Jun 17, 2026
854ec49
Add some additional tests
stevejgordon Jun 17, 2026
0048ae7
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
4cd240d
Update docs/diagnostics/experimental-apis/OTEL1006.md
stevejgordon Jun 18, 2026
b355b55
Update src/OpenTelemetry.Configuration.Declarative/OpenTelemetry.Conf…
stevejgordon Jun 18, 2026
d8d5c3c
Update docs/diagnostics/experimental-apis/OTEL1006.md
stevejgordon Jun 18, 2026
27123de
Update src/OpenTelemetry.Configuration.Declarative/Internal/Diagnosti…
stevejgordon Jun 18, 2026
606de0a
Update src/OpenTelemetry.Configuration.Declarative/Internal/FilePath.cs
stevejgordon Jun 18, 2026
6905833
Update src/OpenTelemetry.Configuration.Declarative/Internal/Model/Con…
stevejgordon Jun 18, 2026
f179a52
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
d1a357b
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
8a00b12
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
b97ba4a
Update src/OpenTelemetry.Configuration.Declarative/Internal/Pipeline/…
stevejgordon Jun 18, 2026
40ae35f
Update src/OpenTelemetry.Configuration.Declarative/Internal/Pipeline/…
stevejgordon Jun 18, 2026
4e5ce6a
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
b459ccc
Update src/OpenTelemetry.Configuration.Declarative/Internal/Yaml/Envi…
stevejgordon Jun 18, 2026
174d1e4
Update src/OpenTelemetry.Configuration.Declarative/README.md
stevejgordon Jun 18, 2026
894aa7c
Review feedback
stevejgordon Jun 18, 2026
2eaa8f6
Review feedback
stevejgordon Jun 22, 2026
e6bda43
Update supported file_format versions
stevejgordon Jun 22, 2026
f0be9f8
Sort Directory.Packages.props
stevejgordon Jun 22, 2026
aa8ee88
Update Directory.Packages.props
stevejgordon Jun 29, 2026
ee74af7
Merge branch 'main' into declarative-config-part-1
stevejgordon Jun 29, 2026
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
2 changes: 2 additions & 0 deletions .github/security-insights.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ repository:
comment: OpenTelemetry.Api NuGet package distributed from NuGet.org.
- uri: https://www.nuget.org/packages/OpenTelemetry.Api.ProviderBuilderExtensions
comment: OpenTelemetry.Api.ProviderBuilderExtensions NuGet package distributed from NuGet.org.
- uri: https://www.nuget.org/packages/OpenTelemetry.Configuration.Declarative
comment: OpenTelemetry.Configuration.Declarative NuGet package distributed from NuGet.org.
- uri: https://www.nuget.org/packages/OpenTelemetry.Exporter.Console
comment: OpenTelemetry.Exporter.Console NuGet package distributed from NuGet.org.
- uri: https://www.nuget.org/packages/OpenTelemetry.Exporter.InMemory
Expand Down
13 changes: 9 additions & 4 deletions Directory.Packages.props
Comment thread
martincostello marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
-->
<ItemGroup>
<!-- Default to latest versions for all TFMs -->
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="[10.0.0,)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[10.0.0,)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[10.0.0,)" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Abstractions" Version="[10.0.0,)" />
Expand All @@ -20,20 +21,23 @@
</ItemGroup>
<!-- Version overrides for specific netX.0 TFMs -->
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageVersion Update="Microsoft.Extensions.Configuration" Version="[8.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[8.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[8.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Diagnostics.Abstractions" Version="[8.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Hosting.Abstractions" Version="[8.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Logging.Configuration" Version="[8.0.0,)" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageVersion Update="Microsoft.Extensions.Configuration" Version="[9.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[9.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[9.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Diagnostics.Abstractions" Version="[9.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Hosting.Abstractions" Version="[9.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Logging.Configuration" Version="[9.0.0,)" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0'">
<PackageVersion Update="Microsoft.Extensions.Configuration" Version="[10.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[10.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[10.0.0,)" />
<PackageVersion Update="Microsoft.Extensions.Diagnostics.Abstractions" Version="[10.0.0,)" />
Expand Down Expand Up @@ -98,12 +102,12 @@
<PackageVersion Include="FSharp.Core" Version="10.1.301" />
<PackageVersion Include="FsCheck.Xunit" Version="3.3.3" />
<PackageVersion Include="GitHubActionsTestLogger" Version="3.0.4" />
<PackageVersion Include="Grpc.AspNetCore" Version="2.67.0" />
<PackageVersion Include="Grpc.AspNetCore.Server" Version="2.67.0" />
<PackageVersion Include="Grpc.Tools" Version="2.68.1" />
<PackageVersion Include="Google.Protobuf" Version="3.35.1" />
<PackageVersion Include="Grpc" Version="2.46.6" />
<PackageVersion Include="Grpc.AspNetCore" Version="2.67.0" />
<PackageVersion Include="Grpc.AspNetCore.Server" Version="2.67.0" />
<PackageVersion Include="Grpc.Net.Client" Version="2.67.0" />
<PackageVersion Include="Grpc.Tools" Version="2.68.1" />
<PackageVersion Include="JunitXml.TestLogger" Version="8.0.0" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.12.0-beta1.25218.8" />
Expand All @@ -114,8 +118,8 @@
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Telemetry.Abstractions" Version="9.10.0" />
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" Condition="$(OS) != 'Windows_NT'" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" Condition="$(OS) != 'Windows_NT'" />
<PackageVersion Include="MinVer" Version="7.0.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.15.1-beta.1" />
Expand All @@ -129,6 +133,7 @@
<PackageVersion Include="Verify.Xunit" Version="31.12.5" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="[2.8.2,)" />
<PackageVersion Include="YamlDotNet" Version="18.1.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
Expand Down
3 changes: 3 additions & 0 deletions OpenTelemetry.slnx
Comment thread
martincostello marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@
</Folder>
<Project Path="src/OpenTelemetry.Api.ProviderBuilderExtensions/OpenTelemetry.Api.ProviderBuilderExtensions.csproj" />
<Project Path="src/OpenTelemetry.Api/OpenTelemetry.Api.csproj" />
<Project Path="src/OpenTelemetry.Configuration.Declarative/OpenTelemetry.Configuration.Declarative.csproj" />
<Project Path="src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj" />
<Project Path="src/OpenTelemetry.Exporter.InMemory/OpenTelemetry.Exporter.InMemory.csproj" />
<Project Path="src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj" />
Expand All @@ -222,6 +223,8 @@
<Project Path="test/OpenTelemetry.Api.FuzzTests/OpenTelemetry.Api.FuzzTests.csproj" />
<Project Path="test/OpenTelemetry.Api.ProviderBuilderExtensions.Tests/OpenTelemetry.Api.ProviderBuilderExtensions.Tests.csproj" />
<Project Path="test/OpenTelemetry.Api.Tests/OpenTelemetry.Api.Tests.csproj" />
<Project Path="test/OpenTelemetry.Configuration.Declarative.FuzzTests/OpenTelemetry.Configuration.Declarative.FuzzTests.csproj" />
<Project Path="test/OpenTelemetry.Configuration.Declarative.Tests/OpenTelemetry.Configuration.Declarative.Tests.csproj" />
<Project Path="test/OpenTelemetry.Exporter.Console.Tests/OpenTelemetry.Exporter.Console.Tests.csproj" />
<Project Path="test/OpenTelemetry.Exporter.OpenTelemetryProtocol.FuzzTests/OpenTelemetry.Exporter.OpenTelemetryProtocol.FuzzTests.csproj" />
<Project Path="test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj" />
Expand Down
2 changes: 2 additions & 0 deletions build/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Maintainers (admins) are needed to merge PRs and for the push to NuGet.**
of the `1.9.0` release cycle they may only be released as `alpha` or
`beta`.

* `OpenTelemetry.Configuration.Declarative` - Declarative
configuration (experimental)
* `OpenTelemetry.Exporter.Prometheus.AspNetCore` - Defined by spec
(experimental)
* `OpenTelemetry.Exporter.Prometheus.HttpListener` - Defined by spec
Expand Down
192 changes: 192 additions & 0 deletions docs/diagnostics/experimental-apis/OTEL1006.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# OpenTelemetry .NET Diagnostic: OTEL1006

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not think that we need this at all. As long as we stays on the prerelease channels.
Especially alpha means that anything can change.

The experimental apis feature should be used to expose unstable public API in the already stable packages to indicate that some features will not work with stable releases.


## Overview

This is an Experimental API diagnostic covering the following APIs:

* `DeclarativeConfigurationBuilderExtensions.AddOpenTelemetryDeclarativeConfiguration`
* `OpenTelemetryBuilderDeclarativeConfigurationExtensions.UseDeclarativeConfiguration`
* `DeclarativeConfigurationException`

Experimental APIs may be changed or removed in the future.

## Details

The OpenTelemetry Specification defines a [declarative
configuration](https://opentelemetry.io/docs/languages/sdk-configuration/declarative-configuration/)
model that allows configuring the SDK from a YAML file rather than code or
environment variables. The `OpenTelemetry.Configuration.Declarative` package
provides a partial experimental implementation of this specification.

The APIs covered by this diagnostic wire a YAML configuration source into the
.NET `IConfiguration` pipeline so that OpenTelemetry SDK components (such as
resource detectors and the SDK-disabled flag) pick up values from the YAML file.

### `AddOpenTelemetryDeclarativeConfiguration`

Adds the declarative YAML source directly to an `IConfigurationBuilder`:

```csharp
// On HostApplicationBuilder (recommended):
builder.Configuration.AddOpenTelemetryDeclarativeConfiguration(); // reads OTEL_CONFIG_FILE
builder.Configuration.AddOpenTelemetryDeclarativeConfiguration("otel-config.yaml");

// On HostBuilder (inside ConfigureAppConfiguration):
hostBuilder.ConfigureAppConfiguration(b =>
b.AddOpenTelemetryDeclarativeConfiguration()); // reads OTEL_CONFIG_FILE
hostBuilder.ConfigureAppConfiguration(b =>
b.AddOpenTelemetryDeclarativeConfiguration("otel-config.yaml"));
Comment thread
martincostello marked this conversation as resolved.
```

### `UseDeclarativeConfiguration`

Wires the YAML source via `IOpenTelemetryBuilder`, detecting the host's
`IConfiguration` instance and inserting the source appropriately:

```csharp
services.AddOpenTelemetry()
.UseDeclarativeConfiguration() // reads OTEL_CONFIG_FILE
.WithTracing(b => b.AddSource("MyApp.*"));
```

### Recommended integration

| Host type | Preferred API |
| --- | --- |
| `HostApplicationBuilder` / `WebApplicationBuilder` | `builder.Configuration.AddOpenTelemetryDeclarativeConfiguration()` |
| Classic `HostBuilder` | `ConfigureAppConfiguration(b => b.AddOpenTelemetryDeclarativeConfiguration(...))` |
| Any host (alternative) | `services.AddOpenTelemetry().UseDeclarativeConfiguration()` |

**Pitfalls to avoid:**

* **`UseDeclarativeConfiguration()` requires `IConfiguration` to already be
registered** when it runs. If the host registers `IConfiguration` later, the
YAML source will not be visible to the SDK.
Comment thread
martincostello marked this conversation as resolved.
* **A second call to `UseDeclarativeConfiguration()` on the same
`IServiceCollection` is ignored.** Only the first file path applies; a later
call with a different path does not replace it (an EventSource warning is
emitted).

### Precedence

The YAML source is appended after all sources already registered at the time of
the call. It therefore takes precedence over earlier sources such as environment
variables and `appsettings.json`. Sources added after the call take precedence
over YAML values.

The settings supported in this package currently map to SDK code paths that read
directly from `IConfiguration`, so `services.Configure<T>()` /
`PostConfigure<T>()` delegates do not override them. To override these values in
code, add a higher-priority `IConfiguration` source after the YAML source.

We are exposing these APIs experimentally while the specification and .NET
integration model mature.

**TL;DR** We want to gather feedback on the usability and integration design
before committing to a stable API shape.

## Implementation notes

### `IOptions` vs direct `IConfiguration` reads

The two settings currently supported (`OTEL_SDK_DISABLED`,
`OTEL_RESOURCE_ATTRIBUTES`) are consumed by the SDK via direct `IConfiguration`
reads rather than the .NET `IOptions<T>` pipeline:

* `OTEL_SDK_DISABLED` is read before the provider is constructed to decide
whether to return a real provider or a no-op.
* `OTEL_RESOURCE_ATTRIBUTES` is read by the resource detector.

Using `IOptions<T>` would add startup validation and make code-level
`Configure<T>` / `PostConfigure<T>` overrides work at the Options layer, but the
practical benefit is small for these settings: values are consumed once at
startup and cannot change an already-constructed provider. The code-override
story is already covered by `IConfiguration` source ordering (adding a
higher-priority source after the YAML source).

If future settings use `IOptions<T>` internally, `PostConfigure<T>` would then
take precedence over YAML-supplied values, which is the expected .NET idiom
(code beats configuration).

### Runtime (dynamic) disabling

The `disabled` flag is evaluated once, when the provider is constructed. There
is no mechanism to flip a live provider from a real implementation to a no-op at
runtime. This matches the OTel specification (`OTEL_SDK_DISABLED` is read at
initialization only).

Once a real provider is built, its listener wiring is fixed. The closest
approximation is replacing the sampler with `AlwaysOff` at runtime, which still
leaves processors and exporters running. For runaway instrumentation, prefer
exporter timeouts, bounded batch queues, and process restart.

### Environment-variable substitution ordering

The OTel spec states that node types must be interpreted *after* environment
variable substitution.

This implementation parses YAML first (YamlDotNet RepresentationModel preserves
scalar literals without type conversion), applies substitution to those strings,
then interprets types explicitly (for example `bool.TryParse` for `disabled`).
Outcomes are semantically equivalent for supported scalar fields today, with a
stronger guarantee that env vars cannot inject YAML structure because
substitution runs on already-tokenised scalar nodes.

### Empty-string and null semantics

When an environment variable is unset and has no default, the spec replaces the
reference with an empty string, then applies YAML 1.2 Core Schema type
resolution - a plain empty scalar becomes `null`. Quoted empty strings remain
`""`.

All YAML 1.2 core schema null spellings - plain empty, `~`, `null`, `Null`, and
`NULL` - are treated as **present-null**. Quoted variants (e.g. `"null"`) remain
strings.

For scalar fields where the key is present but the value is unusable (malformed
node type, invalid parse), the parser selects **present-null** rather than
**absent**, because the key appeared in the document and `nullBehavior` applies
at Create time.

**Post-substitution null resolution:** because the spec requires that YAML type
resolution runs *after* substitution, a plain (unquoted) scalar whose
environment variable resolves to one of the null spellings (`null`, `Null`,
`NULL`, `~`) is treated as YAML null. For example:

```yaml
resource:
attributes:
- name: my.attr
value: ${MY_VAR} # plain scalar
```

If `MY_VAR=null` the attribute is skipped (same as writing `value: null`).
If you need the literal string `"null"`, use a quoted scalar: `value: "${MY_VAR}"`.
The `InvalidResourceAttribute` EventSource event (Event ID 3) is emitted when an
attribute is skipped for this reason.

### Resource attribute name validation

Names containing `,` or `=` are skipped and Event 3 is emitted; these characters
would corrupt the `key=value,key=value` flat format consumed by
`OtelEnvResourceDetector`. All other names that do not follow the OTel attribute
naming convention (`[a-zA-Z_][-a-zA-Z0-9_.]*`) are emitted verbatim and Event 22
(`ResourceAttributeNameNotCompliant`) is emitted as a warning. This is a
.NET-projection constraint: the specification accepts attribute names verbatim
because they build typed resource objects rather than serializing to the env-var
format.

### Empty configuration file

A file containing zero YAML documents is a no-op in overlay mode and does not
require a `file_format` field (unlike a non-empty document, which still
validates `file_format`). Event 23 (`EmptyConfigurationFile`) is emitted at
informational level so listeners can observe the intentional no-op.

## Provide feedback

Please provide feedback on [issue #6380](https://github.com/open-telemetry/opentelemetry-dotnet/issues/6380)
if you are using or evaluating declarative configuration in your application.

Any feedback will help inform decisions about when to expose the API as stable
and what the final surface should look like.
6 changes: 6 additions & 0 deletions docs/diagnostics/experimental-apis/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ Description: Environment variable context propagation

Details: [OTEL1005](./OTEL1005.md)

### OTEL1006

Description: Declarative configuration

Details: [OTEL1006](./OTEL1006.md)

## Inactive

Experimental APIs which have been released stable or removed:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#nullable enable

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is redundant. Nullable is already in shipped.

@martincostello martincostello Jun 30, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just a directive for the analyser to understand if the entries are nullable or not. If you removed it, when a new API that is unshipped is added to the file the line would be needed to be added again. It's not about whether nullable as a feature shipped.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should inherit this information from Shipped folder. It is not needed to duplicate this info. Not a blocker.

Microsoft.Extensions.Configuration.DeclarativeConfigurationBuilderExtensions
[OTEL1006]OpenTelemetry.Configuration.Declarative.DeclarativeConfigurationException
[OTEL1006]OpenTelemetry.Configuration.Declarative.DeclarativeConfigurationException.DeclarativeConfigurationException() -> void
[OTEL1006]OpenTelemetry.Configuration.Declarative.DeclarativeConfigurationException.DeclarativeConfigurationException(string! message) -> void
[OTEL1006]OpenTelemetry.Configuration.Declarative.DeclarativeConfigurationException.DeclarativeConfigurationException(string! message, System.Exception! innerException) -> void
OpenTelemetry.OpenTelemetryBuilderDeclarativeConfigurationExtensions
[OTEL1006]static Microsoft.Extensions.Configuration.DeclarativeConfigurationBuilderExtensions.AddOpenTelemetryDeclarativeConfiguration(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
[OTEL1006]static Microsoft.Extensions.Configuration.DeclarativeConfigurationBuilderExtensions.AddOpenTelemetryDeclarativeConfiguration(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! filePath) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
[OTEL1006]static OpenTelemetry.OpenTelemetryBuilderDeclarativeConfigurationExtensions.UseDeclarativeConfiguration(this OpenTelemetry.IOpenTelemetryBuilder! builder) -> OpenTelemetry.IOpenTelemetryBuilder!
[OTEL1006]static OpenTelemetry.OpenTelemetryBuilderDeclarativeConfigurationExtensions.UseDeclarativeConfiguration(this OpenTelemetry.IOpenTelemetryBuilder! builder, string! filePath) -> OpenTelemetry.IOpenTelemetryBuilder!
13 changes: 13 additions & 0 deletions src/OpenTelemetry.Configuration.Declarative/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Changelog

This file contains individual changes for the OpenTelemetry.Configuration.Declarative
package. For highlights and announcements covering all components see: [Release
Notes](../../RELEASENOTES.md).

## Unreleased
Comment thread
martincostello marked this conversation as resolved.

* Initial implementation of the `OpenTelemetry.Configuration.Declarative` package.
Adds declarative configuration (YAML) support for the OpenTelemetry .NET SDK,
accepting any `file_format: "1.x"` document (built against schema v1.1), with
support for `disabled` and `resource.attributes` / `resource.attributes_list`.
([#7413](https://github.com/open-telemetry/opentelemetry-dotnet/pull/7413))
Loading