ASP.NET Core + Application Insights: monitorando o uso de Dapper, Entity Framework e NHibernate

Renato Groffe
Azure na Pratica
Published in
4 min readJun 4, 2020

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:

ASP.NET Core 3.1 + Dapper + Entity Framework Core + SQL Server + FluentNHibernate + Azure Application Insights + Análise de instruções SQL geradas

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:

https://bit.ly/anp-web3-blog-groffe

--

--

Renato Groffe
Azure na Pratica

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker