.NET 5 + Health Checks: exemplos de implementação em projetos ASP.NET Core

Renato Groffe
5 min readMar 22, 2021

--

Mecanismo presente desde a versão 2.2 do ASP.NET Core, a implementação de Health Checks possibilita que endpoints HTTP que retornam o estado da saúde de uma aplicação sejam criados sem grandes esforços de codificação. Trata-se inclusive de uma capacidade bastante interessante para integrações com soluções de monitoramento, combinando sem complicações com alternativas como o Application Insights ou em implementações como liveness probes com Kubernetes.

Podemos inclusive ir além do que é oferecido por default pela plataforma, valendo-se para isto de packages disponibilizados pelo projeto open source Xabaril. Tais pacotes permitem detectar problemas com os mais variados tipos de dependências em uma aplicação (bancos de dados, comunicação com APIs REST, serviços em nuvem, mensageria…).

Já abordei anteriormente neste blog o uso de Health Checks nos seguintes posts:

ASP.NET Core + Health Checks: monitorando a saúde de uma aplicação via dashboard

Monitorando recursos com o ASP.NET Core, Health Checks, Azure Logic Apps e o Slack

ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor - Parte 2

Neste novo artigo retomo este assunto, dessa vez trazendo exemplos de implementação baseados no .NET 5.

E aproveito este espaço para um convite…

No dia 12/04/2021 (segunda) às 21:00 - horário de Brasília — teremos mais um evento online e gratuito no Canal .NET.

Desta vez farei uma apresentação com dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 5, ASP.NET Core e Azure Functions. Ao longo da live será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria, bancos de dados e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-backend-dotnet5-mar-2021

O básico sobre Health Checks em ASP.NET Core

No projeto indicado a seguir foram definidos 2 endpoints com Health Checks para um site baseado em .NET 5 + ASP.NET Core + Razor Pages:

.NET 5 + ASP.NET Core + Razor Pages + Contagem de Acessos + Azure Application Insights + Health Checks + Docker + Linux

Na listagem seguinte temos a implementação da classe Startup:

  • Este exemplo específico não depende de nenhum package adicional para a configuração de Health Checks;
  • Para ativar esse recurso será feita uma chamada ao método AddHealthChecks em ConfigureServices (linha 27);
  • Um primeiro endpoint (/status-text) foi declarado através de uma chamada a UseHealthChecks em Configure (linha 45). O retorno deste Health Check estará em formato texto, o que representa o default;
  • Já no segundo endpoint (/status-json, linha 46) foi customizado o formato dos dados (JSON) gerados, por meio do uso de uma instância do tipo HealthCheckOptions.

Ao acessar o endpoint /status-text via Postman teremos como resultado (note o código de retorno 200 - OK, um indicativo de que a aplicação se encontra saudável):

Já um teste com o endpoint /status-json também produzirá o código 200 como retorno, só que desta vez com uma string JSON indicando o estado da aplicação:

Indo além com packages do projeto Xabaril

No próximo repositório temos o exemplo de uma aplicação Web em que foi definido um dashboard de monitoramento baseado no projeto Xabaril. Embora tal aplicação possua apenas o intuito de monitorar recursos, poderíamos ainda assim empregar os mesmos pacotes na configuração de Health Checks em uma Web App convencional (site ou API REST, por exemplo):

.NET 5 + ASP.NET Core + Health Checks + Xabaril + Dashboard + SQL Server + MongoDB + Apache Kafka + RabbitMQ + Monitoramento de Recursos

Foram adicionados neste projeto os packages:

  • AspNetCore.HealthChecks.UI e AspnetCore.HealthChecks.UI.Client, para a geração do dashboard de monitoramento de Health Checks;
  • AspNetCore.HealthChecks.UI.InMemory.Storage, para o armazenamento dos dados utilizados pelo dashboard em memória (SQL Server e PostgreSQL estão também entre as possibilidades);
  • AspNetCore.HealthChecks.SqlServer e AspNetCore.HealthChecks.MongoDb, para o monitoramento de instâncias/bases do SQL Server e MongoDB;
  • AspNetCore.HealthChecks.Kafka e AspNetCore.HealthChecks.RabbitMQ, a fim de possibilitar o monitoramento de instâncias do Apache Kafka e RabbitMQ.

Na listagem a seguir temos o conteúdo do arquivo appsettings.json:

  • Na seção ConnectionStrings ficarão as informações das strings de conexão utilizadas pelos Health Checks;
  • Já na seção HealthChecks-UI está o endereço do endpoint contendo o estado de cada Health Check empregado no monitoramento (/healthchecks-data-ui).

E por fim chegamos à implementação da classe Startup:

  • Ao invocar AddHealthChecks em ConfigureServices também foram acionados os métodos AddKafka, AddRabbitMQ, AddSqlServer e AddMongoDb a fim de possibilitar a conexão com instâncias dos 4 serviços sujeitos a monitoramento. Podemos nomear as dependências preenchendo o atributo name, assim como definir tags para as mesmas (por meio de um array de strings);
  • A chamada a AddHealthChecksUI permite configurar a interface do dashboard de monitoramento. Para este exemplo o método AddInMemoryStorage fará com que o armazenamento dos dados requeridos pela UI aconteça em memória;
  • O endpoint /healthchecks-data-ui foi definido em Configure, invocando-se para isto o método UseHealthChecks (as especificações aqui informadas seguem o padrão esperado pelo dashboard);
  • Já a chamada a UseHealthChecksUI em Configure permite definir propriedades para o funcionamento do dashboard (acessível no endpoint /monitor).

Na próxima imagem podemos observar um problema com a conexão ao MongoDB:

Corrigido o problema com a conexão, o dashboard de monitoramento do Xabaril indicará o status normal para todas as dependências:

E termino este espaço com um convite…

Que tal participar da Formação Azure DevOps promovida pelo Azure na Prática e aprender em profundidade como melhorar o seu ciclo de desenvolvimento na sua empresa? Trabalhe com seu time de forma colaborativa e ainda utilizando as melhores técnicas e práticas, a fim de garantir a qualidade do software que está sendo desenvolvido!

Acompanhe com comodidade e a qualquer tempo os diversos módulos deste treinamento, em que serão cobertas boas práticas + estratégias de build/deployment e o uso desta solução de automação com tecnologias como o próprio .NET, Azure Functions, Selenium WebDriver, Docker, Kubernetes, Azure App Service e outros serviços da nuvem Microsoft!

Acesse então o link a seguir para efetuar sua inscrição com um desconto especial de 10% (inclui certificado e grupo para resolução de dúvidas durante e após o curso):

https://bit.ly/anp-azuredevops-desc-blog-groffe

--

--

Renato Groffe

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