Implementando Health Checks no ASP .NET Core



...

Fala galeros, como cês tão? Eu estou bem, e hoje aqui trazendo mais um artigo bem rápido, dessa vez sobre um tema que cresce cada dia mais.

Bom, vamos falar sobre monitoramento utilizando o health checks no ASP .NET Core, como esse pacote pode te ajudar a verificar a integridade e funcionamento do seu projeto!

 

 

Por Que Monitorar Sua Aplicação?

 

Hoje em dia com cenários e aplicações cada vez mais críticas precisamos ter a certeza e garantir para nosso usuário final que nossa aplicação está funcionando corretamente, ou seja, nosso software deve cumprir os princípios de DISPONIBILIDADE E CONFIABILIDADE.

Esses 2 são parte de um conjunto de princípios que indicam se um software está pronto ou não para produção.

Disponibilidade é basicamente garantir que o SLA (o tempo no qual está ativo) seja cumprido, ou seja, que nosso software esteja o máximo de tempo possível disponível.

Confiabilidade é garantir que nosso serviço seja confiável e íntegro, ou seja, o usuário final e outros serviços podem confiar no nosso software, seja na integridade dos dados ou na disponibilidade.

No ASP .NET Core temos um pacote que pode nos ajudar a verificar alguns pontos do nosso serviço, esse pacote se chama Microsoft.AspNetCore.Diagnostics.HealthChecks.

 

 

Como Funciona o Health Checks?

 

Basicamente você terá um endpoint /health (ou qualquer path relativo que você queira definir) onde ao realizar o GET a aplicação irá realizar uma série de verificações em cima da integridade do seu software.

O pacote do Health Checks já é nativo no ASP .NET Core, então na sua Startup basta usar:

Startup.cs

 

Nesse caso o que ele irá fazer, verificar se a aplicação está rodando corretamente, se o pipeline de execução e todos os middlewares estão funcionando e se não tem nenhum pacote faltando ou corrompido.

Ao acessar o endpoint /health e tudo estiver OK temos o seguinte status.

 

Caso tenha algo errado, teremos o seguinte.

 

OBS: Tanto para projetos MVC quanto para projetos API o retorno é o mesmo.

 

 

Verificando a Integração Com a Base de Dados

 

Uma coisa é fato, verificar somente se os componentes do projeto estão funcionando corretamente não é o suficiente, afinal caso seu banco de dados esteja fora ar sua aplicação não está confiável e muito menos disponível.

Por sorte a Microsoft desenvolveu uma extensão do Health Checks para verificar a integração com base de dados utilizando o Entity Framework Core, basta instalar o pacote:

Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore

E então adicionar ao pipeline a verificação de base de dados através do contexto!

Startup.cs

 

Nesse cenário além de realizar a verificação de integridade da aplicação ele também verifica se o banco está disponível, se a conexão entre aplicação e banco pode ser feita corretamente e principalmente se o banco está mapeado corretamente (entidade -> tabela) no contexto do EF Core.

Esse é um dos melhores recursos a se usar!

 

 

Segurança

 

Bom, não queremos deixar nosso endpoint de verificação de integridade público, afinal nem todo mundo deve ou pode saber se nossos serviços estão funcionando 100% corretamente, ainda mais serviços internos que não são expostos para o cliente.

Pensando nisso o Health Checks tem um middleware que implementa Autenticação e Autorização, ou seja, para consumir o endpoint, você DEVE estar autenticado e autorizado, seja com um cookie ou um token.

Para fazer isso é bem simples, basta adicionar o RequireAuthorization() na configuração de pipeline.

Startup.cs

 

Agora caso você tente acessar a rota de /health sem estar autenticado (cookie, Jwt ou outro middleware do ASP .NET Core) você receberá 401.

 

 

Verificações Customizadas

 

A coisa mais comum hoje em dia é nossa aplicação depender de outras aplicações e serviços nesses cenários precisamos criar verificações customizadas para verificar serviços externos no qual dependemos.

Outro ponto bem bacana do Health Checks e a possibilidade de criar suas próprias verificações de integridade, no exemplo a seguir irei fazer uma consulta para uma API de Skins de CSGO (um jogo de FPS que eu particularmente gosto muito) para ver se ela está funcionando.

 

Primeiro a gente precisa criar a verificação customizada.

SteamMarketplaceCheck.cs

 

Basicamente fiz um GET no endpoint de marketplace da Steam e caso esteja no ar (retorno 200) o middleware retorna Healthy, se estiver fora do ar retornará Unhealthy.

Para usar é só adicionar o middleware nos serviços.

 

Dessa forma ele irá chamar nossa verificação customizada quando acessarmos o /healthy.

O que eu acho mais bacana é que podemos adicionar quantas verificações quisermos!

 

 

Conclusão

 

Hoje vimos um recurso muito útil e importante que nos ajuda a monitorar e garantir integridade na nossa aplicação inteira, particularmente eu aplico o Health Checks em todos os meus projetos e ele já me salvou em diversas situações!

Espero que tenha ficado claro a importância do uso dessa ferramenta.

Agradeço a atenção e bons estudos!!!!!

Caso precise entrar em contato, me mande uma mensagem aqui.

Baixe o projeto clicando aqui.

 

AVISO

Minha nova plataforma já está em construção! irá conter todos os recursos dessa plataforma, cursos pagos e gratuitos, treinamentos, mentorias e muito mais, caso queira ter acesso antecipado (gratuito) e ser um dos primeiros a testar me mande um email em lucas.eschechola@outlook.com, obrigado!