ASP.NET Core + Application Insights: monitorando o uso de Dapper, Entity Framework e NHibernate
Recentemente participei de uma live no canal Azure na Prática, em que abordei o uso do Azure Application Insights no monitorando dos comandos SQL gerados por soluções de acesso a dados como Dapper, Entity Framework Core e FluentNHibernate.
E por que utilizar este serviço para monitoramento? Além de uma solução de baixo custo e com muitos recursos (incluindo até consultas via query a logs gerados), a configuração do Application Insights envolve um esforço mínimo de codificação!
A gravação está disponível no YouTube e pode ser assistida gratuitamente:
Utilizei para os testes nesta apresentação o seguinte projeto:
Os testes envolveram uma consulta de estados por região (um clássico exemplo de um para muitos), baseando-se para isto nas tabelas Regioes e Estados:
Independente da solução de acesso a dados acionada, a aplicação produzirá através de 3 Controllers demonstrando o uso de cada framework um resultado similar ao que consta na seguinte imagem:
O repositório contendo os scripts de criação e também para carga de dados nestas tabelas já se encontra no GitHub:
SQL Server + Dados Geográficos do Brasil
A fim de gerar uma amostragem de dados de logs utilizei o Artillery.io, uma alternativa testes de carga que pode ser facilmente instalada via npm (considerei ainda a execução do projeto de testes localmente, porém apontando para um recurso do Application Insights criado no Azure):
A seguir podemos observar por meio da funcionalidade Logs do Application Insights o resultado destes acessos ao banco de dados de testes empregando Dapper:
Com FluentNHibernate:
E finalmente com Entity Framework Core:
As consultas que realizei nos logs do Application Insights estão na próxima listagem, com as mesmas fazendo uso de um padrão conhecido como Kusto Query Language:
Os testes com Entity Framework Core geraram a query a seguir, logada automaticamente através do Application Insights:
Analisando especificamente a utilização de Entity Framework Core, temos a próxima listagem com o Controller realizando uma consulta através deste ORM:
- Nota-se que não há nenhum código aqui logando qualquer informação do Entity Framework Core;
- O simples fato de ativarmos o uso do Application Insights foi suficiente para que se logasse a consulta SQL gerada pelo Entity Framework.
E como foi configurado o Application Insights para capturar todas as instruções SQL geradas por Entity Framework Core, Dapper e FluentNHibernate no projeto de exemplo?
Adicionei ao projeto a versão 2.12.1 do package Microsoft.ApplicationInsights.AspNetCore:
No arquivo appsettings.json incluí ainda a Instrumentation Key do Application Insights:
E finalmente na classe Startup será invocado o método AddApplicationInsightsTelemetry em ConfigureServices:
Deixo a recomendação para você que está lendo este artigo para que também assista à live no canal Azure na Prática. As diversas ações que realizei no vídeo simplificarão em muito o entendimento geral do que expus aqui neste blog.
E para concluir faço um convite…
Caso você precise conhecer mais sobre o Microsoft Azure como um todo, não deixe de aproveitar o preço promocional com desconto (apenas R$ 170,00) da segunda turma online do treinamento Azure na Prática com foco em Desenvolvimento Web que acontecerá dia 20/06/2020 (um sábado).
Aproveite para aprender mais sobre serviços como Azure App Service (para hospedagem de Web Apps, com suporte a ASP.NET Core e Docker), Azure Storage, Azure Functions + Logic Apps (soluções serverless), Azure App Configuration + Key Vault (para o gerenciamento descomplicado e seguro de configurações), monitoramento com Application Insights, além de dicas cobrindo as diferentes possibilidades oferecidas pelo Azure… E o melhor, no conforto de sua casa! Acesse o link a seguir para informações e efetuar sua inscrição: