Compartilhar via


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 valor text/plain de Healthy quando o aplicativo está ativo.

Os métodos e também aplicam várias configurações ao seu aplicativo, além de apenas verificações de saúde, como as configurações de descoberta de serviço e .

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