Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
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. Essas verificações garantem que o sistema funcione de forma correta e eficiente. As verificações de integridade são essenciais para a confiabilidade do sistema e normalmente são executadas em intervalos regulares com os resultados analisados para tomada de decisão e ações corretivas.
Os seguintes resultados de status de verificação de integridade são possíveis:
Além disso, 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
.
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 instância IServiceCollection, encadeie uma chamada de AddHealthChecks para AddResourceUtilizationHealthCheck. O exemplo a seguir demonstra como usar o método de extensão AddResourceUtilizationHealthCheck
para adicionar uma verificação de integridade de utilização de recursos a uma instância IServiceCollection
:
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:
app
.Para executar verificações de integridade nos eventos de tempo de vida do IHostApplicationLifetime, use o método de extensão AddApplicationLifecycleHealthCheck disponível no pacote NuGet Microsoft.Extensions.Diagnostics.HealthChecks.Common.
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 irá relatar o aplicativo como não íntegro. Quando o aplicativo começar a desligar, o provedor irá relatar o aplicativo como não íntegro.
A biblioteca expõe um HealthCheckService que permite que os consumidores solicitem uma verificação de integridade a qualquer momento. Considere a seguinte implementação ExampleService
:
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:
ExampleLifecycle
que implementa a interfaceIHostedService.CheckHealthAsync
.ReadyAsync
que invoca o método CheckHealthAsync
.CheckHealthAsync
que captura o nome do chamador e o token de cancelamento e solicita uma verificação de integridade da instância HealthCheckService
. Em seguida, a result
é registrada.A única vez que o serviço de verificação de integridade relatará um status de HealthStatus.Healthy é depois que o aplicativo for iniciado e antes da interrupção ser chamada. Considere o seguinte 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:
builder
.ExampleService
como o único IHostedServicedo aplicativo.healthChecksBuilder
para adicionar mais verificações de integridade.app
.IHostedService
do provedor de serviços, essa é a instância ExampleService
.DelayAndReportAsync
, que atrasa 500 milissegundos e invoca o método ReadyAsync
na instânciaExampleService
, avaliará a verificação de integridade.app
.O aplicativo gera logs na seguinte ordem, relatando o status de verificação de integridade conforme ele se relaciona com os eventos do ciclo de vida:
StartingAsync
: Não ÍntegroStartAsync
: Não ÍntegroStartedAsync
: Não ÍntegroReadyAsync
: ÍntegroStoppingAsync
: Não ÍntegroStopAsync
: Não ÍntegroStoppedAsync
: Não ÍntegroEm 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, consulte Verificações de integridade no ASP.NET Core.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraTreinamento
Módulo
Implementar resiliência em um microsserviço nativo de nuvem - Training
Este módulo orienta você pela implementação da resiliência em um aplicativo de microsserviços do .NET em um Serviço de Kubernetes.
Documentação
Verificações de integridade no ASP.NET Core
Saiba como configurar verificações de integridade para a infraestrutura do ASP.NET Core, como aplicativos e bancos de dados.
Monitoramento de integridade - .NET
Explore uma maneira de implementar o monitoramento de integridade.