Partilhar via


Controlos de saúde em .NET.NET Aspire

As verificações de saúde fornecem informações de disponibilidade e estado sobre uma aplicação. As verificações de integridade geralmente são expostas como endpoints HTTP, mas também podem ser usadas internamente pela aplicação para gravar logs ou executar outras tarefas com base na integridade atual. As verificações de integridade geralmente são usadas em combinação com um serviço de monitorização externo ou orquestrador de contentores para verificar o estado de uma aplicação. Os dados relatados pelas verificações de integridade podem ser usados para vários cenários:

  • Influencie 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 uma aplicação em contêiner falhar, ela poderá ser ignorada 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 finais de verificação de integridade

expõe dois endpoints HTTP padrão para verificação de integridade em ambientes de e de desenvolvimento quando os métodos e são chamados a partir do ficheiro :

  • O ponto de extremidade /health indica se a aplicação está sendo executada normalmente e está pronta para receber solicitações. Todas as verificações de integridade devem passar para que o aplicativo seja considerado pronto para aceitar tráfego após o início.

    GET /health
    

    O ponto de extremidade /health retorna um código de status HTTP 200 e um valor text/plain de Healthy quando a aplicação está funcional.

  • O /alive indica se um aplicativo está em execução ou falhou e deve ser reiniciado. Apenas as verificações de integridade marcadas com a tag live devem passar para que o aplicativo seja considerado vivo.

    GET /alive
    

    O ponto de extremidade /alive retorna um código de status HTTP 200 e um valor text/plain de Healthy quando o aplicativo está ativo.

Os métodos AddServiceDefaults e MapDefaultEndpoints também aplicam várias configurações ao seu aplicativo, além das verificações de integridade, tais como as configurações de descoberta de serviços OpenTelemetry e .

Ambientes que não são de desenvolvimento

Em ambientes não desenvolvimentais, os endpoints /health e /alive estão desativados por padrão. Se você precisar habilitá-los, é recomendado 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 de espera para pedidos e cache de saída para esses endpoints para evitar abusos ou ataques de negação de serviço. Para fazer isso, considere o seguinte método 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 da verificação de saúde 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 endpoints de verificação de integridade no caminho /.
  • Armazena em cache a saída 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 Request timeouts in ASP.NET Core e Output caching middleware in ASP.NET Core.

Verificações de saúde da integração

.NET .NET Aspire integrações também podem registrar verificações de integridade adicionais para 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 qualquer uma dessas operações falhar, a verificação de integridade correspondente também falhará.

Configurar verificações de integridade

Você pode desabilitar as 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 através de ficheiros 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);

Ver também