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:
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:
- Yeni bir HostApplicationBuilder örneği oluşturur.
- Uzantı yöntemine yapılan çağrıdan AddHealthChecks bir çağrıyı zincirleyerek kaynak kullanımı için AddResourceUtilizationHealthCheck sistem durumu denetimi ekler.
- IHost Örneği değişken olarak
app
oluşturur. - Hizmet sağlayıcısından HealthCheckService sınıfının bir örneğini alır.
- Sistem durumu denetimi gerçekleştirir ve sonucu görüntüler.
- Uygulamayı çalıştırır.
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:
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:
- HealthCheckService sınıfının örneği.
- ILogger<TCategoryName> sınıfının örneği.
- Arabirimini IHostedLifecycleService uygular ve her yöntem yöntemini çağırır
CheckHealthAsync
. - yöntemini çağıran
CheckHealthAsync
birReadyAsync
yöntem tanımlar. - Çağıranın adını ve iptal belirtecini yakalayan ve ardından örnekten
HealthCheckService
sistem durumu denetimi isteyen özelCheckHealthAsync
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:
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.
- Örnek
- IHost Örneği değişken olarak
app
oluşturur. - Hizmet sağlayıcısından bir
IHostedService
alır, bu örnektirExampleService
. - İki görev başvurusu verilen çağrılar Task.WhenAll :
DelayAndReportAsync
500 milisaniyeyi geciktiren ve ardından örnekte yöntemini çağıranReadyAsync
yöntemiExampleService
sistem durumu denetimini değerlendirir.- RunAsync(IHost, CancellationToken) yöntemi, öğesini
app
baş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:
StartingAsync
:SağlıksızStartAsync
:SağlıksızStartedAsync
:SağlıksızReadyAsync
:SağlıklıStoppingAsync
:SağlıksızStopAsync
:SağlıksızStoppedAsync
: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.