1414using Microsoft . Extensions . DependencyInjection ;
1515using Microsoft . Extensions . Logging ;
1616using OpenTelemetry . Exporter ;
17- using OpenTelemetry . Logs ;
1817using OpenTelemetry . Metrics ;
1918using OpenTelemetry . Resources ;
2019
@@ -151,11 +150,11 @@ internal static MeterProviderBuilder WithElasticDefaultsCore(
151150
152151 static void ConfigureBuilder ( MeterProviderBuilder builder , BuilderState builderState , IServiceCollection ? services )
153152 {
154- const string loggingProviderName = nameof ( MeterProviderBuilder ) ;
153+ const string meterProviderBuilderName = nameof ( MeterProviderBuilder ) ;
155154 var components = builderState . Components ;
156155 var logger = components . Logger ;
157156
158- logger . LogConfiguringBuilder ( loggingProviderName , builderState . InstanceIdentifier ) ;
157+ logger . LogConfiguringBuilder ( meterProviderBuilderName , builderState . InstanceIdentifier ) ;
159158
160159 builder . ConfigureResource ( r => r . WithElasticDefaults ( builderState , services ) ) ;
161160
@@ -167,20 +166,17 @@ static void ConfigureBuilder(MeterProviderBuilder builder, BuilderState builderS
167166 o . TemporalityPreference = MetricReaderTemporalityPreference . Delta ) ) ;
168167
169168#if NET9_0_OR_GREATER
170- // On .NET 9, the contrib HTTP instrumentation is no longer required. If the dependency exists,
171- // it will be registered via the reflection-based assembly scanning.
169+ // .NET 9 introduced semantic convention compatible instrumentation in System.Net.Http so it's recommended to no longer
170+ // use the contrib instrumentation. We don't bring in the dependency for .NET 9+. However, if the consuming app depends
171+ // on it, it will be assumed that the user prefers it and therefore we allow the assembly scanning to add it. We don't
172+ // add the native meter to avoid doubling up on metrics.
172173 if ( SignalBuilder . InstrumentationAssemblyExists ( "OpenTelemetry.Instrumentation.Http.dll" ) )
173174 {
174- logger . LogHttpInstrumentationFound ( "metric" , nameof ( MeterProviderBuilder ) , builderState . InstanceIdentifier ) ;
175+ logger . LogHttpInstrumentationFound ( "metric" , meterProviderBuilderName , builderState . InstanceIdentifier ) ;
175176
176- // For native AOT scenarios, the reflection-based assembly scanning will not run.
177- // Therefore, we log a warning since no HTTP instrumentation will be automatically registered.
178- // In this scenario, the consumer must register the contrib instrumentation manually, or
179- // remove the dependency so that the native .NET 9 HTTP instrumentation source will be added
180- // instead.
181177 if ( ! RuntimeFeature . IsDynamicCodeSupported )
182178 logger . LogWarning ( "The OpenTelemetry.Instrumentation.Http.dll was found alongside the executing assembly. " +
183- "When using Native AOT publishing on .NET, the metric instrumentation is not registered automatically. Either register it manually, " +
179+ "When using Native AOT publishing on .NET, the metrics instrumentation is not registered automatically. Either register it manually, " +
184180 "or remove the dependency so that the native `System.Net.Http` instrumentation (available in .NET 9) is observed instead." ) ;
185181 }
186182 else
@@ -208,12 +204,7 @@ static void ConfigureBuilder(MeterProviderBuilder builder, BuilderState builderS
208204 {
209205 AddMeterWithLogging ( builder , logger , "System.Runtime" , builderState . InstanceIdentifier ) ;
210206 }
211- #else
212- AddWithLogging ( builder , logger , "HTTP" , b => b . AddHttpClientInstrumentation ( ) , builderState . InstanceIdentifier ) ;
213- AddWithLogging ( builder , logger , "Runtime" , b => b . AddRuntimeInstrumentation ( ) , builderState . InstanceIdentifier ) ;
214207#endif
215- // We explicity include this dependency and add it, since the current curated metric dashboard requires the memory metric.
216- AddWithLogging ( builder , logger , "Process" , b => b . AddProcessInstrumentation ( ) , builderState . InstanceIdentifier ) ;
217208
218209 if ( SignalBuilder . InstrumentationAssemblyExists ( "OpenTelemetry.Instrumentation.AspNetCore.dll" ) )
219210 {
@@ -254,12 +245,5 @@ static void AddMeterWithLogging(MeterProviderBuilder builder, ILogger logger, st
254245 builder . AddMeter ( meterName ) ;
255246 logger . LogMeterAdded ( meterName , builderIdentifier ) ;
256247 }
257-
258- [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
259- static void AddWithLogging ( MeterProviderBuilder builder , ILogger logger , string name , Action < MeterProviderBuilder > add , string builderIdentifier )
260- {
261- add . Invoke ( builder ) ;
262- logger . LogAddedInstrumentation ( name , nameof ( MeterProviderBuilder ) , builderIdentifier ) ;
263- }
264248 }
265249}
0 commit comments