Desativar insights do aplicativo na depuração

99

Como posso desabilitar os insights do aplicativo automaticamente ao usar uma configuração de depuração e habilitá-la apenas no lançamento?
É possível fazer isso sem criar outra chave de instrumentação apenas para depuração?

Eu tenho trackeventinstruções espalhadas por todo o código, colocá-las dentro de uma verificação de pré-processador de depuração não é uma solução ideal.

Minha solução atual é definir o Build Actiondo ApplicationInsights.configarquivo como de Nonemodo que não seja copiado para o diretório de saída do projeto, mas este não é um processo que pode ser automatizado com base na configuração de compilação ativa.

Existe um modo de desenvolvedor, mas precisa ser alterado manualmente (se fosse possível definir condicionalmente o arquivo de configuração, esvaziando também o problema resolvido da chave de instrumentação). Consulte http://apmtips.com/blog/2015/02/02/developer-mode/

Referência: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

Alberto Rivelli
fonte

Respostas:

69

Você pode tentar usar TelemetryConfiguration.DisableTelemetry Property algo assim ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
Abhijit Jana
fonte
Tentei adicionar essa declaração um pouco antes WindowsAppInitializer.InitializeAsync();(também tentei depois), mas o contador de eventos de insights do aplicativo visual studio aumentou. Não consegui ver se esta sessão foi efetivamente gravada no portal azure porque há muitas sessões e usuários. Vou tentar durante a noite.
Alberto Rivelli
Alberto, testei assim - 'código' público fechado classe parcial MainPage: Página {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (objeto remetente, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } 'code' .. e parece estar funcionando. tentarei algumas outras páginas também. irá mantê-lo atualizado
Abhijit Jana
Além disso, no próprio Visual Studio, você pode verificar se os eventos de telemetria são enviados ou não. Acabei de postar este ano como obter o número de eventos do Application Insights do Visual Studio 2015
Abhijit Jana
Isso é o que eu escrevi, o contador de eventos do estúdio visual aumentou.
Alberto Rivelli
2
Mesmo com DisableTelemetry definido como true e uma chave de instrumentação vazia, os módulos de telemetria continuarão coletando dados. Os dados não serão enviados, mas serão coletados. Veja este problema registrado no App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Se quiser desabilitar a saída de estreia, você pode seguir as etapas encontradas em github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye de
61

Como complemento às outras soluções, sugiro adicionar o seguinte, digamos Global.asax:

protected void Application_Start()
{    
    DisableApplicationInsightsOnDebug();
    // do the other stuff
}

/// <summary>
/// Disables the application insights locally.
/// </summary>
[Conditional("DEBUG")]
private static void DisableApplicationInsightsOnDebug()
{
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

A vantagem disso é que não é necessário alterar as configurações e funciona melhor com algumas ferramentas como ReSharper, que o compreenderá melhor do que #-directives.

Alexander Schmidt
fonte
1
Normalmente implantamos a configuração DEBUG na preparação e a configuração RELEASE na produção. Ambos podem ter a PRÓPRIA telemetria ativada. Portanto, sua alteração desativará a telemetria para o ambiente de preparação.
Sergey G.
1
@Sergey Eu sugeriria definir uma única configuração e definir uma variável STAGING lá. Assim, você pode distinguir melhor entre depurar localmente. Outra opção seria definir um novo símbolo LOCAL e substituí-lo no Conditionalatributo -atributo.
Alexander Schmidt de
normalmente, temos diferentes strings de conexão de banco de dados, contas de armazenamento e outras configurações para STAG e PROD (como ID de aplicativo FB, conta SendGrid, configurações de aplicativo, etc). Além disso - localmente, temos emulador de armazenamento Azure e SQL Express local. Portanto, não há como trabalhar com uma única configuração. Precisamos de 3 configurações diferentes e a local deve ter a telemetria desabilitada.
Sergey G.
Você ainda pode definir um símbolo personalizado em mais de uma de suas configurações. Então, em vez de usar Condicional ("DEBUG"), você pode usar Condicional ("O QUE QUER QUE"). Como alternativa, você pode obter um valor de appSettings e usar transformações para explodi-lo em ambientes não locais.
joelmdev
34

Para projetos ASP.NET Core, o App Insights está ATIVADO por padrão, o que realmente registra uma tonelada de informações na janela de depuração.

Para desativá-lo, vá para "FERRAMENTAS -> Opções -> Projetos e Soluções -> Projetos da Web" e marque "Desativar Application Insights locais para projetos da web Asp.Net Core."

Abaixo está a imagem para desativar os insights de aplicativos locais.

Imagem

Para obter mais informações sobre o problema, você pode ver o problema oficial do github aqui

Siva Chamarthi
fonte
22

Conforme explicado na pergunta, não implantar ou implantar um ApplicationInsights.config sem <instrumentationkey>key</instrumentationkey>bloquear a geração de eventos. Você pode então colocar a chave de instrumentação em código (apenas no lançamento no meu caso)

#if !DEBUG
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif

Todos os TelemetryClientcriados após esta chamada terão a chave correta e rastrearão eventos para que você não precise alterar o código em todos os lugares. Não chamar o método acima ou deixar o parâmetro vazio irá bloquear eventos porque não há uma chave configurada.

Basicamente, o ApplicationInsights.configarquivo substitui qualquer código que defina a chave de instrumentação, removendo o <instrumentationkey>key</instrumentationkey>interior dele, você poderá usar o código para configurar a chave. Se você remover o arquivo completamente, ele não funcionará.

Aqui está a confirmação: "Se você deseja definir a chave dinamicamente - por exemplo, se deseja enviar resultados do seu aplicativo para diferentes recursos - você pode omitir a chave do arquivo de configuração e defini-la no código."

Referência: https://azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey

Alberto Rivelli
fonte
1
Veja este blog como usar isso com um separadoApplicationInsights.Debug/Release.config
Yahoo Serious
16

Decidi usar as duas abordagens. Mudei o InstrumentationKeypara o Web.confige ele será substituído pela transformação de Web.Release.configou Web.Debug.config. (não se esqueça de removê-lo do ApplicationInsights.configarquivo). Então eu chamei este método doApplication_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}
Sergey G.
fonte
isso está obsoleto hoje, como fazemos isso hoje corretamente?
l --'''''''--------- '' '' '' '' '' ''
15

Executar um aplicativo da web ASP.NET Core 2.1 com Visual Studio 2017 (15.9.2) "Desativar Application Insights locais para projetos da web Asp.Net Core" não limpou a saída em minha janela de depuração.

No entanto, adicionar o seguinte a Configure () em Startup.cs funcionou;

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
}

