Gerenciando a integridade de suas aplicações em AspNet Core
Tags: dotnet, jundevelopers, aspnetcore, healthcheck
Published: 2019-09-30 13:04:59

Olá pessoal, tudo bem?

Com o crescimento dos microserviços, temos a preocupação de saber se as nossas aplicações, banco de dados, serviços e etc, estão rodando normalmente, se nenhum deles está fora do ar.

Para isso existe um pacote do nuget muito legal, que se chama: 
*AspNetCore.Diagnostics.HealthChecks

Verifique se pelo o que você precisa, existe a o pacote específico, veja em:
[https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks](https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks)

Para o controle de aplicações, serviços, banco de dados, existe um pacote complementar para cada um. 

Como por exemplo:
- AspNetCore.HealthChecks.MongoDb
- AspNetCore.HealthChecks.RabbitMQ
- AspNetCore.HealthChecks.Kafka
- AspNetCore.HealthChecks.Uris

Vamos fazer um exemplo, da utilização desse pacote.

######Estrutura da solução
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/bne7tlq1ub1donrbc09d.PNG)

Veja que criei duas API´s.

Neste exemplo, quero gerenciar o meu banco de dados que será em Mongodb, meu serviço de fila que será Kafka, e API *exemplohealthchecks2*.

Para o projeto **ExemploHealthChecks** adicione as referências:
* Install-Package AspNetCore.HealthChecks.MongoDb
* Install-Package AspNetCore.HealthChecks.Kafka
* Install-Package AspNetCore.HealthChecks.Uris
* Install-Package AspNetCore.HealthChecks.UI
* Install-Package AspNetCore.HealthChecks.UI.Client

Veja como configurar o Kafka, no meu post sobre o serviço:
[https://dev.to/marraia](https://dev.to/marraia/utilizando-kafka-em-suas-aplicacoes-aspnet-core-2ieo)


Configure no Startup.cs, os endereços dos serviços que iremos monitorar:
{% gist https://gist.github.com/marraia/271a4957f1193ed2535ea5da9c97ffdc %}

Veja que na linha 19, estamos adicionando os serviços que vamos monitorar, com seus respectivos endereços

```
    services.AddHealthChecks()
      .AddMongoDb(connectionMongo, name: "mongoDb")
      .AddKafka(configKafka, name: "kafka")
      .AddUrlGroup(new Uri(enderecoExemplo2), name: "exemploHelathChecks2");
```

E na linha 25, vamos adicionar um dashboard para visualizar a integridades dos serviços configurados

```
services.AddHealthChecksUI();
```

O pacote do Health com esse Dashboard, cria um arquivo chamado **healthchecksdb** que irá armazenar os dados coletados dos serviços, como uma especie de banco de dados.

Na linha 38, estamos gerando uma URL para o Dashboard do Health. Para funcionar corretamente essa URL, temos que adicionar ao arquivo *appsettings.json* essa configuração:
```
"HealthChecks-UI": {
    "HealthChecks": [
      {
        "Name": "Health-ExemploAPI",
        "Uri": "http://localhost:61303/health-marraia"
      }
    ]
  }
```

E na linha 45, ativamos o Dashboard, para ser utilizado depois que aplicação for iniciada.

Depois de configurado, vamos executar o projeto.

Agora, para abrir o Dashboard do Health que configuramos, vamos abrir esse link:
*http://localhost:61303/healthchecks-ui*

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/9fgqwnxden1yagussips.PNG)

Veja que ele verifica em um tempo configurado, a integridades dos serviços. No exemplo, todos os serviços estão no ar.

Agora, não irei executar a API *exemploHealthChecks2*, para mostrar que ficará diferente a visualização no Dashboard

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/qogeqtwh9hb45pb8gm3x.PNG)

Veja que a API *exemploHealthChecks2*, fica com um estado de **Unhealthy**

Bom pessoal, este exemplo é bem simples, somente para mostrar como de forma fácil e simples, criar um monitoramento de seus serviços e aplicações.

Espero que tenham gostado, segue o projeto que utilizei de exemplo em meu Github:

[marraia/HealthChecks](https://github.com/marraia/ExemploHealthChecks)

Até a próxima!