Skip to content

Issue with Otlp exporter when configured using builder.Services.ConfigureOpenTelemetryTracerProvider  #4503

@vishweshbankwar

Description

@vishweshbankwar

Bug Report

Tested with 1.4.0 on .NET7.0

Symptom

A clear and concise description of what the bug is.
System.NotSupportedException: 'Services cannot be configured after ServiceProvider has been created.' exception is thrown when otlp exporter is configured using builder.Services.ConfigureOpenTelemetryTracerProvider alongside services.AddOpenTelemetry().WithTracing

What is the expected behavior?
Traces are exported to both console and otlp exporter.

What is the actual behavior?
Startup error

System.NotSupportedException
  HResult=0x80131515
  Message=Services cannot be configured after ServiceProvider has been created.
  Source=OpenTelemetry
  StackTrace:
   at OpenTelemetry.Trace.TracerProviderBuilderSdk.ConfigureServices(Action`1 configure) in /_/src/OpenTelemetry/Trace/Builder/TracerProviderBuilderSdk.cs:line 179
   at OpenTelemetry.Trace.OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.ConfigureServices(TracerProviderBuilder tracerProviderBuilder, Action`1 configure) in /_/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.cs:line 139
   at OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(TracerProviderBuilder builder, String name, Action`1 configure) in /_/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs:line 77
   at OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(TracerProviderBuilder builder) in /_/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs:line 37
   at Program.<>c.<<Main>$>b__0_1(IServiceProvider sp, TracerProviderBuilder builder) in C:\Users\vibankwa\source\repos\TestAzureMonitorDistro\TestAzureMonitorDistro\Program.cs:line 21
   at OpenTelemetry.Trace.OpenTelemetryDependencyInjectionTracingServiceCollectionExtensions.ConfigureTracerProviderBuilderCallbackWrapper.ConfigureBuilder(IServiceProvider serviceProvider, TracerProviderBuilder tracerProviderBuilder) in /_/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracingServiceCollectionExtensions.cs:line 83
   at OpenTelemetry.Trace.TracerProviderSdk..ctor(IServiceProvider serviceProvider, Boolean ownsServiceProvider) in /_/src/OpenTelemetry/Trace/TracerProviderSdk.cs:line 296
   at OpenTelemetry.Trace.TracerProviderBuilderBase.<>c.<.ctor>b__3_0(IServiceProvider sp) in /_/src/OpenTelemetry/Trace/Builder/TracerProviderBuilderBase.cs:line 59
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceLookup/CallSiteVisitor.cs:line 44
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceLookup/CallSiteRuntimeResolver.cs:line 92
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceLookup/CallSiteVisitor.cs:line 27
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceLookup/CallSiteRuntimeResolver.cs:line 30
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceProvider.cs:line 172
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) in /_/src/libraries/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentDictionary.cs:line 1152
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) in /_/src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceProvider.cs:line 131
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) in /_/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ServiceProviderServiceExtensions.cs:line 25
   at OpenTelemetry.Extensions.Hosting.Implementation.TelemetryHostedService.Initialize(IServiceProvider serviceProvider) in /_/src/OpenTelemetry.Extensions.Hosting/Implementation/TelemetryHostedService.cs:line 62
   at OpenTelemetry.Extensions.Hosting.Implementation.TelemetryHostedService.StartAsync(CancellationToken cancellationToken) in /_/src/OpenTelemetry.Extensions.Hosting/Implementation/TelemetryHostedService.cs:line 44
   at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__12.MoveNext() in /_/src/libraries/Microsoft.Extensions.Hosting/src/Internal/Host.cs:line 71
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext() in /_/src/libraries/Microsoft.Extensions.Hosting.Abstractions/src/HostingAbstractionsHostExtensions.cs:line 66
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext() in /_/src/libraries/Microsoft.Extensions.Hosting.Abstractions/src/HostingAbstractionsHostExtensions.cs:line 76
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host) in /_/src/libraries/Microsoft.Extensions.Hosting.Abstractions/src/HostingAbstractionsHostExtensions.cs:line 51
   at Program.<Main>$(String[] args) in 

Reproduce

Create a new ASP.NET Core app and add following lines

builder.Services.AddOpenTelemetry()
    .WithTracing(builder => builder.AddConsoleExporter());

builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddOtlpExporter());

The behavior is same with
builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddOtlpExporter());

Additional Context

Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions