public void Logging_Binds_AppInsightsOptions() { var hostBuilder = new HostBuilder() .ConfigureAppConfiguration(c => { c.AddInMemoryCollection(new Dictionary <string, string> { { "APPINSIGHTS_INSTRUMENTATIONKEY", "some_key" }, { "APPLICATIONINSIGHTS_CONNECTION_STRING", "InstrumentationKey=some_other_key" }, { ConfigurationPath.Combine(_loggingPath, "ApplicationInsights", "SamplingSettings", "IsEnabled"), "false" }, { ConfigurationPath.Combine(_loggingPath, "ApplicationInsights", "SnapshotConfiguration", "IsEnabled"), "false" } }); }) .ConfigureDefaultTestWebScriptHost(); using (IHost host = hostBuilder.Build()) { ApplicationInsightsLoggerOptions appInsightsOptions = host.Services.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; Assert.Equal("some_key", appInsightsOptions.InstrumentationKey); Assert.Equal("InstrumentationKey=some_other_key", appInsightsOptions.ConnectionString); Assert.Null(appInsightsOptions.SamplingSettings); Assert.False(appInsightsOptions.SnapshotConfiguration.IsEnabled); } }
public void Configure_SnapshotDisabled_ByDefault() { IConfiguration config = new ConfigurationBuilder().Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Null(options.SnapshotConfiguration); }
public void Configure_SnapshotEnabled_ByDefault() { IConfiguration config = new ConfigurationBuilder().Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config)); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.True(options.SnapshotConfiguration.IsEnabled); }
public void Configure_SamplingEnabled_ByDefault() { IConfiguration config = new ConfigurationBuilder().Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal(5, options.SamplingSettings.MaxTelemetryItemsPerSecond); }
public void Configure_QuickPulse_NullByDefault() { IConfiguration config = new ConfigurationBuilder().Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Null(options.QuickPulseAuthenticationApiKey); }
public void Configure_QuickPulse() { IConfiguration config = new ConfigurationBuilder().Build(); _environment.SetEnvironmentVariable(EnvironmentSettingNames.AppInsightsQuickPulseAuthApiKey, "SOME_API_KEY"); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal("SOME_API_KEY", options.QuickPulseAuthenticationApiKey); }
public void Configure_SamplingDisabled_CreatesNullSettings() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SamplingSettings}:IsEnabled", "false" } }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Null(options.SamplingSettings); }
public void Configure_Snapshot_Sets_SnapshotsPerTenMinutesLimit() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SnapshotConfiguration}:SnapshotsPerTenMinutesLimit", "10" }, }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal(10, options.SnapshotConfiguration.SnapshotsPerTenMinutesLimit); }
public void Configure_SamplingEnabled_CreatesDefaultSettings() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SamplingSettings}:IsEnabled", "true" } }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config)); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal(5, options.SamplingSettings.MaxTelemetryItemsPerSecond); }
public void Configure_SnapshotDisabled_SetsIsEnabledFalse() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SnapshotConfiguration}:IsEnabled", "false" } }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config)); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.False(options.SnapshotConfiguration.IsEnabled); }
public void Configure_SnapshotEnabled_CreatesDefaultSettings() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SnapshotConfiguration}:IsEnabled", "true" } }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.True(options.SnapshotConfiguration.IsEnabled); }
public void Configure_Sampling_Sets_MaxTelemetryItemsPerSecond() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SamplingSettings}:MaxTelemetryItemsPerSecond", "25" }, }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal(25, options.SamplingSettings.MaxTelemetryItemsPerSecond); }
public void Configure_SamplingDisabled_IgnoresOtherSettings() { IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SamplingSettings}:MaxTelemetryItemsPerSecond", "25" }, { $"{SamplingSettings}:IsEnabled", "false" } }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config)); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Null(options.SamplingSettings); }
public void Setup() { _configuration = TelemetryConfiguration.CreateDefault(); _configuration.InstrumentationKey = ""; _configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); _telemetryClient = new TelemetryClient(_configuration); _module.Initialize(_configuration); var loggerOptions = new ApplicationInsightsLoggerOptions(); var applicationInsightsLoggerProvider = new ApplicationInsightsLoggerProvider(Options.Create(_configuration), Options.Create(loggerOptions)); ILoggerFactory factory = new LoggerFactory(); factory.AddProvider(applicationInsightsLoggerProvider); LogContext.ConfigureCurrentLogContext(factory); }
public void TestLoggerIncludingEventIdCreatesTraceTelemetryWithEventIdOnLoggedError() { TelemetryClient client = CommonMocks.MockTelemetryClient((t) => { Assert.IsType <TraceTelemetry>(t); var traceTelemetry = (TraceTelemetry)t; Assert.Equal("This is an error", traceTelemetry.Message); Assert.Equal(SeverityLevel.Error, traceTelemetry.SeverityLevel); Assert.Equal("test-category", traceTelemetry.Properties["CategoryName"]); Assert.Equal("22", traceTelemetry.Properties["EventId"]); Assert.Equal("TestEvent", traceTelemetry.Properties["EventName"]); }); var options = new ApplicationInsightsLoggerOptions { IncludeEventId = true }; ILogger logger = new ApplicationInsightsLogger("test-category", client, (s, l) => { return(true); }, options); logger.LogError(new EventId(22, "TestEvent"), "This is an error"); }
public void TestLoggerIncludingEventIdCreatesTraceTelemetryWithoutEventNameOnLoggedInfo() { TelemetryClient client = CommonMocks.MockTelemetryClient((t) => { Assert.IsType <TraceTelemetry>(t); var traceTelemetry = (TraceTelemetry)t; Assert.Equal("This is an information", traceTelemetry.Message); Assert.Equal(SeverityLevel.Information, traceTelemetry.SeverityLevel); Assert.Equal("test-category", traceTelemetry.Properties["CategoryName"]); Assert.Equal("100", traceTelemetry.Properties["EventId"]); Assert.False(traceTelemetry.Properties.ContainsKey("EventName")); }); var options = new ApplicationInsightsLoggerOptions { IncludeEventId = true }; ILogger logger = new ApplicationInsightsLogger("test-category", client, (s, l) => { return(true); }, options); logger.LogInformation(new EventId(100, string.Empty), "This is an information"); }
public void TestLoggerIncludingEventIdCreatesExceptionWithoutEventNameTelemetryOnLoggedError() { TelemetryClient client = CommonMocks.MockTelemetryClient((t) => { Assert.IsType <ExceptionTelemetry>(t); var exceptionTelemetry = (ExceptionTelemetry)t; Assert.Equal(SeverityLevel.Error, exceptionTelemetry.SeverityLevel); Assert.Equal("test-category", exceptionTelemetry.Properties["CategoryName"]); Assert.Equal("System.Exception: This is an error", exceptionTelemetry.Properties["Exception"]); Assert.Equal("Error: This is an error", exceptionTelemetry.Message); Assert.Equal("100", exceptionTelemetry.Properties["EventId"]); Assert.False(exceptionTelemetry.Properties.ContainsKey("EventName")); }); var options = new ApplicationInsightsLoggerOptions { IncludeEventId = true }; ILogger logger = new ApplicationInsightsLogger("test-category", client, (s, l) => { return(true); }, options); var exception = new Exception("This is an error"); logger.LogError(new EventId(100, string.Empty), exception, "Error: " + exception.Message); }
public void Configure_SamplingExcludedIncludedTypes_AppliesSettings() { string excludedTypes = "Dependency;Event"; string includedTypes = "PageView;Trace"; IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { $"{SamplingSettings}:MaxTelemetryItemsPerSecond", "25" }, { $"{SamplingSettings}:IsEnabled", "true" }, { $"{SamplingSettings}:ExcludedTypes", excludedTypes }, { $"{SamplingSettings}:IncludedTypes", includedTypes }, }) .Build(); ApplicationInsightsLoggerOptionsSetup setup = new ApplicationInsightsLoggerOptionsSetup(new MockLoggerConfiguration(config), _environment); ApplicationInsightsLoggerOptions options = new ApplicationInsightsLoggerOptions(); setup.Configure(options); Assert.Equal(excludedTypes, options.SamplingExcludedTypes); Assert.Equal(includedTypes, options.SamplingIncludedTypes); }
public void TestLoggerIncludingEventIdCreatesExceptionWithEventIdTelemetryOnLoggedErrorWithParameters() { TelemetryClient client = CommonMocks.MockTelemetryClient((t) => { Assert.IsType <ExceptionTelemetry>(t); var exceptionTelemetry = (ExceptionTelemetry)t; Assert.Equal(SeverityLevel.Error, exceptionTelemetry.SeverityLevel); Assert.Equal("test-category", exceptionTelemetry.Properties["CategoryName"]); Assert.Equal("System.Exception: This is an error", exceptionTelemetry.Properties["Exception"]); Assert.Equal("Error: ERROR This is an error", exceptionTelemetry.Message); Assert.Equal("22", exceptionTelemetry.Properties["EventId"]); Assert.Equal("ERROR", exceptionTelemetry.Properties["EventName"]); Assert.Equal("This is an error", exceptionTelemetry.Properties["Message"]); }); var options = new ApplicationInsightsLoggerOptions { IncludeEventId = true }; ILogger logger = new ApplicationInsightsLogger("test-category", client, (s, l) => { return(true); }, options); var exception = new Exception("This is an error"); logger.LogError(new EventId(22, "TestEvent"), exception, "Error: {EventName} {Message}", "ERROR", exception.Message); }
public void ApplicationInsightsLoggerOptions_Format() { var options = new ApplicationInsightsLoggerOptions { SamplingSettings = new SamplingPercentageEstimatorSettings() { EvaluationInterval = TimeSpan.FromHours(1), InitialSamplingPercentage = 0.1, MaxSamplingPercentage = 0.1, MaxTelemetryItemsPerSecond = 42, MinSamplingPercentage = 0.1, MovingAverageRatio = 1.0, SamplingPercentageDecreaseTimeout = TimeSpan.FromSeconds(1), SamplingPercentageIncreaseTimeout = TimeSpan.FromSeconds(1) }, SnapshotConfiguration = new SnapshotCollectorConfiguration() { AgentEndpoint = "123", FailedRequestLimit = 42, IsEnabled = false, IsEnabledInDeveloperMode = false, IsEnabledWhenProfiling = false, IsLowPrioritySnapshotUploader = false, MaximumCollectionPlanSize = 42, MaximumSnapshotsRequired = 42, ProblemCounterResetInterval = TimeSpan.FromMinutes(42), ProvideAnonymousTelemetry = false, ReconnectInterval = TimeSpan.FromMinutes(42), ShadowCopyFolder = "123", SnapshotInLowPriorityThread = false, SnapshotsPerDayLimit = 42, SnapshotsPerTenMinutesLimit = 42, TempFolder = "123", ThresholdForSnapshotting = 42, UploaderProxy = "123" }, HttpAutoCollectionOptions = new HttpAutoCollectionOptions() { EnableResponseHeaderInjection = false, EnableW3CDistributedTracing = false, EnableHttpTriggerExtendedInfoCollection = true } }; var deserializedOptions = JsonConvert.DeserializeObject <ApplicationInsightsLoggerOptions>(options.Format()); Assert.Equal(options.HttpAutoCollectionOptions.EnableHttpTriggerExtendedInfoCollection, deserializedOptions.HttpAutoCollectionOptions.EnableHttpTriggerExtendedInfoCollection); Assert.Equal(options.HttpAutoCollectionOptions.EnableW3CDistributedTracing, deserializedOptions.HttpAutoCollectionOptions.EnableW3CDistributedTracing); Assert.Equal(options.HttpAutoCollectionOptions.EnableResponseHeaderInjection, deserializedOptions.HttpAutoCollectionOptions.EnableResponseHeaderInjection); Assert.Equal(options.SamplingSettings.EvaluationInterval, deserializedOptions.SamplingSettings.EvaluationInterval); Assert.Equal(options.SamplingSettings.InitialSamplingPercentage, deserializedOptions.SamplingSettings.InitialSamplingPercentage); Assert.Equal(options.SamplingSettings.MaxSamplingPercentage, deserializedOptions.SamplingSettings.MaxSamplingPercentage); Assert.Equal(options.SamplingSettings.MaxTelemetryItemsPerSecond, deserializedOptions.SamplingSettings.MaxTelemetryItemsPerSecond); Assert.Equal(options.SamplingSettings.MinSamplingPercentage, deserializedOptions.SamplingSettings.MinSamplingPercentage); Assert.Equal(options.SamplingSettings.MovingAverageRatio, deserializedOptions.SamplingSettings.MovingAverageRatio); Assert.Equal(options.SamplingSettings.SamplingPercentageDecreaseTimeout, deserializedOptions.SamplingSettings.SamplingPercentageDecreaseTimeout); Assert.Equal(options.SamplingSettings.SamplingPercentageIncreaseTimeout, deserializedOptions.SamplingSettings.SamplingPercentageIncreaseTimeout); Assert.Equal(options.SnapshotConfiguration.FailedRequestLimit, deserializedOptions.SnapshotConfiguration.FailedRequestLimit); Assert.Equal(options.SnapshotConfiguration.IsEnabled, deserializedOptions.SnapshotConfiguration.IsEnabled); Assert.Equal(options.SnapshotConfiguration.IsEnabledInDeveloperMode, deserializedOptions.SnapshotConfiguration.IsEnabledInDeveloperMode); Assert.Equal(options.SnapshotConfiguration.IsEnabledWhenProfiling, deserializedOptions.SnapshotConfiguration.IsEnabledWhenProfiling); Assert.Equal(options.SnapshotConfiguration.IsLowPrioritySnapshotUploader, deserializedOptions.SnapshotConfiguration.IsLowPrioritySnapshotUploader); Assert.Equal(options.SnapshotConfiguration.MaximumCollectionPlanSize, deserializedOptions.SnapshotConfiguration.MaximumCollectionPlanSize); Assert.Equal(options.SnapshotConfiguration.MaximumSnapshotsRequired, deserializedOptions.SnapshotConfiguration.MaximumSnapshotsRequired); Assert.Equal(options.SnapshotConfiguration.ProblemCounterResetInterval, deserializedOptions.SnapshotConfiguration.ProblemCounterResetInterval); Assert.Equal(options.SnapshotConfiguration.ProvideAnonymousTelemetry, deserializedOptions.SnapshotConfiguration.ProvideAnonymousTelemetry); Assert.Equal(options.SnapshotConfiguration.ReconnectInterval, deserializedOptions.SnapshotConfiguration.ReconnectInterval); Assert.Equal(options.SnapshotConfiguration.ShadowCopyFolder, deserializedOptions.SnapshotConfiguration.ShadowCopyFolder); Assert.Equal(options.SnapshotConfiguration.SnapshotInLowPriorityThread, deserializedOptions.SnapshotConfiguration.SnapshotInLowPriorityThread); Assert.Equal(options.SnapshotConfiguration.SnapshotsPerDayLimit, deserializedOptions.SnapshotConfiguration.SnapshotsPerDayLimit); Assert.Equal(options.SnapshotConfiguration.SnapshotsPerTenMinutesLimit, deserializedOptions.SnapshotConfiguration.SnapshotsPerTenMinutesLimit); Assert.Equal(options.SnapshotConfiguration.TempFolder, deserializedOptions.SnapshotConfiguration.TempFolder); Assert.Equal(options.SnapshotConfiguration.ThresholdForSnapshotting, deserializedOptions.SnapshotConfiguration.ThresholdForSnapshotting); }
public static IServiceCollection AddApplicationInsights(this IServiceCollection services) { // Bind to the configuration section registered with services.AddOptions <ApplicationInsightsLoggerOptions>() .Configure <ILoggerProviderConfiguration <ApplicationInsightsLoggerProvider> >((options, config) => { config.Configuration?.Bind(options); }); services.AddSingleton <ITelemetryInitializer, HttpDependenciesParsingTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsRoleEnvironmentTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsSanitizingInitializer>(); services.AddSingleton <ITelemetryModule, QuickPulseTelemetryModule>(); services.AddSingleton <IApplicationIdProvider, ApplicationInsightsApplicationIdProvider>(); services.AddSingleton <ITelemetryModule, DependencyTrackingTelemetryModule>(provider => { var dependencyCollector = new DependencyTrackingTelemetryModule(); var excludedDomains = dependencyCollector.ExcludeComponentCorrelationHttpHeadersOnDomains; excludedDomains.Add("core.windows.net"); excludedDomains.Add("core.chinacloudapi.cn"); excludedDomains.Add("core.cloudapi.de"); excludedDomains.Add("core.usgovcloudapi.net"); excludedDomains.Add("localhost"); excludedDomains.Add("127.0.0.1"); var includedActivities = dependencyCollector.IncludeDiagnosticSourceActivities; includedActivities.Add("Microsoft.Azure.ServiceBus"); return(dependencyCollector); }); services.AddSingleton <ITelemetryModule, AppServicesHeartbeatTelemetryModule>(); services.AddSingleton <ITelemetryChannel, ServerTelemetryChannel>(); services.AddSingleton <TelemetryConfiguration>(provider => { ApplicationInsightsLoggerOptions options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; LoggerFilterOptions filterOptions = CreateFilterOptions(provider.GetService <IOptions <LoggerFilterOptions> >().Value); ITelemetryChannel channel = provider.GetService <ITelemetryChannel>(); TelemetryConfiguration config = TelemetryConfiguration.CreateDefault(); IApplicationIdProvider appIdProvider = provider.GetService <IApplicationIdProvider>(); SetupTelemetryConfiguration( config, options.InstrumentationKey, options.SamplingSettings, options.SnapshotConfiguration, channel, provider.GetServices <ITelemetryInitializer>(), provider.GetServices <ITelemetryModule>(), appIdProvider, filterOptions); return(config); }); services.AddSingleton <TelemetryClient>(provider => { TelemetryConfiguration configuration = provider.GetService <TelemetryConfiguration>(); TelemetryClient client = new TelemetryClient(configuration); string assemblyVersion = GetAssemblyFileVersion(typeof(JobHost).Assembly); client.Context.GetInternalContext().SdkVersion = $"webjobs: {assemblyVersion}"; return(client); }); services.AddSingleton <ILoggerProvider, ApplicationInsightsLoggerProvider>(); return(services); }
public static IServiceCollection AddApplicationInsights(this IServiceCollection services) { services.TryAddSingleton <ISdkVersionProvider, WebJobsSdkVersionProvider>(); // Bind to the configuration section registered with services.AddOptions <ApplicationInsightsLoggerOptions>() .Configure <ILoggerProviderConfiguration <ApplicationInsightsLoggerProvider> >((options, config) => { config.Configuration?.Bind(options); }); services.AddSingleton <ITelemetryInitializer, HttpDependenciesParsingTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsRoleEnvironmentTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsSanitizingInitializer>(); services.AddSingleton <ITelemetryModule, QuickPulseTelemetryModule>(); services.AddSingleton <IApplicationIdProvider, ApplicationInsightsApplicationIdProvider>(); services.AddSingleton <ITelemetryModule, DependencyTrackingTelemetryModule>(provider => { var dependencyCollector = new DependencyTrackingTelemetryModule(); var excludedDomains = dependencyCollector.ExcludeComponentCorrelationHttpHeadersOnDomains; excludedDomains.Add("core.windows.net"); excludedDomains.Add("core.chinacloudapi.cn"); excludedDomains.Add("core.cloudapi.de"); excludedDomains.Add("core.usgovcloudapi.net"); excludedDomains.Add("localhost"); excludedDomains.Add("127.0.0.1"); var includedActivities = dependencyCollector.IncludeDiagnosticSourceActivities; includedActivities.Add("Microsoft.Azure.ServiceBus"); return(dependencyCollector); }); services.AddSingleton <ITelemetryModule, AppServicesHeartbeatTelemetryModule>(); services.AddSingleton <ITelemetryChannel, ServerTelemetryChannel>(); services.AddSingleton <TelemetryConfiguration>(provider => { ApplicationInsightsLoggerOptions options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; LoggerFilterOptions filterOptions = CreateFilterOptions(provider.GetService <IOptions <LoggerFilterOptions> >().Value); ITelemetryChannel channel = provider.GetService <ITelemetryChannel>(); TelemetryConfiguration config = TelemetryConfiguration.CreateDefault(); IApplicationIdProvider appIdProvider = provider.GetService <IApplicationIdProvider>(); // Because of https://github.com/Microsoft/ApplicationInsights-dotnet-server/issues/943 // we have to touch (and create) Active configuration before initializing telemetry modules // Active configuration is used to report AppInsights heartbeats // role environment telemetry initializer is needed to correlate heartbeats to particular host var activeConfig = TelemetryConfiguration.Active; if (!string.IsNullOrEmpty(options.InstrumentationKey) && string.IsNullOrEmpty(activeConfig.InstrumentationKey)) { activeConfig.InstrumentationKey = options.InstrumentationKey; } if (!activeConfig.TelemetryInitializers.OfType <WebJobsRoleEnvironmentTelemetryInitializer>().Any()) { activeConfig.TelemetryInitializers.Add( new WebJobsRoleEnvironmentTelemetryInitializer()); } SetupTelemetryConfiguration( config, options, channel, provider.GetServices <ITelemetryInitializer>(), provider.GetServices <ITelemetryModule>(), appIdProvider, filterOptions); return(config); }); services.AddSingleton <TelemetryClient>(provider => { TelemetryConfiguration configuration = provider.GetService <TelemetryConfiguration>(); TelemetryClient client = new TelemetryClient(configuration); ISdkVersionProvider versionProvider = provider.GetService <ISdkVersionProvider>(); client.Context.GetInternalContext().SdkVersion = versionProvider?.GetSdkVersion(); return(client); }); services.AddSingleton <ILoggerProvider, ApplicationInsightsLoggerProvider>(); return(services); }
private static void SetupTelemetryConfiguration( TelemetryConfiguration configuration, ApplicationInsightsLoggerOptions options, ITelemetryChannel channel, IEnumerable <ITelemetryInitializer> telemetryInitializers, IEnumerable <ITelemetryModule> telemetryModules, IApplicationIdProvider applicationIdProvider, LoggerFilterOptions filterOptions) { if (options.InstrumentationKey != null) { configuration.InstrumentationKey = options.InstrumentationKey; } configuration.TelemetryChannel = channel; foreach (ITelemetryInitializer initializer in telemetryInitializers) { configuration.TelemetryInitializers.Add(initializer); } (channel as ServerTelemetryChannel)?.Initialize(configuration); QuickPulseTelemetryModule quickPulseModule = null; foreach (ITelemetryModule module in telemetryModules) { if (module is QuickPulseTelemetryModule telemetryModule) { quickPulseModule = telemetryModule; if (options.QuickPulseAuthenticationApiKey != null) { quickPulseModule.AuthenticationApiKey = options.QuickPulseAuthenticationApiKey; } } module.Initialize(configuration); } QuickPulseTelemetryProcessor quickPulseProcessor = null; configuration.TelemetryProcessorChainBuilder .Use((next) => new OperationFilteringTelemetryProcessor(next)) .Use((next) => { quickPulseProcessor = new QuickPulseTelemetryProcessor(next); return(quickPulseProcessor); }) .Use((next) => new FilteringTelemetryProcessor(filterOptions, next)); if (options.SamplingSettings != null) { configuration.TelemetryProcessorChainBuilder.Use((next) => new AdaptiveSamplingTelemetryProcessor(options.SamplingSettings, null, next)); } if (options.SnapshotConfiguration != null) { configuration.TelemetryProcessorChainBuilder.UseSnapshotCollector(options.SnapshotConfiguration); } configuration.TelemetryProcessorChainBuilder.Build(); quickPulseModule?.RegisterTelemetryProcessor(quickPulseProcessor); foreach (ITelemetryProcessor processor in configuration.TelemetryProcessors) { if (processor is ITelemetryModule module) { module.Initialize(configuration); } } configuration.ApplicationIdProvider = applicationIdProvider; }
public static IHostBuilder CreateHostBuilder(string[] args) { return(Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureAppConfiguration(cfg => { cfg.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); }) .ConfigureLogging((context, builder) => { builder.AddConsole(); builder.SetMinimumLevel(LogLevel.Trace); }) .ConfigureServices((hostContext, services) => { var hostConfig = hostContext.Configuration; var module = new DependencyTrackingTelemetryModule(); module.IncludeDiagnosticSourceActivities.Add("MassTransit"); TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault(); configuration.InstrumentationKey = "<your instrumentation key>"; configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); module.Initialize(configuration); var loggerOptions = new ApplicationInsightsLoggerOptions(); var applicationInsightsLoggerProvider = new ApplicationInsightsLoggerProvider(Options.Create(configuration), Options.Create(loggerOptions)); ILoggerFactory factory = new LoggerFactory(); factory.AddProvider(applicationInsightsLoggerProvider); LogContext.ConfigureCurrentLogContext(factory); services.AddMassTransit(x => { x.AddConsumersFromNamespaceContaining <SubmitOrderConsumer>(); x.AddBus(context => Bus.Factory.CreateUsingAzureServiceBus( configurator => { var host = configurator.Host(hostConfig["AzureServiceBusConnectionString"], h => { }); configurator.ReceiveEndpoint("submit-order", e => { e.Consumer <SubmitOrderConsumer>(); }); configurator.ReceiveEndpoint("order-observer", e => { e.Consumer <OrderSubmittedConsumer>(); }); configurator.ReceiveEndpoint("order-state", e => { var machine = new OrderStateMachine(); var repository = new InMemorySagaRepository <OrderState>(); e.StateMachineSaga(machine, repository); EndpointConvention.Map <OrderProcessed>(e.InputAddress); }); configurator.ReceiveEndpoint("execute-process-order", e => { e.ExecuteActivityHost <ProcessOrderActivity, ProcessOrderArguments>(); EndpointConvention.Map <ProcessOrderArguments>(e.InputAddress); }); })); }); services.AddHostedService <WindowsService>(); })); }
private static void SetupTelemetryConfiguration( TelemetryConfiguration configuration, ApplicationInsightsLoggerOptions options, ITelemetryChannel channel, IEnumerable <ITelemetryInitializer> telemetryInitializers, IEnumerable <ITelemetryModule> telemetryModules, IApplicationIdProvider applicationIdProvider, LoggerFilterOptions filterOptions) { if (options.InstrumentationKey != null) { configuration.InstrumentationKey = options.InstrumentationKey; } if (options.HttpAutoCollectionOptions.EnableW3CDistributedTracing) { // W3C distributed tracing is enabled by the feature flag inside ApplicationInsights SDK // W3COperationCorrelationTelemetryInitializer will go away once W3C is implemented // in the DiagnosticSource (.NET) configuration.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer()); } configuration.TelemetryChannel = channel; foreach (ITelemetryInitializer initializer in telemetryInitializers) { configuration.TelemetryInitializers.Add(initializer); } (channel as ServerTelemetryChannel)?.Initialize(configuration); QuickPulseTelemetryModule quickPulseModule = null; foreach (ITelemetryModule module in telemetryModules) { if (module is QuickPulseTelemetryModule telemetryModule) { quickPulseModule = telemetryModule; if (options.QuickPulseAuthenticationApiKey != null) { quickPulseModule.AuthenticationApiKey = options.QuickPulseAuthenticationApiKey; } } module.Initialize(configuration); } QuickPulseTelemetryProcessor quickPulseProcessor = null; configuration.TelemetryProcessorChainBuilder .Use((next) => new OperationFilteringTelemetryProcessor(next)) .Use((next) => { quickPulseProcessor = new QuickPulseTelemetryProcessor(next); return(quickPulseProcessor); }) .Use((next) => new FilteringTelemetryProcessor(filterOptions, next)); if (options.SamplingSettings != null) { configuration.TelemetryProcessorChainBuilder.Use((next) => new AdaptiveSamplingTelemetryProcessor(options.SamplingSettings, null, next)); } if (options.SnapshotConfiguration != null) { configuration.TelemetryProcessorChainBuilder.UseSnapshotCollector(options.SnapshotConfiguration); } configuration.TelemetryProcessorChainBuilder.Build(); quickPulseModule?.RegisterTelemetryProcessor(quickPulseProcessor); foreach (ITelemetryProcessor processor in configuration.TelemetryProcessors) { if (processor is ITelemetryModule module) { module.Initialize(configuration); } } configuration.ApplicationIdProvider = applicationIdProvider; }
public static IServiceCollection AddApplicationInsights(this IServiceCollection services) { services.TryAddSingleton <ISdkVersionProvider, WebJobsSdkVersionProvider>(); // Bind to the configuration section registered with services.AddOptions <ApplicationInsightsLoggerOptions>() .Configure <ILoggerProviderConfiguration <ApplicationInsightsLoggerProvider> >((options, config) => { config.Configuration?.Bind(options); }); services.AddSingleton <ITelemetryInitializer, HttpDependenciesParsingTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsRoleEnvironmentTelemetryInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsSanitizingInitializer>(); services.AddSingleton <ITelemetryInitializer, WebJobsTelemetryInitializer>(); services.AddSingleton <ITelemetryModule, QuickPulseTelemetryModule>(); services.AddSingleton <ITelemetryModule>(provider => { ApplicationInsightsLoggerOptions options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; if (options.EnablePerformanceCountersCollection) { return(new PerformanceCollectorModule()); } return(NullTelemetryModule.Instance); }); services.AddSingleton <IApplicationIdProvider, ApplicationInsightsApplicationIdProvider>(); services.AddSingleton <ITelemetryModule, DependencyTrackingTelemetryModule>(provider => { var options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; var dependencyCollector = new DependencyTrackingTelemetryModule(); var excludedDomains = dependencyCollector.ExcludeComponentCorrelationHttpHeadersOnDomains; excludedDomains.Add("core.windows.net"); excludedDomains.Add("core.chinacloudapi.cn"); excludedDomains.Add("core.cloudapi.de"); excludedDomains.Add("core.usgovcloudapi.net"); excludedDomains.Add("localhost"); excludedDomains.Add("127.0.0.1"); var includedActivities = dependencyCollector.IncludeDiagnosticSourceActivities; includedActivities.Add("Microsoft.Azure.ServiceBus"); dependencyCollector.EnableW3CHeadersInjection = options.HttpAutoCollectionOptions.EnableW3CDistributedTracing; return(dependencyCollector); }); services.AddSingleton <ITelemetryModule>(provider => { var options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; if (options.HttpAutoCollectionOptions.EnableHttpTriggerExtendedInfoCollection) { var appIdProvider = provider.GetService <IApplicationIdProvider>(); return(new RequestTrackingTelemetryModule(appIdProvider) { CollectionOptions = new RequestCollectionOptions { TrackExceptions = false, // webjobs/functions track exceptions themselves EnableW3CDistributedTracing = options.HttpAutoCollectionOptions.EnableW3CDistributedTracing, InjectResponseHeaders = options.HttpAutoCollectionOptions.EnableResponseHeaderInjection } }); } return(NullTelemetryModule.Instance); }); services.AddSingleton <ITelemetryModule, AppServicesHeartbeatTelemetryModule>(); services.AddSingleton <ITelemetryChannel, ServerTelemetryChannel>(); services.AddSingleton <TelemetryConfiguration>(provider => { ApplicationInsightsLoggerOptions options = provider.GetService <IOptions <ApplicationInsightsLoggerOptions> >().Value; LoggerFilterOptions filterOptions = CreateFilterOptions(provider.GetService <IOptions <LoggerFilterOptions> >().Value); ITelemetryChannel channel = provider.GetService <ITelemetryChannel>(); TelemetryConfiguration config = TelemetryConfiguration.CreateDefault(); IApplicationIdProvider appIdProvider = provider.GetService <IApplicationIdProvider>(); ISdkVersionProvider sdkVersionProvider = provider.GetService <ISdkVersionProvider>(); // Because of https://github.com/Microsoft/ApplicationInsights-dotnet-server/issues/943 // we have to touch (and create) Active configuration before initializing telemetry modules // Active configuration is used to report AppInsights heartbeats // role environment telemetry initializer is needed to correlate heartbeats to particular host var activeConfig = TelemetryConfiguration.Active; if (!string.IsNullOrEmpty(options.InstrumentationKey) && string.IsNullOrEmpty(activeConfig.InstrumentationKey)) { activeConfig.InstrumentationKey = options.InstrumentationKey; } if (!activeConfig.TelemetryInitializers.OfType <WebJobsRoleEnvironmentTelemetryInitializer>().Any()) { activeConfig.TelemetryInitializers.Add(new WebJobsRoleEnvironmentTelemetryInitializer()); activeConfig.TelemetryInitializers.Add(new WebJobsTelemetryInitializer(sdkVersionProvider)); if (options.HttpAutoCollectionOptions.EnableW3CDistributedTracing) { // W3C distributed tracing is enabled by the feature flag inside ApplicationInsights SDK // W3COperationCorrelationTelemetryInitializer will go away once W3C is implemented // in the DiagnosticSource (.NET) TelemetryConfiguration.Active.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer()); } } SetupTelemetryConfiguration( config, options, channel, provider.GetServices <ITelemetryInitializer>(), provider.GetServices <ITelemetryModule>(), appIdProvider, filterOptions); return(config); }); services.AddSingleton <TelemetryClient>(provider => { TelemetryConfiguration configuration = provider.GetService <TelemetryConfiguration>(); TelemetryClient client = new TelemetryClient(configuration); ISdkVersionProvider versionProvider = provider.GetService <ISdkVersionProvider>(); client.Context.GetInternalContext().SdkVersion = versionProvider?.GetSdkVersion(); return(client); } ); services.AddSingleton <ILoggerProvider, ApplicationInsightsLoggerProvider>(); return(services); }