14
14
using Microsoft . Extensions . DependencyInjection ;
15
15
using Microsoft . Extensions . Logging ;
16
16
using OpenTelemetry . Exporter ;
17
- using OpenTelemetry . Logs ;
18
17
using OpenTelemetry . Metrics ;
19
18
using OpenTelemetry . Resources ;
20
19
@@ -151,11 +150,11 @@ internal static MeterProviderBuilder WithElasticDefaultsCore(
151
150
152
151
static void ConfigureBuilder ( MeterProviderBuilder builder , BuilderState builderState , IServiceCollection ? services )
153
152
{
154
- const string loggingProviderName = nameof ( MeterProviderBuilder ) ;
153
+ const string meterProviderBuilderName = nameof ( MeterProviderBuilder ) ;
155
154
var components = builderState . Components ;
156
155
var logger = components . Logger ;
157
156
158
- logger . LogConfiguringBuilder ( loggingProviderName , builderState . InstanceIdentifier ) ;
157
+ logger . LogConfiguringBuilder ( meterProviderBuilderName , builderState . InstanceIdentifier ) ;
159
158
160
159
builder . ConfigureResource ( r => r . WithElasticDefaults ( builderState , services ) ) ;
161
160
@@ -167,20 +166,17 @@ static void ConfigureBuilder(MeterProviderBuilder builder, BuilderState builderS
167
166
o . TemporalityPreference = MetricReaderTemporalityPreference . Delta ) ) ;
168
167
169
168
#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.
172
173
if ( SignalBuilder . InstrumentationAssemblyExists ( "OpenTelemetry.Instrumentation.Http.dll" ) )
173
174
{
174
- logger . LogHttpInstrumentationFound ( "metric" , nameof ( MeterProviderBuilder ) , builderState . InstanceIdentifier ) ;
175
+ logger . LogHttpInstrumentationFound ( "metric" , meterProviderBuilderName , builderState . InstanceIdentifier ) ;
175
176
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.
181
177
if ( ! RuntimeFeature . IsDynamicCodeSupported )
182
178
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, " +
184
180
"or remove the dependency so that the native `System.Net.Http` instrumentation (available in .NET 9) is observed instead." ) ;
185
181
}
186
182
else
@@ -208,12 +204,7 @@ static void ConfigureBuilder(MeterProviderBuilder builder, BuilderState builderS
208
204
{
209
205
AddMeterWithLogging ( builder , logger , "System.Runtime" , builderState . InstanceIdentifier ) ;
210
206
}
211
- #else
212
- AddWithLogging ( builder , logger , "HTTP" , b => b . AddHttpClientInstrumentation ( ) , builderState . InstanceIdentifier ) ;
213
- AddWithLogging ( builder , logger , "Runtime" , b => b . AddRuntimeInstrumentation ( ) , builderState . InstanceIdentifier ) ;
214
207
#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 ) ;
217
208
218
209
if ( SignalBuilder . InstrumentationAssemblyExists ( "OpenTelemetry.Instrumentation.AspNetCore.dll" ) )
219
210
{
@@ -254,12 +245,5 @@ static void AddMeterWithLogging(MeterProviderBuilder builder, ILogger logger, st
254
245
builder . AddMeter ( meterName ) ;
255
246
logger . LogMeterAdded ( meterName , builderIdentifier ) ;
256
247
}
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
- }
264
248
}
265
249
}
0 commit comments