Egészségügyi ellenőrzések a .NET.NET Aspire
Az állapotellenőrzések rendelkezésre állási és állapotinformációkat biztosítanak egy alkalmazásról. Az állapot-ellenőrzések gyakran HTTP-végpontokként vannak közzétéve, de az alkalmazás belsőleg is használhatja naplók írására vagy az aktuális állapot alapján más feladatok végrehajtására. Az állapot-ellenőrzéseket általában külső monitorozási szolgáltatással vagy tárolóvezénylővel együtt használják az alkalmazások állapotának ellenőrzésére. Az állapotellenőrzések által jelentett adatok különböző forgatókönyvekhez használhatók:
- A tárolóvezénylők, terheléselosztók, API-átjárók és egyéb felügyeleti szolgáltatások döntéseinek befolyásolása. Ha például egy tárolóalapú alkalmazás állapot-ellenőrzése sikertelen, a terheléselosztó átirányíthatja a forgalmat, kihagyva az adott alkalmazást.
- Ellenőrizze, hogy rendelkezésre állnak-e mögöttes függőségek, például adatbázis vagy gyorsítótár, és adjon vissza egy megfelelő állapotüzenetet.
- Riasztások vagy értesítések aktiválása, ha egy alkalmazás nem a várt módon válaszol.
.NET .NET Aspire állapot-ellenőrzési végpontok
.NET
.NET Aspire két alapértelmezett állapot-ellenőrző HTTP-végpontot tesz elérhetővé Fejlesztési környezetekben, amikor a AddServiceDefaults
és MapDefaultEndpoints
metódusok meghívása a Program.cs fájlból történik:
A
/health
végpont jelzi, hogy az alkalmazás normál módon fut-e, ahol készen áll a kérések fogadására. Az alkalmazásnak át kell mennie az összes állapot-ellenőrzésen ahhoz, hogy a kezdés után készen álljon a forgalom fogadására.GET /health
A
/health
végpont 200 HTTP-állapotkódot éstext/plain
Healthy értéket ad vissza, ha az alkalmazás kifogástalan állapotú.A
/alive
jelzi, hogy egy alkalmazás fut-e, vagy összeomlott, és újra kell-e indítani. Csak a élő címkével ellátott állapotellenőrzések sikeresek kell, hogy legyenek ahhoz, hogy az alkalmazás életben lévőnek legyen tekintve.GET /alive
A
/alive
végpont egy 200-os HTTP-állapotkódot éstext/plain
Healthy értéket ad vissza, ha az alkalmazás életben van.
A AddServiceDefaults
és MapDefaultEndpoints
metódusok az állapotellenőrzéseken túl különböző konfigurációkat is alkalmaznak az alkalmazásra, például OpenTelemetry és szolgáltatásfelderítési konfigurációkat.
Nem fejlesztési környezetek
A nem fejlesztési környezetekben a /health
és /alive
végpontok alapértelmezés szerint le vannak tiltva. Ha engedélyeznie kell őket, ajánlott ezeket a végpontokat különböző útválasztási funkciókkal, például gazdagépszűréssel és/vagy engedélyezéssel védeni. További információ: Állapot-ellenőrzések ASP.NET Core.
Emellett előnyös lehet a kérések időtúllépéseinek és kimeneti gyorsítótárazásának konfigurálása ezen végpontok esetében a visszaélések vagy szolgáltatásmegtagadási támadások megakadályozása érdekében. Ehhez fontolja meg a következő módosított AddDefaultHealthChecks
metódust:
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;
}
Az előző kód:
- 5 másodperces időtúllépést ad hozzá az állapot-ellenőrzési kérelmekhez egy
HealthChecks
nevű szabályzattal. - 10 másodperces gyorsítótárat ad hozzá az állapot-ellenőrzési válaszokhoz egy
HealthChecks
nevű szabályzattal.
Most fontolja meg a frissített MapDefaultEndpoints
metódust:
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;
}
Az előző kód:
- Csoportosítja az állapot-ellenőrzési végpontokat a
/
elérési út alatt. - A kimenetet gyorsítótárazza, és a megfelelő
HealthChecks
szabályzattal megadja a kérés időpontját.
A frissített AddDefaultHealthChecks
és MapDefaultEndpoints
módszerek mellett hozzá kell adnia a megfelelő szolgáltatásokat a kérések időtúllépéséhez és a kimeneti gyorsítótárazáshoz is.
A megfelelő fogyasztó alkalmazás belépési pontjában (általában a Program.cs fájlban) adja hozzá a következő kódot:
// 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();
További információkért lásd: Kérési időtúllépési köztesréteg a ASP.NET Core és a Kimeneti gyorsítótárazási köztesréteg a ASP.NET Core.
Integrációs állapotellenőrzések
.NET
.NET Aspire integrációk további állapotellenőrzéseket is regisztrálhatnak az alkalmazáshoz. Ezek az állapotellenőrzések hozzájárulnak a /health
és /alive
végpontok visszaadott állapotához. Az .NET AspirePostgreSQL integráció például automatikusan hozzáad egy állapotellenőrzést a következő feltételek ellenőrzéséhez:
- Adatbázis-kapcsolat létesíthető
- Egy adatbázis-lekérdezés sikeresen végrehajtható
Ha bármelyik művelet sikertelen, a megfelelő állapot-ellenőrzés is meghiúsul.
Állapot-ellenőrzések konfigurálása
Egy adott integráció állapotellenőrzését az elérhető konfigurációs lehetőségek egyikével tilthatja le. .NET .NET Aspire integrációk támogatják Microsoft.Extensions.Configurations a beállítások konfigurációs fájlokon keresztül történő alkalmazásához, például appsettings.json:
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
Az állapot-ellenőrzések konfigurálásához beágyazott meghatalmazottat is használhat:
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);