Megosztás a következőn keresztül:


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 és text/plainHealthy é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 és text/plainHealthy é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 HealthChecksnevű szabályzattal.
  • 10 másodperces gyorsítótárat ad hozzá az állapot-ellenőrzési válaszokhoz egy HealthChecksnevű 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);

Lásd még: