Kontroly stavu aplikace .NET v jazyce C#
V distribuovaném systému jsou kontroly stavu pravidelné hodnocení stavu, dostupnosti a výkonu jednotlivých uzlů nebo služeb. Tyto kontroly zajišťují, aby systém fungoval správně a efektivně. Kontroly stavu jsou nezbytné pro spolehlivost systému a obvykle se provádějí v pravidelných intervalech s výsledky analyzovanými pro rozhodování a nápravné akce.
Výsledky stavu kontroly heath jsou možné:
Kromě toho kontroly stavu často hlásí různé diagnostické metriky. Další informace najdete v tématu Diagnostické metriky: Microsoft.Extensions.Diagnostics.HealthChecks
.
Kontroly stavu využití prostředků
Pokud chcete provádět kontroly stavu využití prostředků aplikací .NET, přidejte odkaz na balíček Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization. IServiceCollection V instanci zřetězte volání z AddHealthChecks do AddResourceUtilizationHealthCheck. Následující příklad ukazuje použití AddResourceUtilizationHealthCheck
metody rozšíření k přidání kontroly stavu využití prostředků do IServiceCollection
instance:
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();
Předchozí kód:
- Vytvoří novou instanci sloupce HostApplicationBuilder.
- Přidá kontrolu stavu využití prostředků zřetězeným voláním metody AddHealthChecks AddResourceUtilizationHealthCheck rozšíření.
- IHost Vytvoří instanci jako proměnnou
app
. - Získá instanci HealthCheckService třídy od poskytovatele služeb.
- Provede kontrolu stavu a zobrazí výsledek.
- Spustí aplikaci.
Kontroly stavu životnosti aplikace
Chcete-li provést kontroly stavu událostí IHostApplicationLifetimeživotnosti aplikace , použijte AddApplicationLifecycleHealthCheck metodu rozšíření dostupnou v balíčku Microsoft.Extensions.Diagnostics.HealthChecks.Common NuGet.
Tento poskytovatel bude indikovat, že aplikace je v pořádku pouze v případě, že je plně aktivní. Dokud objekt životnosti indikuje, že aplikace byla spuštěna, poskytovatel hlásí aplikaci jako v pořádku. Když se aplikace spustí, poskytovatel hlásí aplikaci jako poškozenou.
Knihovna zveřejňuje HealthCheckService uživatele, kteří chtějí kdykoli požádat o kontrolu stavu. Zvažte následující ExampleService
implementaci:
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);
}
}
Předchozí kód:
- Definuje novou
ExampleLifecycle
třídu, která implementuje IHostedService rozhraní. - Definuje primární konstruktor, který přijímá následující parametry:
- Instance třídy HealthCheckService
- Instance třídy ILogger<TCategoryName>
- Implementuje IHostedLifecycleService rozhraní, přičemž každá metoda vyvolá metodu
CheckHealthAsync
. - Definuje metodu
ReadyAsync
, která vyvolá metoduCheckHealthAsync
. - Definuje vlastní
CheckHealthAsync
metodu, která zachycuje název volajícího a token zrušení, a potom požádá o kontrolu stavu zHealthCheckService
instance. Potom seresult
zaprotokoluje.
Jediný čas, kdy služba kontroly stavu hlásí stav HealthStatus.Healthy , je po spuštění aplikace a před zavolání zastavením. Zvažte následující 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();
}
}
Předchozí kód:
- Vytvoří novou HostApplicationBuilder instanci, která se přiřadí jako proměnná
builder
. - Zaregistruje pouze
ExampleService
IHostedServiceaplikaci . - Přidá kontrolu stavu událostí IHostApplicationLifetime životnosti aplikace zřetězeným voláním z IHealthChecksBuilder instance vrácené AddHealthChecks voláním AddApplicationLifecycleHealthCheck metody rozšíření.
- Instanci
healthChecksBuilder
lze použít k přidání dalších kontrol stavu.
- Instanci
- IHost Vytvoří instanci jako proměnnou
app
. - Získá od
IHostedService
poskytovatele služeb, to jeExampleService
instance. - Volání Task.WhenAll se dvěma odkazy na úkoly:
- Metoda
DelayAndReportAsync
, která zpožďuje 500 milisekund a pak vyvolá metoduReadyAsync
ExampleService
v instanci, vyhodnotí kontrolu stavu. - Metoda RunAsync(IHost, CancellationToken) , spustí
app
.
- Metoda
Aplikace vypíše protokoly v následujícím pořadí a hlásí stav kontroly stavu, protože souvisí s událostmi životního cyklu:
StartingAsync
:NezdravýStartAsync
:NezdravýStartedAsync
:NezdravýReadyAsync
:ZdravýStoppingAsync
:NezdravýStopAsync
:NezdravýStoppedAsync
:Nezdravý
Jinými slovy, tento poskytovatel zajišťuje, aby instance aplikace přijímala provoz jenom tehdy, když je připravená. Pokud vyvíjíte webové aplikace s ASP.NET Core, je k dispozici middleware kontrol stavu. Další informace najdete v ASP.NET Core v kontrolách stavu.