in NETCORE/src/Shared/Implementation/TelemetryConfigurationOptionsSetup.cs [71:287]
public void Configure(TelemetryConfiguration configuration)
{
try
{
if (this.applicationInsightsServiceOptions.InstrumentationKey != null)
{
configuration.InstrumentationKey = this.applicationInsightsServiceOptions.InstrumentationKey;
}
if (this.telemetryModuleConfigurators.Any())
{
foreach (ITelemetryModuleConfigurator telemetryModuleConfigurator in this.telemetryModuleConfigurators)
{
ITelemetryModule telemetryModule = this.modules.FirstOrDefault((module) => module.GetType() == telemetryModuleConfigurator.TelemetryModuleType);
if (telemetryModule != null)
{
telemetryModuleConfigurator.Configure(telemetryModule, this.applicationInsightsServiceOptions);
}
else
{
#if AI_ASPNETCORE_WEB
AspNetCoreEventSource.Instance.UnableToFindModuleToConfigure(telemetryModuleConfigurator.TelemetryModuleType.ToString());
#else
WorkerServiceEventSource.Instance.UnableToFindModuleToConfigure(telemetryModuleConfigurator.TelemetryModuleType.ToString());
#endif
}
}
}
if (this.telemetryProcessorFactories.Any())
{
foreach (ITelemetryProcessorFactory processorFactory in this.telemetryProcessorFactories)
{
configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.Use(processorFactory.Create);
}
}
// Fallback to default channel (InMemoryChannel) created by base sdk if no channel is found in DI
configuration.TelemetryChannel = this.telemetryChannel ?? configuration.TelemetryChannel;
(configuration.TelemetryChannel as ITelemetryModule)?.Initialize(configuration);
this.AddAutoCollectedMetricExtractor(configuration);
this.AddQuickPulse(configuration);
this.AddSampling(configuration);
this.DisableHeartBeatIfConfigured();
configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.Build();
configuration.TelemetryProcessorChainBuilder.Build();
if (this.applicationInsightsServiceOptions.DeveloperMode != null)
{
configuration.TelemetryChannel.DeveloperMode = this.applicationInsightsServiceOptions.DeveloperMode;
}
if (this.applicationInsightsServiceOptions.EndpointAddress != null)
{
configuration.TelemetryChannel.EndpointAddress = this.applicationInsightsServiceOptions.EndpointAddress;
}
// Need to set connection string before calling Initialize() on the Modules and Processors.
if (this.applicationInsightsServiceOptions.ConnectionString != null)
{
configuration.ConnectionString = this.applicationInsightsServiceOptions.ConnectionString;
}
foreach (ITelemetryInitializer initializer in this.initializers)
{
configuration.TelemetryInitializers.Add(initializer);
}
// Find the DiagnosticsTelemetryModule, this is needed to initialize AzureInstanceMetadataTelemetryModule and AppServicesHeartbeatTelemetryModule.
DiagnosticsTelemetryModule diagModule =
(this.applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule && this.applicationInsightsServiceOptions.EnableHeartbeat)
? this.modules.OfType<DiagnosticsTelemetryModule>().FirstOrDefault()
: null;
// Checks ApplicationInsightsServiceOptions and disable TelemetryModules if explicitly disabled.
foreach (ITelemetryModule module in this.modules)
{
// If any of the modules are disabled explicitly using aioptions,
// do not initialize them and dispose if disposable.
// The option of not adding a module to DI if disabled
// cannot be done to maintain backward compatibility.
// So this approach of adding all modules to DI, but selectively
// disable those modules which user has disabled is chosen.
if (module is DiagnosticsTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule)
{
DisposeIfDisposable(module);
continue;
}
}
// DependencyTrackingTelemetryModule
if (module is DependencyTrackingTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableDependencyTrackingTelemetryModule)
{
DisposeIfDisposable(module);
continue;
}
}
#if AI_ASPNETCORE_WEB
// RequestTrackingTelemetryModule
if (module is RequestTrackingTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableRequestTrackingTelemetryModule)
{
DisposeIfDisposable(module);
continue;
}
}
#endif
// EventCounterCollectionModule
if (module is EventCounterCollectionModule)
{
if (!this.applicationInsightsServiceOptions.EnableEventCounterCollectionModule)
{
DisposeIfDisposable(module);
continue;
}
}
// PerformanceCollectorModule
if (module is PerformanceCollectorModule)
{
if (!this.applicationInsightsServiceOptions.EnablePerformanceCounterCollectionModule)
{
DisposeIfDisposable(module);
continue;
}
}
// AppServicesHeartbeatTelemetryModule
if (module is AppServicesHeartbeatTelemetryModule appServicesHeartbeatTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableAppServicesHeartbeatTelemetryModule)
{
DisposeIfDisposable(module);
continue;
}
else if (diagModule != null)
{
// diagModule is set to Null above if (applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule || this.applicationInsightsServiceOptions.EnableHeartbeat) == false.
appServicesHeartbeatTelemetryModule.HeartbeatPropertyManager = diagModule;
}
}
// AzureInstanceMetadataTelemetryModule
if (module is AzureInstanceMetadataTelemetryModule azureInstanceMetadataTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableAzureInstanceMetadataTelemetryModule)
{
DisposeIfDisposable(module);
continue;
}
else if (diagModule != null)
{
// diagModule is set to Null above if (applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule || this.applicationInsightsServiceOptions.EnableHeartbeat) == false.
azureInstanceMetadataTelemetryModule.HeartbeatPropertyManager = diagModule;
}
}
// QuickPulseTelemetryModule
if (module is QuickPulseTelemetryModule)
{
if (!this.applicationInsightsServiceOptions.EnableQuickPulseMetricStream)
{
DisposeIfDisposable(module);
continue;
}
}
try
{
module.Initialize(configuration);
}
catch (Exception ex)
{
#if AI_ASPNETCORE_WEB
AspNetCoreEventSource.Instance.TelemetryModuleInitialziationSetupFailure(module.GetType().FullName, ex.ToInvariantString());
#else
WorkerServiceEventSource.Instance.TelemetryModuleInitialziationSetupFailure(module.GetType().FullName, ex.ToInvariantString());
#endif
}
}
foreach (ITelemetryProcessor processor in configuration.TelemetryProcessors)
{
if (processor is ITelemetryModule module)
{
module.Initialize(configuration);
}
}
// Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule depends on this nullable configuration to support Correlation.
configuration.ApplicationIdProvider = this.applicationIdProvider;
#if AI_ASPNETCORE_WEB
AspNetCoreEventSource.Instance.LogInformational("Successfully configured TelemetryConfiguration.");
#else
WorkerServiceEventSource.Instance.LogInformational("Successfully configured TelemetryConfiguration.");
#endif
}
catch (Exception ex)
{
#if AI_ASPNETCORE_WEB
AspNetCoreEventSource.Instance.TelemetryConfigurationSetupFailure(ex.ToInvariantString());
#else
WorkerServiceEventSource.Instance.TelemetryConfigurationSetupFailure(ex.ToInvariantString());
#endif
}
}