Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Em um sistema distribuído, as verificações de integridade são avaliações periódicas do status, disponibilidade e desempenho de nós ou serviços individuais. Estas verificações garantem que o sistema funciona correta e eficientemente. As verificações de integridade são essenciais para a confiabilidade do sistema e normalmente são realizadas em intervalos regulares com os resultados analisados para a tomada de decisões e ações corretivas.
Os seguintes resultados do estado da verificação de saúde são possíveis
Além disso, as verificações de integridade geralmente relatam várias métricas de diagnóstico. Para obter mais informações, consulte Métricas de diagnóstico: Microsoft.Extensions.Diagnostics.HealthChecks
.
Verificações de integridade de utilização de recursos
Para executar verificações de integridade na utilização de recursos de seus aplicativos .NET, adicione uma referência de pacote a Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization. Em uma IServiceCollection instância, encadeie uma chamada de AddHealthChecks para AddResourceUtilizationHealthCheck. O exemplo a seguir demonstra como usar o AddResourceUtilizationHealthCheck
método extension para adicionar uma verificação de integridade de utilização de recursos a uma IServiceCollection
instância:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHealthChecks()
.AddResourceUtilizationHealthCheck();
var app = builder.Build();
var healthCheckService = app.Services.GetRequiredService<HealthCheckService>();
var result = await healthCheckService.CheckHealthAsync();
Console.WriteLine($"{result.Status} {result.TotalDuration}");
app.Run();
O código anterior:
- Cria uma nova HostApplicationBuilder instância.
- Adiciona uma verificação de integridade para utilização de recursos encadeando uma chamada da AddHealthChecks chamada para o AddResourceUtilizationHealthCheck método de extensão.
- Cria a IHost instância como a
app
variável. - Obtém uma instância da HealthCheckService classe do provedor de serviços.
- Executa uma verificação de integridade e exibe o resultado.
- Executa o aplicativo.
Verificações de integridade do tempo de vida do aplicativo
Para executar verificações de integridade nos eventos de tempo de vida do aplicativo do , use o método de IHostApplicationLifetimeextensão disponível no AddApplicationLifecycleHealthCheck.
Esse provedor indicará que o aplicativo está íntegro somente quando estiver totalmente ativo. Até que o objeto de tempo de vida indique que o aplicativo foi iniciado, o provedor relatará o aplicativo como não íntegro. Quando o aplicativo começar a ser desligado, o provedor relatará o aplicativo como não íntegro.
A biblioteca expõe uma possibilidade de HealthCheckService os consumidores solicitarem um exame de saúde a qualquer momento. Considere a seguinte ExampleService
implementação:
using System.Runtime.CompilerServices;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
internal class ExampleLifecycle(
HealthCheckService healthCheckService,
ILogger<ExampleLifecycle> logger) : IHostedLifecycleService
{
Task IHostedService.StartAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StartedAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StartingAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedService.StopAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StoppedAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StoppingAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
public Task ReadyAsync() => CheckHealthAsync();
private async Task CheckHealthAsync(
[CallerMemberName] string eventName = "",
CancellationToken cancellationToken = default)
{
HealthReport result =
await healthCheckService.CheckHealthAsync(cancellationToken);
logger.LogInformation(
"{EventName}: {Status}", eventName, result.Status);
}
}
O código anterior:
- Define uma nova
ExampleLifecycle
classe que implementa a IHostedService interface. - Define um construtor primário aceitando os seguintes parâmetros:
- Uma instância da HealthCheckService classe.
- Uma instância da ILogger<TCategoryName> classe.
- Implementa a IHostedLifecycleService interface, com cada método invocando o
CheckHealthAsync
método. - Define um
ReadyAsync
método que invoca oCheckHealthAsync
método. - Define um método personalizado
CheckHealthAsync
que captura o nome do chamador e o token de cancelamento e, em seguida, solicita uma verificação de integridade daHealthCheckService
instância. Oresult
é então registado.
A única vez que o serviço de verificação de integridade relatará um status é depois que o aplicativo for iniciado e antes de HealthStatus.Healthy parar for chamado. Por favor, considere as seguintes Program.cs:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
var healthChecksBuilder = builder.Services
.AddHostedService<ExampleLifecycle>()
.AddHealthChecks()
.AddApplicationLifecycleHealthCheck();
// You could use the healthChecksBuilder instance to add more checks...
var app = builder.Build();
var services = app.Services.GetRequiredService<IEnumerable<IHostedService>>();
await Task.WhenAll(DelayAndReportAsync(services), app.RunAsync());
static async Task DelayAndReportAsync(IEnumerable<IHostedService> services)
{
// Ensure app started...
await Task.Delay(500);
var service = services.FirstOrDefault(static s => s is ExampleLifecycle);
if (service is ExampleLifecycle example)
{
await example.ReadyAsync();
}
}
O código anterior:
- Cria uma nova HostApplicationBuilder instância atribuindo como a
builder
variável. - Registra o
ExampleService
como o único IHostedServicedo aplicativo . - Adiciona uma verificação de integridade para os eventos de tempo de vida do aplicativo encadeando uma chamada da IHostApplicationLifetime instância retornada pela IHealthChecksBuilder chamada para o AddHealthChecks método de AddApplicationLifecycleHealthCheck extensão.
- A
healthChecksBuilder
instância pode ser usada para adicionar mais verificações de integridade.
- A
- Cria a IHost instância como a
app
variável. - Obtém um
IHostedService
do provedor de serviços, esta é aExampleService
instância. - Chamadas Task.WhenAll com duas referências de tarefas:
- O
DelayAndReportAsync
método, que atrasa por 500 milissegundos e, em seguida, invoca oReadyAsync
ExampleService
método na instância, avaliará a verificação de integridade. - O RunAsync(IHost, CancellationToken) método, inicia o
app
.
- O
O aplicativo gera logs na seguinte ordem, relatando o status da verificação de integridade em relação aos eventos do ciclo de vida:
-
StartingAsync
: Insalubridade -
StartAsync
: Insalubridade -
StartedAsync
: Insalubridade -
ReadyAsync
: Saudável -
StoppingAsync
: Insalubridade -
StopAsync
: Insalubridade -
StoppedAsync
: Insalubridade
Em outras palavras, esse provedor garante que a instância do aplicativo só receba tráfego quando estiver pronta. Se você estiver desenvolvendo aplicativos Web com o ASP.NET Core, há middleware de verificações de integridade disponível. Para obter mais informações, Verificações de integridade no ASP.NET Core.