Kontroly stavu v .NET.NET Aspire
Kontroly stavu poskytují informace o dostupnosti a stavu aplikace. Kontroly stavu se často zveřejňují jako koncové body HTTP, ale aplikace je může interně používat k zápisu protokolů nebo provádění jiných úloh na základě aktuálního stavu. Kontroly stavu se obvykle používají v kombinaci s externí službou monitorování nebo orchestrátorem kontejnerů ke kontrole stavu aplikace. Data hlášená kontrolami stavu se dají použít v různých scénářích:
- Vliv na rozhodnutí provedená orchestrátory kontejnerů, nástroje pro vyrovnávání zatížení, brány rozhraní API a další služby pro správu. Pokud například kontrola stavu kontejnerizované aplikace selže, může být tato aplikace přeskočena nástrojem pro vyrovnávání zatížení při směrování provozu.
- Ověřte, že jsou dostupné podkladové závislosti, jako je databáze nebo mezipaměť, a vraťte odpovídající stavovou zprávu.
- Aktivujte upozornění nebo oznámení, když aplikace nereaguje podle očekávání.
koncové body kontroly stavu .NET.NET Aspire
.NET
.NET Aspire zviditelňuje v prostředích Development dva výchozí koncové body kontroly stavu, když jsou z Program.cs souboru volány metody AddServiceDefaults
a MapDefaultEndpoints
:
Koncový bod
/health
označuje, jestli aplikace běží normálně, kde je připravená přijímat žádosti. Všechny kontroly stavu musí projít, aby aplikace byla po spuštění považována za připravenou přijmout provoz.GET /health
Koncový bod
/health
vrátí stavový kód HTTP 200 atext/plain
hodnotu Healthy, když je aplikace v pořádku./alive
indikuje, jestli je aplikace spuštěná nebo se chybově ukončila a je potřeba ji restartovat. Pouze kontroly stavu označené značkou live musí projít, aby aplikace byla považována za aktivní.GET /alive
Koncový bod
/alive
vrátí stavový kód HTTP 200 a hodnotutext/plain
Healthy, když aplikace funguje.
Metody AddServiceDefaults
a MapDefaultEndpoints
také na vaši aplikaci používají různé konfigurace nad rámec jen kontrol stavu, jako jsou konfigurace OpenTelemetry a zjišťování služby .
Nevojová prostředí
V prostředích, která nejsou vývojová, jsou ve výchozím nastavení koncové body /health
a /alive
zakázané. Pokud je potřebujete povolit, doporučuje se tyto koncové body chránit různými funkcemi směrování, jako je filtrování hostitelů nebo autorizace. Další informace naleznete v tématu Kontroly stavu v ASP.NET Core.
Kromě toho může být výhodné nakonfigurovat vypršení časového limitu požadavků a ukládání výstupu do mezipaměti pro tyto koncové body, aby se zabránilo zneužití nebo útokům na dostupnost služby. Pokud to chcete udělat, zvažte následující upravenou metodu AddDefaultHealthChecks
:
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;
}
Předchozí kód:
- Přidá časový limit 5 sekund do žádostí o kontrolu stavu pomocí zásady s názvem
HealthChecks
. - Přidá 10sekundovou mezipaměť do odpovědí kontroly stavu pomocí zásady s názvem
HealthChecks
.
Teď zvažte aktualizovanou metodu MapDefaultEndpoints
:
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;
}
Předchozí kód:
- Seskupí koncové body kontroly stavu do cesty
/
. - Ukládá výstup do mezipaměti a nastavuje čas požadavku s příslušnou zásadou
HealthChecks
.
Kromě aktualizovaných AddDefaultHealthChecks
a MapDefaultEndpoints
metod musíte také přidat odpovídající služby pro vypršení časového limitu požadavků i ukládání výstupu do mezipaměti.
Do vstupního bodu příslušné spotřební aplikace (obvykle soubor Program.cs) přidejte následující kód:
// 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();
Další informace najdete v tématu Middleware časových limitů pro požadavky v ASP.NET Core a Middleware pro ukládání výstupu do mezipaměti v ASP.NET Core.
Kontroly stavu integrace
.NET
.NET Aspire integrace mohou také zaregistrovat další kontroly stavu pro vaši aplikaci. Tyto kontroly stavu přispívají k vrácenému stavu koncových bodů /health
a /alive
. Integrace .NET AspirePostgreSQL například automaticky přidá kontrolu stavu, která ověří následující podmínky:
- Bylo možné navázat připojení k databázi.
- Databázový dotaz je možné úspěšně spustit.
Pokud některý z těchto operací selže, odpovídající kontrola stavu také selže.
Konfigurace zdravotních kontrol
Kontroly stavu pro danou integraci můžete zakázat pomocí jedné z dostupných možností konfigurace. Integrace .NET.NET Aspire umožňují použití nastavení prostřednictvím konfiguračních souborů, jako je appsettings.json: Microsoft.Extensions.Configurations.
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
Ke konfiguraci kontrol stavu můžete použít také vložený delegát:
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);