O Health Check Pattern é um padrão de projeto do tipo observability, para arquitetura de microsserviços;
Padrão de monitoramento do ponto de extremidade de integridade (Microsoft)
É uma boa prática e geralmente um requisito de negócios para monitorar serviços back-end e aplicativos Web e garantir que eles estejam disponíveis e funcionando corretamente. No entanto, é mais difícil monitorar serviços em execução na nuvem do que monitorar serviços locais. Por exemplo, você não possui o controle total do ambiente de hospedagem e os serviços geralmente dependem de outros serviços fornecidos por fornecedores de plataformas e outros.
Implement health checks in ASP.NET Core services (eShopOnContainers)
O aplicativo eShopOnContainers é um aplicativo de referência de software livre para .NET Core e microsserviços criado para ser implantado usando contêineres do Docker. O aplicativo consiste em vários subsistemas, incluindo vários front-ends de interface do usuário de e-Store (um aplicativo Web MVC, um SPA da Web e um aplicativo móvel nativo). Ele também inclui os microsserviços e os contêineres de back-end de todas as operações do servidor necessárias.
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, and Microsoft employee.
Instale o packager correspondente as dependências do seu projeto, ou crie o seu;
ex:
- Sql Server;
- Redis;
- RabbitMQ;
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHealthChecks()
.AddSqlServer(Configuration["Data:ConnectionStrings:Sql"])
.AddRedis(Configuration["Data:ConnectionStrings:Redis"]);
...
}
Instaler o package AspNetCore.HealthChecks.UI.Client e disponibilize a rota que mostrará a saúde desse serviço:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks("/hc", new HealthCheckOptions()
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
});
....
}
Instale o packager AspNetCore.HealthChecks.UI e uma base de dados para esse portal, esse exemplo vou instalar InMemory, portanto usarei o AspNetCore.HealthChecks.UI.InMemory.Storage, confira outro aqui, ele precisa de uma base de dados, pois ele registra o tempo de indisponibilidade de uma dependência.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHealthChecks();
services
.AddHealthChecksUI(
setup =>
{
setup.AddHealthCheckEndpoint("Microsservice.One", "https://localhost:44385/hc");
setup.AddHealthCheckEndpoint("Microsservice.Two", "https://localhost:44332/hc");
})
.AddInMemoryStorage();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseRouting()
.UseEndpoints(config =>
{
config.MapControllers();
config.MapHealthChecksUI();
});
app.UseHealthChecksUI(setup =>
{
setup.UIPath = "/hc-ui";
});
...
}
O painel de monitoramente por padrão tem essa aparencia:
Caso queira customizar, seguir documentação a aqui.