Skip to content
This repository has been archived by the owner on Jun 10, 2020. It is now read-only.

How to turn off application insights #970

Closed
ghosttie opened this issue Sep 3, 2019 · 12 comments
Closed

How to turn off application insights #970

ghosttie opened this issue Sep 3, 2019 · 12 comments

Comments

@ghosttie
Copy link

ghosttie commented Sep 3, 2019

Application Insights is turned on by default. I'm trying to debug a long running process, so I want it to run as fast as possible and it's spending a lot of time logging Application Insights information which I don't need.

I've followed the steps in dotnet/aspnetcore#2051 and #523 and they don't work.

Repro Steps

  1. Check the option "Tools/Options/Projects and Solutions/Web Projects/Disable local Application Insights for Asp.Net Core web projects"
  2. Add to Startup.Configure:
#if DEBUG
			TelemetryConfiguration.Active.DisableTelemetry = true;
			TelemetryDebugWriter.IsTracingDisabled = true;
#endif

Actual Behavior

Application Insights is not disabled

Expected Behavior

Application Insights is disabled

Version Info

SDK Version: 2.7.1
.NET Core Version: 2.2
How Application was onboarded with SDK: Visual Studio
OS: Windows 10
Hosting Info: Running From Visual Studio 2019 v16.2.3

@cijothomas
Copy link
Contributor

@ghosttie Where do you see application insights turned on by default? Its is not turned on, unless you add it yourself.
Depending on how you onboarded to application insights, the same can be reversed - but the most easy option is to remove application insights from packagereference.

@ghosttie
Copy link
Author

ghosttie commented Sep 3, 2019

I never chose it, when I created the project it was already there

I don't want to remove it completely in case we want it later, I just want to be able to turn it off when I don't need it

@cijothomas
Copy link
Contributor

Please share the screenshots on how you created a new project. I am not aware of application insights being installed automatically for a .net core 2.2 project.

You can comment out/remove the services.AddApplicationInsightsTelemetry()/builder.UseApplicationInsights() when you don't need application insights.

@ghosttie
Copy link
Author

ghosttie commented Sep 4, 2019

Sorry, I guess I was misleading - it's 2.2 now but it was originally 1.0 that's been upgraded through every version, so maybe it was installed by default in the past but isn't anymore.

I tried putting the call to IWebHostBuilder.UseApplicationInsights in an #if !DEBUG but I got a

invalidoperationexception: No service for type 'Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet' has been registered.

so I figured it must be more complicated...

@cijothomas
Copy link
Contributor

The javascriptsnippet is a known issue, fixed in 2.8.0-beta2.
If you are using older version, do the following temp workaround:

Add services.AddWebEncoders(); in ConfigureServices() method of your Startup.cs class, before services.AddApplicationInsightsTelemetry();

@ghosttie
Copy link
Author

ghosttie commented Oct 3, 2019

I've since upgraded to ASP.NET Core 3.0 and I'm using Microsoft.ApplicationInsights.AspNetCore 2.8.0

In Startup.cs ConfigureServices I have

#if !DEBUG
	services.AddApplicationInsightsTelemetry();
#endif

but when I run it in Debug mode (or just comment it out entirely) I still get

System.InvalidOperationException: No service for type 'Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.AspNetCore.Mvc.Razor.RazorPagePropertyActivator.<>c__DisplayClass8_0.<CreateActivateInfo>b__1(ViewContext context)
   at Microsoft.Extensions.Internal.PropertyActivator`1.Activate(Object instance, TContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorPagePropertyActivator.Activate(Object page, ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.Activate(IRazorPage page, ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderViewStartsAsync(ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable`1 statusCode)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable`1 statusCode)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
   at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

I don't understand why it's doing anything at all if I don't call AddApplicationInsightsTelemetry...

@cijothomas
Copy link
Contributor

@ghosttie You still have appliction insights in razor pages. If you didn't intent to use application insights, remove it from razor pages as well.

@ghosttie
Copy link
Author

ghosttie commented Oct 3, 2019

I also have a compile time time check around this in _ViewImports.cshtml

#if !DEBUG
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
#endif

and one in _Layout.cshtml

#if !DEBUG
@Html.Raw(JavaScriptSnippet.FullScript)
#endif

is that what you mean? Or somewhere else?

@cijothomas
Copy link
Contributor

All usage of Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet.

The error indicates Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet is being requested (and failing as not registered). So remove all references to it.

@ghosttie
Copy link
Author

ghosttie commented Oct 3, 2019

Ah, apparently compiler directives don't work in CSHTML.

Thank you for your help

@ghosttie ghosttie closed this as completed Oct 3, 2019
@ghosttie
Copy link
Author

ghosttie commented Oct 3, 2019

OK I'm left with my original problem - I want to be able to turn off Application Insights when in Debug mode but I can't do it.

Because compiler directives don't work in CSHTML I can't turn it off that way, and if I wrap the JavaScriptSnippet line in an @if it seems to get processed when the Razor page is compiled regardless whether the code would get called or not

Is there not a property in Application Insights to turn off collection?

I found references to TelemetryConfiguration.Active.DisableTelemetry = true but when I tried to use it I got

Warning CS0618 'TelemetryConfiguration.Active' is obsolete: 'We do not recommend using TelemetryConfiguration.Active on .NET Core. See microsoft/ApplicationInsights-dotnet#1152 for more details'

I read through that bug but it didn't seem to help with my goal.

Reading through the documentation I tried this to turn of all collection:

#if DEBUG
	services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, o) => {
		module.Counters.Clear();
	});
#endif

but it's still logging a bunch of Application Insights Telemetry lines

@ghosttie ghosttie reopened this Oct 3, 2019
@cijothomas
Copy link
Contributor

Not sure which doc you are following.

Here's official doc:
https://docs.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core#disable-telemetry-dynamically

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants