İngilizce dilinde oku

Aracılığıyla paylaş


C'de .NET uygulama durumu denetimleri#

Dağıtılmış bir sistemde sistem durumu denetimleri, tek tek düğümlerin veya hizmetlerin durumunun, kullanılabilirliğinin ve performansının düzenli değerlendirmeleridir. Bu denetimler, sistemin doğru ve verimli bir şekilde çalışmasını sağlar. Sistem güvenilirliği için sistem durumu denetimleri temel öneme sahiptir ve genellikle karar alma ve düzeltici eylemler için analiz edilen sonuçlarla düzenli aralıklarla gerçekleştirilir.

Aşağıdaki heath kontrol durumu sonuçları mümkündür:

Buna ek olarak, sistem durumu denetimleri genellikle çeşitli tanılama ölçümlerini bildirir. Daha fazla bilgi için bkz . Tanılama Ölçümleri: Microsoft.Extensions.Diagnostics.HealthChecks.

Kaynak kullanımı sistem durumu denetimleri

.NET uygulamalarınızın kaynak kullanımı üzerinde sistem durumu denetimleri gerçekleştirmek için Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization'a bir paket başvurusu ekleyin. Bir IServiceCollection örnekte, çağrısından AddHealthChecks öğesine zincirleme AddResourceUtilizationHealthCheck. Aşağıdaki örnekte, bir örneğe kaynak kullanımı sistem durumu denetimi IServiceCollection eklemek için uzantı yönteminin nasıl kullanılacağı AddResourceUtilizationHealthCheck gösterilmektedir:

C#
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();

Yukarıdaki kod:

Uygulama ömrü sistem durumu denetimleri

uygulamasının uygulama ömrü olayları IHostApplicationLifetimeüzerinde sistem durumu denetimleri gerçekleştirmek için Microsoft.Extensions.Diagnostics.HealthChecks.Common NuGet paketinde bulunan uzantı yöntemini kullanınAddApplicationLifecycleHealthCheck.

Bu sağlayıcı, uygulamanın yalnızca tamamen etkin olduğunda iyi durumda olduğunu gösterir. Yaşam süresi nesnesi uygulamanın başlatıldığını belirtene kadar sağlayıcı uygulamayı iyi durumda değil olarak bildirir. Uygulama kapatılmaya başladığında sağlayıcı uygulamayı iyi durumda değil olarak bildirir.

Kitaplık, tüketicilerin herhangi bir zamanda sistem durumu denetimi istemesini sağlayan bir HealthCheckService kullanıma sunar. Aşağıdaki ExampleService uygulamayı göz önünde bulundurun:

C#
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);
    }
}

Yukarıdaki kod:

  • Arabirimini uygulayan IHostedService yeni ExampleLifecycle bir sınıf tanımlar.
  • Aşağıdaki parametreleri kabul eden bir birincil oluşturucu tanımlar:
  • Arabirimini IHostedLifecycleService uygular ve her yöntem yöntemini çağırır CheckHealthAsync .
  • yöntemini çağıran CheckHealthAsync bir ReadyAsync yöntem tanımlar.
  • Çağıranın adını ve iptal belirtecini yakalayan ve ardından örnekten HealthCheckService sistem durumu denetimi isteyen özel CheckHealthAsync bir yöntem tanımlar. result daha sonra günlüğe kaydedilir.

Sistem durumu denetimi hizmetinin durumunu HealthStatus.Healthy bildireceği tek zaman, uygulama başlatıldıktan sonra ve durdurulmadan önce çağrılır. Lütfen aşağıdaki Program.cs göz önünde bulundurun:

C#
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();
    }
}

Yukarıdaki kod:

  • değişkeni olarak builder öğesini atayan yeni HostApplicationBuilder bir örnek oluşturur.
  • uygulamasını ExampleService yalnızca IHostedServiceolarak kaydeder.
  • Uzantısı yöntemine çağrı tarafından AddHealthChecks döndürülen örnekten IHealthChecksBuilder bir çağrı zincirleyerek uygulama ömrü olayları IHostApplicationLifetime için AddApplicationLifecycleHealthCheck bir sistem durumu denetimi ekler.
    • Örnek healthChecksBuilder , daha fazla sistem durumu denetimi eklemek için kullanılabilir.
  • IHost Örneği değişken olarak app oluşturur.
  • Hizmet sağlayıcısından bir IHostedService alır, bu örnektir ExampleService .
  • İki görev başvurusu verilen çağrılar Task.WhenAll :
    • DelayAndReportAsync 500 milisaniyeyi geciktiren ve ardından örnekte yöntemini çağıran ReadyAsync yöntemi ExampleService sistem durumu denetimini değerlendirir.
    • RunAsync(IHost, CancellationToken) yöntemi, öğesini appbaşlatır.

Uygulama, yaşam döngüsü olaylarıyla ilgili olarak sistem durumu denetimi durumunu bildirerek günlükleri aşağıdaki sırayla çıkış yapar:

  1. StartingAsync:Sağlıksız
  2. StartAsync:Sağlıksız
  3. StartedAsync:Sağlıksız
  4. ReadyAsync:Sağlıklı
  5. StoppingAsync:Sağlıksız
  6. StopAsync:Sağlıksız
  7. StoppedAsync:Sağlıksız

Başka bir deyişle, bu sağlayıcı uygulama örneğinin yalnızca hazır olduğunda trafik almasını sağlar. ASP.NET Core ile web uygulamaları geliştiriyorsanız, kullanılabilir sistem durumu denetimleri ara yazılımı vardır. Daha fazla bilgi için ASP.NET Core'da Sistem durumu denetimleri.

Ayrıca bkz.