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


.NET-alkalmazás állapotának ellenőrzése C-ben#

Az elosztott rendszerekben az állapot-ellenőrzések az egyes csomópontok vagy szolgáltatások állapotának, rendelkezésre állásának és teljesítményének rendszeres kiértékelései. Ezek az ellenőrzések biztosítják, hogy a rendszer megfelelően és hatékonyan működjön. Az állapot-ellenőrzések elengedhetetlenek a rendszer megbízhatóságához, és általában rendszeres időközönként, a döntéshozatal és a korrekciós műveletek eredményeinek elemzésével hajtják végre őket.

A következő hőségellenőrzési állapoteredmények érhetők el:

Emellett az állapotellenőrzések gyakran különböző diagnosztikai metrikákat jelentenek. További információ: Diagnosztikai metrikák: Microsoft.Extensions.Diagnostics.HealthChecks.

Erőforrás-kihasználtság állapotának ellenőrzése

A .NET-alkalmazások erőforrás-kihasználtságának állapotellenőrzéséhez adjon hozzá egy csomaghivatkozást a Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization fájlhoz. IServiceCollection Egy példányon a hívásokat a AddHealthChecks> felé lánccal kell összekapcsolniAddResourceUtilizationHealthCheck. Az alábbi példa bemutatja, hogyan adhat hozzá erőforrás-kihasználtsági állapot-ellenőrzést egy példányhoz IServiceCollection a AddResourceUtilizationHealthCheck bővítménymetódus használatával:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;

var builder = Host.CreateApplicationBuilder(args);

builder.Services.AddHealthChecks()
    .AddResourceUtilizationHealthCheck();

var app = builder.Build();

var healthCheckService = app.Services.GetRequiredService<HealthCheckService>();

var result = await healthCheckService.CheckHealthAsync();

Console.WriteLine($"{result.Status} {result.TotalDuration}");

app.Run();

A fenti kód a következőket végzi el:

Alkalmazás élettartamának állapot-ellenőrzése

Az alkalmazás élettartam-eseményeinek IHostApplicationLifetimeállapot-ellenőrzéséhez használja a AddApplicationLifecycleHealthCheck Microsoft.Extensions.Diagnostics.HealthChecks.Common NuGet csomagban elérhető bővítménymetódust.

Ez a szolgáltató azt jelzi, hogy az alkalmazás csak akkor kifogástalan állapotú, ha teljesen aktív. Amíg az élettartam objektum azt nem jelzi, hogy az alkalmazás elindult, a szolgáltató nem kifogástalan állapotúként fogja jelenteni az alkalmazást. Amikor az alkalmazás leáll, a szolgáltató nem megfelelő állapotúként fogja jelenteni az alkalmazást.

A kódtár lehetővé teszi, HealthCheckService hogy a felhasználók bármikor állapot-ellenőrzést kérjenek. Fontolja meg a következő ExampleService megvalósítást:

using System.Runtime.CompilerServices;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

internal class ExampleLifecycle(
    HealthCheckService healthCheckService,
    ILogger<ExampleLifecycle> logger) : IHostedLifecycleService
{
    Task IHostedService.StartAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    Task IHostedLifecycleService.StartedAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    Task IHostedLifecycleService.StartingAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    Task IHostedService.StopAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    Task IHostedLifecycleService.StoppedAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    Task IHostedLifecycleService.StoppingAsync(
        CancellationToken cancellationToken) =>
        CheckHealthAsync(cancellationToken: cancellationToken);

    public Task ReadyAsync() => CheckHealthAsync();

    private async Task CheckHealthAsync(
         [CallerMemberName] string eventName = "",
         CancellationToken cancellationToken = default)
    {
        HealthReport result =
            await healthCheckService.CheckHealthAsync(cancellationToken);

        logger.LogInformation(
            "{EventName}: {Status}", eventName, result.Status);
    }
}

A fenti kód a következőket végzi el:

  • Definiál egy új ExampleLifecycle osztályt, amely implementálja az interfészt IHostedService .
  • Az alábbi paramétereket elfogadó elsődleges konstruktort definiál:
  • Implementálja az IHostedLifecycleService interfészt, és minden metódus invokálja a metódust CheckHealthAsync .
  • Meghatároz egy metódust ReadyAsync , amely meghívja a metódust CheckHealthAsync .
  • Definiál egy egyéni CheckHealthAsync módszert, amely rögzíti a hívó nevét és a lemondási jogkivonatot, majd állapotellenőrzést kér a HealthCheckService példánytól. A result rendszer ezután naplózza a naplót.

Az állapot-ellenőrző szolgáltatás csak az alkalmazás elindítása és a leállítás előtt jelent állapotjelentést HealthStatus.Healthy . Vegye figyelembe a következő Program.cs:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;

var builder = Host.CreateApplicationBuilder(args);

var healthChecksBuilder = builder.Services
    .AddHostedService<ExampleLifecycle>()
    .AddHealthChecks()
    .AddApplicationLifecycleHealthCheck();

// You could use the healthChecksBuilder instance to add more checks...

var app = builder.Build();

var services = app.Services.GetRequiredService<IEnumerable<IHostedService>>();

await Task.WhenAll(DelayAndReportAsync(services), app.RunAsync());

static async Task DelayAndReportAsync(IEnumerable<IHostedService> services)
{
    // Ensure app started...
    await Task.Delay(500);

    var service = services.FirstOrDefault(static s => s is ExampleLifecycle);
    if (service is ExampleLifecycle example)
    {
        await example.ReadyAsync();
    }
}

A fenti kód a következőket végzi el:

  • Létrehoz egy új HostApplicationBuilder , változóként hozzárendelt példányt builder .
  • ExampleService Az alkalmazás csak IHostedServiceregisztrálja az alkalmazást.
  • Állapotellenőrzést ad hozzá az alkalmazás élettartam-eseményeihez IHostApplicationLifetime úgy, hogy a hívás által AddHealthChecks visszaadott példányból IHealthChecksBuilder a bővítménymetódushoz láncolással leküld egy AddApplicationLifecycleHealthCheck hívást.
    • A healthChecksBuilder példány további állapotellenőrzések hozzáadására használható.
  • A példányt IHost változóként app hozza létre.
  • IHostedService Lekéri a szolgáltatótól a példánytExampleService.
  • Két tevékenységhivatkozást tartalmazó hívások Task.WhenAll :
    • A DelayAndReportAsync metódus, amely 500 ezredmásodpercig késlelteti, majd meghívja a ReadyAsync metódust a ExampleService példányon, kiértékeli az állapot-ellenőrzést.
    • A RunAsync(IHost, CancellationToken) metódus elindítja a app.

Az alkalmazás a következő sorrendben adja ki a naplókat, és az állapot-ellenőrzési állapotot jelenti az életciklus-eseményekhez kapcsolódóan:

  1. StartingAsync:Egészségtelen
  2. StartAsync:Egészségtelen
  3. StartedAsync:Egészségtelen
  4. ReadyAsync:Egészséges
  5. StoppingAsync:Egészségtelen
  6. StopAsync:Egészségtelen
  7. StoppedAsync:Egészségtelen

Más szóval ez a szolgáltató biztosítja, hogy az alkalmazáspéldány csak akkor fogadja a forgalmat, ha készen áll. Ha webalkalmazásokat fejleszt a ASP.NET Core használatával, elérhető az állapot-ellenőrző köztes szoftver. További információ: Állapotellenőrzés a ASP.NET Core-ban.

Lásd még