Application Insights - ILogger + Data Sampling

Ola pessoALL,
Há um tempo escrevi um post sobre como redirecionar o log padrão do asp.net core para o Application Insights. Se voce não leu, leia aqui
Hoje irei fazer uma pequena atualização naquela configuração e mostrar como podemos desabilitar o sampling que eh automático em projetos asp.net core.
Para saber em detalhes sobre o sampling consulte a documentação
Em resumo, o sampling é muito bom para evitar que ultrapassemos o limite gratuito do Application Insights (até essa data são 5GB/mês) mas em alguns casos é interessante desabilitar para não perder logs importantes. (Por padrão a retenção do AI são 3 meses)
No meu caso armazeno logs de uma api que faz interface com gateways de pagamento e o AI é a parada número 1 quando algo de erro acontece e precisamos investigar mais a fundo, mas devido ao sampling recentemente aconteceu de uma requisição importante não aparecer nos logs.
Habilitando o redirecionamento do ILogger
Para redirecionarmos todos os logs da aplicação de uma maneira simples, basta atualizarmos o método CreateWebHostBuilder na classe Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging => {
logging.AddApplicationInsights();
logging.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Information);
});
Desabilitando Data Sampling
Para desabilitar o data sampling do Application Insights altere o método ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry(opts =>
{
// On the payments API we don't want to sample requests, since we need all the logs available
opts.EnableAdaptiveSampling = false;
// Disable heartbeat
opts.EnableHeartbeat = false;
// Reads the key from env variables or local configuration, defaults to testing app insithgs on azure.
opts.InstrumentationKey = Configuration.GetValue("APPINSIGHTS_INSTRUMENTATIONKEY", "");
});
}
(opcional) Habilitando log de parâmetros do EF
Um dos benefícios de redirecionar os logs do asp.net core é que podemos ver as queries executadas no banco e o tempo de cada uma, que auxilia bastante na melhora da performance.
Em alguns casos precisamos ter o valor dos parâmetros de fácil acesso para simular a query e ajudar o DBA com o tunning. O que vou mostrar a seguir não é recomendável em produção. Use por sua conta e risco.
services.AddDbContext<DataContext>(opts =>
{
opts.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
providerOptions => providerOptions.EnableRetryOnFailure());
// Habilita o log do valor dos parâmetros.
opts.EnableSensitiveDataLogging();
});
Conclusão
Espero ter ajudado vocês a ter mais informações sobre a execução da aplicação. Desabilite o data sampling em casos específicos e sempre fique atento aos custos do Application Insights.
[]s e até a próxima!