.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 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:
- Létrehoz egy új HostApplicationBuilder példányt.
- Állapot-ellenőrzést ad hozzá az erőforrás-kihasználtsághoz a hívásból a AddHealthChecks bővítménymetódushoz AddResourceUtilizationHealthCheck való láncolással.
- A példányt IHost változóként
app
hozza létre. - Lekéri az HealthCheckService osztály egy példányát a szolgáltatótól.
- Állapotellenőrzést végez, és megjeleníti az eredményt.
- Futtatja az alkalmazást.
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:
- Az osztály egy példánya HealthCheckService .
- Az osztály egy példánya ILogger<TCategoryName> .
- 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ódustCheckHealthAsync
. - 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 aHealthCheckService
példánytól. Aresult
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
- 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 aReadyAsync
metódust aExampleService
példányon, kiértékeli az állapot-ellenőrzést. - A RunAsync(IHost, CancellationToken) metódus elindítja a
app
.
- A
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:
StartingAsync
:EgészségtelenStartAsync
:EgészségtelenStartedAsync
:EgészségtelenReadyAsync
:EgészségesStoppingAsync
:EgészségtelenStopAsync
:EgészségtelenStoppedAsync
: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.