Opentelemetry-dotnet: AddCollector cause exception on versions higher than 253

Created on 6 May 2020  路  13Comments  路  Source: open-telemetry/opentelemetry-dotnet

Describe your environment. Describe any aspect of your environment relevant to the problem:

  • SDK version: (nuget versions of the all the relevant packages)
    <PackageReference Include="OpenTelemetry" Version="0.2.0-alpha.253" />
    <PackageReference Include="OpenTelemetry.Collector.AspNetCore" Version="0.2.0-alpha.253" />
    <PackageReference Include="OpenTelemetry.Collector.Dependencies" Version="0.2.0-alpha.253" />
    <PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="0.2.0-alpha.253" />
    <PackageReference Include="OpenTelemetry.Hosting" Version="0.2.0-alpha.253" />
  • .NET runtime version (.NET or .NET Core, TargetFramework in the .csproj file): netcoreapp3.1
  • Platform and OS version: Windows and Linux

If you're reporting a problem with a specific version of a library in this repo, please check whether the problem has been fixed on master.

Steps to reproduce.
Update OpenTelemetry package to any version higher than 253, run an application.

What is the expected behavior?
The application starts.

What is the actual behavior?

Method not found: 'OpenTelemetry.Trace.Configuration.TracerBuilder OpenTelemetry.Trace.Configuration.TracerBuilder.AddCollector(System.Func`2<OpenTelemetry.Trace.Tracer,!!0>)'.

with a stacktrace

   at OpenTelemetry.Trace.Configuration.TracerBuilderExtensions.AddRequestCollector(TracerBuilder builder)
   at Identity.Infrastructure.ServiceCollectionExtensions.<>c__DisplayClass0_0.<AddTracing>b__0(TracerBuilder builder) in E:\Projects\Identity\Infrastructure\ServiceCollectionExtensions.cs:line 30
   at OpenTelemetry.Trace.Configuration.TracerFactory.Create(Action`1 configure)
   at Microsoft.Extensions.DependencyInjection.OpenTelemetryServicesExtensions.<>c__DisplayClass1_0.<AddOpenTelemetry>b__0()
   at Microsoft.Extensions.DependencyInjection.OpenTelemetryServicesExtensions.<>c__DisplayClass3_0.<AddOpenTelemetry>b__0(IServiceProvider s)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at OpenTelemetry.Hosting.Implementation.TelemetryFactoryHostedService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Hosting.HostedServiceExecutor.<>c__DisplayClass3_0.<StartAsync>b__0(IHostedService service)
   at Microsoft.AspNetCore.Hosting.HostedServiceExecutor.<ExecuteAsync>d__5.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Hosting.WebHost.<StartAsync>d__27.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.<RunAsync>d__5.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.<RunAsync>d__5.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.<RunAsync>d__4.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
   at Identity.Program.Main(String[] args) in E:\Projects\Identity\Program.cs:line 12

Additional context.
Here's my configuration:

            services.AddOpenTelemetry(builder =>
            {
                builder.UseJaeger(options =>
                    {
                        options.ServiceName = serviceName;
                        options.AgentHost = agentHost;
                        options.AgentPort = agentPort;
                    })
                    .AddRequestCollector()
                    .AddDependencyCollector()
                    .SetResource(Resources.CreateServiceResource(serviceName))
                    .SetSampler(new AlwaysOnSampler());
            });
bug

All 13 comments

Can you get the latest version 277 to see if you are having issues still?

still a problem here.
worked previously with .227
I have consolidated to .253 as @kirillta

It appears that there is a mix of versioning across the various packages. eg .Hosting has latest of .258; Collector.AspNetCore is .253
Feels like the whole set should be rebuilt against latest?

Ah, sorry this is due to my refactoring and poor communication. We went through and did some renames to meet spec or to better communicate intent.

Try the following:

    <PackageReference Include="OpenTelemetry" Version="0.2.0-alpha.277" />
    <PackageReference Include="OpenTelemetry.Adapter.AspNetCore" Version="0.2.0-alpha.277" />
    <PackageReference Include="OpenTelemetry.Adapter.Dependencies" Version="0.2.0-alpha.277" />
    <PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="0.2.0-alpha.277" />
    <PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="0.2.0-alpha.277" />
services.AddOpenTelemetry(builder =>
            {
                builder.UseJaeger(options =>
                    {
                        options.ServiceName = serviceName;
                        options.AgentHost = agentHost;
                        options.AgentPort = agentPort;
                    })
                    .AddRequestAdapter()
                    .AddDependencyAdapter()
                    .SetResource(Resources.CreateServiceResource(serviceName))
                    .SetSampler(new AlwaysOnSampler());
            });

We are considering adding a meta-package #625 which would have minimized the need of transparency of this type of change. Of course, besides the breaking code changes, which would have indicated that a major change has happened.

@longility I don't see updates on MyGet, 253 is still the last consolidated version

Ahhh, makes sense.
This is the point of "alpha" after all :)

@kirillta I forgot to emphasize, we made changes to names of packages. I assume you just updated the version numbers or looking at version numbers for the current packages only. Can you update the package name as well?

OpenTelemetry.Hosting -> OpenTelemetry.Extensions.Hosting
OpenTelemetry.Collector.AspNetCore -> OpenTelemetry.Adapter.AspNetCore
OpenTelemetry.Collector.Dependencies -> OpenTelemetry.Adapter.Dependencies

dotnet seems to be quite a bit behind the others (they've gone beta) and there doesn't seem to be much traction on the milestone issues. I understand "resourcing" for this kind of thing is hard. Do you know if there is "a plan"?

I have some small things in the "perf" area I plan to PR as some small contribution

Now it works. Thanks!

dotnet seems to be quite a bit behind the others (they've gone beta) and there doesn't seem to be much traction on the milestone issues. I understand "resourcing" for this kind of thing is hard. Do you know if there is "a plan"?

I have some small things in the "perf" area I plan to PR as some small contribution

We discussed this in SIG meeting, but sharing for your info:

We delayed beta so as to align .NET platform itself with Open Telemetry. There is another major breaking change coming as we are replacing Span/Tracer with .NET Bcl classes like Activity, ActivitySource etc. Some details are in the below blog post, but expect a lot more info on this over the next few days.
https://medium.com/opentelemetry/opentelemetry-net-sdk-progress-3a63dcdc6cb0

You can also expect to see milestones redefined and tied to specific dates as well soon.

Thank you for taking the time.
I should have found that for myself
That looks really good. Would I be right in thinking that that will be on the dotnet5 timeline? Any thoughts about what happens in the meantime?

I removed all Collector packages from the MyGet feed.

Closing issue, please reopen if there are more questions

@SergeyKanzhelev

I removed all Collector packages from the MyGet feed.

Closing issue, please reopen if there are more questions

Are these Collector packages supposed to be in Nuget still?

https://www.nuget.org/packages/OpenTelemetry.Collector.AspNetCore/0.2.0-alpha.179

Thanks @janaka - you're correct they should be removed from nuget.org too.

I've un-listed and added deprecated warnings/redirects to all of collector packages now.

Was this page helpful?
0 / 5 - 0 ratings