Verificações de saúde no .NET.NET Aspire
As verificações de integridade fornecem informações de disponibilidade e estado sobre um aplicativo. As verificações de integridade geralmente são expostas como pontos de extremidade HTTP, mas também podem ser usadas internamente pelo aplicativo para gravar logs ou executar outras tarefas com base na integridade atual. Verificações de integridade normalmente são usadas em combinação com um serviço de monitoramento externo ou orquestrador de contêineres para verificar o status de um aplicativo. Os dados relatados por checagens de saúde podem ser usados para vários cenários.
- Influenciar decisões tomadas por orquestradores de contêineres, balanceadores de carga, gateways de API e outros serviços de gerenciamento. Por exemplo, se a verificação de integridade de um aplicativo em contêineres falhar, ele poderá ser ignorado pelo balanceador de carga ao rotear o tráfego.
- Verifique se as dependências subjacentes estão disponíveis, como um banco de dados ou cache, e retorne uma mensagem de status apropriada.
- Dispare alertas ou notificações quando um aplicativo não estiver respondendo conforme o esperado.
.NET .NET Aspire pontos de extremidade de verificação de integridade
.NET
.NET Aspire expõe dois endpoints HTTP de verificação de integridade padrão em ambientes de desenvolvimento quando os métodos AddServiceDefaults
e MapDefaultEndpoints
são chamados do arquivo Program.cs:
O ponto de extremidade
/health
indica se o aplicativo está em execução normalmente e se está pronto para receber solicitações. Todas as verificações de integridade devem passar para que o aplicativo seja considerado pronto para aceitar o tráfego após a inicialização.GET /health
O ponto de extremidade
retorna um código de status HTTP 200 e um valor de quando o aplicativo está funcionando corretamente. O
/alive
indica se um aplicativo está em execução ou falhou e deve ser reiniciado. Somente as verificações de integridade marcadas com a tag de vivo devem passar para que o aplicativo seja considerado ativo.GET /alive
O endpoint
/alive
retorna um código de status HTTP 200 e um valortext/plain
de Healthy quando o aplicativo está ativo.
Os métodos
Ambientes de não desenvolvimento
Em ambientes de não desenvolvimento, os pontos de extremidade /health
e /alive
são desabilitados por padrão. Se você precisar habilitá-los, é recomendável proteger esses pontos de extremidade com vários recursos de roteamento, como filtragem de host e/ou autorização. Para obter mais informações, consulte Verificações de integridade no ASP.NET Core.
Além disso, pode ser vantajoso configurar tempos limite de solicitação e cache de saída para esses pontos de extremidade para evitar ataques de abuso ou negação de serviço. Para fazer isso, considere o seguinte método de AddDefaultHealthChecks
modificado:
public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)
{
builder.Services.AddRequestTimeouts(
configure: static timeouts =>
timeouts.AddPolicy("HealthChecks", TimeSpan.FromSeconds(5)));
builder.Services.AddOutputCache(
configureOptions: static caching =>
caching.AddPolicy("HealthChecks",
build: static policy => policy.Expire(TimeSpan.FromSeconds(10))));
builder.Services.AddHealthChecks()
// Add a default liveness check to ensure app is responsive
.AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);
return builder;
}
O código anterior:
- Adiciona um tempo limite de 5 segundos às solicitações de verificação de integridade com uma política chamada
HealthChecks
. - Adiciona um cache de 10 segundos às respostas de verificação de integridade com uma política chamada
HealthChecks
.
Agora considere o método MapDefaultEndpoints
atualizado:
public static WebApplication MapDefaultEndpoints(this WebApplication app)
{
var healthChecks = app.MapGroup("");
healthChecks
.CacheOutput("HealthChecks")
.WithRequestTimeout("HealthChecks");
// All health checks must pass for app to be
// considered ready to accept traffic after starting
healthChecks.MapHealthChecks("/health");
// Only health checks tagged with the "live" tag
// must pass for app to be considered alive
healthChecks.MapHealthChecks("/alive", new()
{
Predicate = static r => r.Tags.Contains("live")
});
return app;
}
O código anterior:
- Agrupa os pontos de extremidade de verificação de integridade no caminho identificado como
/
. - Armazena a saída em cache e especifica um tempo de solicitação com a política de
HealthChecks
correspondente.
Além dos métodos AddDefaultHealthChecks
e MapDefaultEndpoints
atualizados, você também deve adicionar os serviços correspondentes para tempos limite de solicitação e cache de saída.
No ponto de entrada do aplicativo de consumo apropriado (geralmente o arquivo Program.cs), adicione o seguinte código:
// Wherever your services are being registered.
// Before the call to Build().
builder.Services.AddRequestTimeouts();
builder.Services.AddOutputCache();
var app = builder.Build();
// Wherever your app has been built, before the call to Run().
app.UseRequestTimeouts();
app.UseOutputCache();
app.Run();
Para obter mais informações, consulte Middleware de tempo limite de solicitação em ASP.NET Core e middleware de cache de saída no ASP.NET Core.
Verificações de integridade de integração
As integrações .NET.NET Aspire também podem registrar checagens adicionais de saúde para o seu aplicativo. Essas verificações de saúde contribuem para o status retornado dos pontos de extremidade /health
e /alive
. Por exemplo, a integração .NET AspirePostgreSQL adiciona automaticamente uma verificação de integridade para verificar as seguintes condições:
- Uma conexão de banco de dados pode ser estabelecida
- Uma consulta de banco de dados pode ser executada com êxito
Se uma dessas operações falhar, a verificação de integridade correspondente também falhará.
Configurar verificações de integridade
Você pode desabilitar verificações de integridade para uma determinada integração usando uma das opções de configuração disponíveis. .NET .NET Aspire integrações suportam Microsoft.Extensions.Configurations para aplicar configurações por meio de arquivos de configuração, como appsettings.json:
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
Você também pode usar um delegado embutido para configurar verificações de integridade:
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Consulte também
- .NET checagens de saúde do aplicativo em C#
- verificações de integridade do no ASP.NET Core