Monitorando aplicações .NET com o Elastic APM

Em um cenário digital, onde o desempenho e a confiabilidade são primordiais, monitorar a integridade e o comportamento das suas aplicações é primordial. À medida que sistemas distribuídos complexos e microsserviços tornam-se comuns, as abordagens tradicionais de monitoramento falham ao fornecer insights completos sobre como sua aplicação está se comportando. É aí que as ferramentas de performance de aplicações (APM) entram em cena, oferecendo uma visão abrangente sobre todo o ciclo de vida, desde a execução do seu código até a utilização da sua infraestrutura.

Quando se trata de monitorar aplicações .NET, o Elastic APM surge como uma solução poderosa. Aproveitando os recursos do Elastic Stack, incluindo Elasticsearch, Kibana e Beats, o Elastic APM fornece aos desenvolvedores e equipes de operações visibilidade em tempo real do funcionamento interno de suas aplicações .NET. (Para entender mais sobre o Elasticsearch eu indico esta série de artigos)

Neste guia, exploraremos como o Elastic APM pode ajudá-lo a monitorar e otimizar o desempenho de suas aplicações .NET de maneira eficaz.

Pré-requisitos

Web API

Na classe program.cs da API, configure conforme o código abaixo:

As extensões principais dessa classe são:

  • AddSerilog: Responsável por registrar o provedor de logs da aplicação e exportar os dados para o Elasticsearch.
  • AddElasticsearch: Responsável por registrar a comunicação com o Elasticsearch.
  • UseElasticApm: Responsável por registrar a comunicação com o Elastic APM.

A extensão AddSerilog contém o seguinte código:

Repare que todos os logs da aplicação são exportados para o Console e Elasticsearch ao chamar a propriedade WriteTo.

Já a extensão AddElasticsearch contém o seguinte código:

E por fim, temos a extensão UseElasticApm que realiza o registro das configurações no Elastic APM:

Configurando o Elastic APM

No código de exemplo deste projeto existe o arquivo docker-compose.yml responsável por provisionar toda infraestrutura necessária para instalação do Elasticsearch, Kibana e Elastic APM. Para executar, basta entrar na pastar src do projeto e rodar o comando abaixo:

docker-compose up

Em seguida, acesso o painel do Kibana, pelo link:

http://localhost:5601

Na sequência, cliquei no item de menu APM e configure o Elastic APM clicando no link Add data:

Configure o APM para a linguagem .NET e copie o exemplo de configuração do appsettings.json. Clique em Launch APM para finalizar a configuração.

Depois de tudo configurado no Elastic APM, é hora de ajustar o appsettings.json da API de exemplo:

As chaves ElasticsearchSettings e ElasticApm são responsáveis pela comunicação com o Elastic Stack. Todo log de texto gerado pelo Serilog será replicado para o banco Elasticsearch e toda telemetria (logs, traces e métricas) serão gravados no Elastic APM para tomada de decisões.

Mais informações sobre a configuração do Serilog você encontra aqui.

Testando

Para realizar os testes, execute todos os endpoints no swagger para geração de logs no Elasticsearch:

Cada endpoint gera um tipo de telemetria no Elasticsearch e Elastic APM. Agora vamos analisar todos os logs criando um modelo de visualização de dados no Kibana.

Logs do Elasticsearch

Abra o Kibana e clique em Stack Management e em seguida clique em Data Views:

Na sequência, clique em Create data view e crie um modelo com nome de indexlog e em Index pattern coloque indexlogs* para criar o padrão de listagem de registros que foi configurado na propriedade IndexFormat do Serilog. Clique em Save data view to Kibana para finalizar.

Em seguida, volte ao menu inicial do Kibana e clique em Discover e selecione o Data view indexlog. Nesta tela é possível criar filtros, gráficos, alertas e muito mais.

Logs do Elastic APM

Abra o Kibana e clique no item de menu APM, será listado a aplicação configurada com o nome inserido no appsettings.json da API:

Clique no nome da aplicação e analise as telemetrias geradas pela aplicação:

É possível analisar a latência das chamadas de cada componente da sua aplicação. No caso abaixo é possível entender que houve uma latência de quase 7 segundos para criar o banco, executar as migrations pelo EF Core e realizar a consulta:

É possível configurar vários outros tipos de coletas no Elastic APM para enriquecer sua análise, inserindo novos packages pelo nuget, visto aqui: https://www.elastic.co/guide/en/apm/agent/dotnet/current/packages.html

Também é possível analisar todas as dependências externas que a sua aplicação realiza. Este recurso é muito útil para entender quem está conectado na sua aplicação e com o que sua aplicação está se conectando:

Finalizando

Em resumo, a implementação do Elastic APM para monitorar aplicações .NET oferece uma solução poderosa para entender e otimizar o desempenho de suas aplicações. Ao fornecer insights detalhados sobre transações, erros e métricas, o Elastic APM capacita os desenvolvedores a identificar gargalos, resolver problemas de desempenho e melhorar a experiência do usuário.

Com sua integração perfeita com o ecossistema Elastic, essa ferramenta não apenas simplifica o processo de monitoramento, mas também se torna uma peça essencial para garantir a saúde e a eficiência de suas aplicações .NET.

Os detalhes completo desta série você encontra no meu GitHub: https://github.com/hgmauri/elastic-apm-dotnet

Deixe uma resposta