Azure Application Insights no .NET 5

Application Insights é uma ferramenta de monitoramento de aplicações disponível na nuvem Azure que pode ser utilizado para detectar erros, alertas e acompanhamento de traces e métricas. Atualmente, as linguagens suportadas são: C# (.NET), Java, Javascript, Node.Js e Python.

O Application Insights é ideal para pequenos e médios cenários de monitoramento, onde é preciso entender o comportamento da aplicação, tempo de execução dos métodos e análise detalhadas do erros. É uma ótima ferramentas e quase que obrigatória se você tiver aplicações no Azure, mas cuidado, pois para ambiente com muita coleta de dados, seu preço fica elevado.

Agora, vamos direto ao ponto: Instalar, configurar e pontos de atenção do Applicatio Insights.

Configurando o Application Insights

O primeiro passo é configurar o Application Insights clicando no serviço conforme a imagem abaixo:

Agora precisamos configurar os dados básicos da instalação. Neste exemplo utilizaremos o Resource Mode como Classic, pelo fato dele não utilizar o Log Analytics para gerenciar os logs, o que é muito caro se você não souber utilizar corretamente. O modo Classic ficará disponível até fevereiro do 2024, até lá podemos utilizá-lo sem problemas.

Com o recurso criado, copie e guarde sua chave de instrumentação, ela será utilizada na configuração do projeto .NET:

Em seguida é preciso configurar o limite de utilização do Application Insights, isso evita que nossa fatura venha com o preço elevado.

Clique no item de menu Usage and estimated costs, em seguida clique em Data retention e configure para que os logs sejam guardados para no máximo em 30 dias:

Por último, configure o Daily volume cap para 0.6 (600mb por dia). O padrão é 100GB por dia, o que deixa absurdamente caro. Configurando em 600mb a captura fica limitada, e passando desse valor a coleta de log é congelada:

Configurando o Application Insights no .NET 5

Em nosso código, criaremos uma API utilizando o Serilog para centralizar e configurar os logs da aplicação com o Application Insights.

O Serilog, ao meu ponto de vista, é um pacote obrigatório nas aplicações .NET, com ele é possível configurar, manusear e gerenciar a forma como seus logs são registrados. Também é preciso saber utilizá-lo da forma correta, para não se tornar um vilão na sua infraestrutura, coletando todo tipo de log e deixando sua aplicação com latência.

O primeiro passo é configurar a classe program.cs, é por essa classe que se inicia a aplicação e precisamos configurar a coleta de logs desde o início:

Repare que em ConfigureLogging estamos removendo todos os providers (builder.ClearProviders()) de logs e incluindo apenas o Serilog, isso faz com que tenhamos apenas um provedor, evitando duplicidades e até otimizando a performance da aplicação.

Na extensão com o método AddSerilogApi, temos o código abaixo, onde é necessário instalar os pacotes nuget: Serilog.AspNetCore, Serilog.Exceptions e o principal: Serilog.Sinks.ApplicationInsights:

A classe SerilogExtensions.cs é responsável por configurar o provedor de logs, criando algumas regras específicas como:

  • No arquivo appsettings.json é preciso configurar a chave APPINSIGHTS_INSTRUMENTATIONKEY que copiamos logo após a instalação do Application Insights;
  • Registra todos os detalhes em caso de uma exception na aplicação;
  • Em todo registro de log será criado uma propriedade informando o nome da aplicação e o ambiente em que está;
  • Exclui registros de log que contenham fontes específicas (Para não trabalhar em modo verboso);
  • Envia todos os logs para o Application Insights e para a console da aplicação.

O método AddLiveMetrisApplicationInsights é responsável por enviar toda informação em tempo real para o painel Live Metrics do Application Insights:

Logo em seguida é necessário configurar o startup.cs:

Nele temos dois middlewares, um responsável por coletar todos erros da nossa aplicação (ErrorHandlingMiddleware) e outro por capturar informações adicionais dos logs (RequestSerilLogMiddleware):

Este middleware funciona coletando o UserName e CorrelationId de toda requisição, facilitando na rastreabilidade de algum erro, por exemplo.

Testando nossa aplicação .NET 5.0

Com a aplicação em execução, é possível verificar que todos os logs são expostos na console, conforme configurado na classe de extensão do Serilog:

Analisando o Application Insights, é possível acompanhar o Live Metrics expondo todos logs em tempo real, conforme nossa configuração do método AddLiveMetrisApplicationInsights:

Outro ponto interessante, é poder criar alertas através de métricas, sendo possível o envio de notificações por e-mail, SMS, webhook, entre outros. Para criar alertas, basta clicar no item de menu Metrics, escolher a métrica que deseja acompanhar e configurar o alerta em New alert rule:

O Application Insights é uma ferramenta sensacional, com ele é possível detectar automaticamente anomalias de desempenho e inclui ferramentas analíticas poderosas para ajudá-lo a diagnosticar problemas e entender o que os usuários realmente fazem com sua aplicação.

Para ambientes com grande coleta de logs o mais indicado é o Elasticsearch, o que também pode ser configurado e utilizado no Azure. Veja aqui: Elasticsearch no Azure

Os detalhes completos e as melhores configurações do Application Insights no .NET você encontra no meu GitHub: https://github.com/hgmauri/sample-application-insights

Deixe uma resposta