Observe que IsTracingDisabled foi a solução principal , mas deixei em DisableTelemetry para uma boa medida! Além disso, ter as duas linhas próximas uma da outra é útil ao pesquisar referências semelhantes entre projetos .NET Framework e .NET Core na mesma solução.

alv
fonte
2
isso está obsoleto hoje, como fazemos isso hoje corretamente?
l --'''''''--------- '' '' '' '' '' ''
11

Eu acabei de ter o mesmo problema.

Queríamos controlar a configuração no web.config, então adicionamos uma chave DisableAITelemetry nas configurações do aplicativo:

  <appSettings>
    <add key="DisableAITelemetry" value="true" />
  </appSettings>

Com compilações ao vivo e demo, não incluiremos um valor (para que o padrão seja false).

Poderíamos então resolvê-lo adicionando:

bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;
chris31389
fonte
10

Jogadas ligeiramente diferentes em algumas das outras soluções. Coloque isso em seu global.asax:

Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;

Ele desativará a saída de depuração do app insights ao executar no depurador, mas permitirá em cenários de Ctrl + F5 e compilações de depuração publicadas para testar servidores

Josh
fonte
10

Em um aplicativo ASP.NET Core, você pode adicionar o seguinte ao Startus.cs para desativar o Application Insights no ambiente de desenvolvimento:

if (env.IsDevelopment()) {
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

Adicione isso ao construtor, logo após o builder.AddApplicationInsightsSettings();comando e você não verá mais logs de IA obstruindo seu console de depuração.

Saluce
fonte
Não ... não fez nenhuma diferença para mim (com ASP.Net Core 2.1). Ainda obterá uma montanha de mensagens de "Telemetria do Application Insights" na janela Saída.
Mike Gledhill
7

Descobrimos que a maneira mais fácil de evitar que ele seja rastreado no log de depuração é tão simples quanto:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Peter Jarrett
fonte
5

Microsoft.ApplicationInsights.AspNetCore Versão 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
JJS
fonte
Isso deveria ocultar as Application Insights Telemetry (unconfigured)mensagens do painel de depuração no Visual Studio - porque, se assim for, parece não funcionar :-(
Simon_Weaver
3
Não tenho certeza de que tipo de mensagem é esse. Eu acredito que você está querendo TelemetryDebugWriter.IsTracingDisabled = true;removê-los.
JJS
3
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Disable Application Insights debug informations
#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
            TelemetryDebugWriter.IsTracingDisabled = true;
#endif
            #endregion
//...
}
SZL
fonte
1
isso está obsoleto hoje, como fazemos isso hoje corretamente?
l --'''''''--------- '' '' '' '' '' ''
0

Desde o .NET Core 3.1:

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.DisableTelemetry = true;

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;
fogo de seda
fonte
2
Aqui estão os documentos para fazer isso, incluindo obter o TelemetryConfiguration por meio de injeção de dependência: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl
0

A partir do ASP.NET Core 3.1:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;

(o acima pode ser chamado de qualquer lugar, mas quanto antes no ciclo de vida do seu aplicativo, melhor).

Ambos podem ser usados ​​juntos para suprimir todas as atividades do Application Insights em seu código. Eu #if DEBUGprotejo com uma diretiva para garantir que AppInsights não faça nada em minha máquina local, mas emita eventos quando carregado em nosso servidor de desenvolvimento do Azure:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Ian Kemp
fonte