Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 sağlık kontrolü durum 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 AddResourceUtilizationHealthCheck
eklemek için uzantı yönteminin nasıl kullanılacağı IServiceCollection
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.CommonAddApplicationLifecycleHealthCheckbulunan uzantı yöntemini kullanın.
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
ExampleLifecycle
yeni IHostedService 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
ReadyAsync
birCheckHealthAsync
yöntem tanımlar. - Çağıranın adını ve iptal belirtecini yakalayan ve ardından örnekten
CheckHealthAsync
sistem durumu denetimi isteyen özelHealthCheckService
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 HostApplicationBuilder öğesini atayan yeni
builder
bir örnek oluşturur. - uygulamasını
ExampleService
yalnızca IHostedServiceolarak kaydeder. - Uzantısı yöntemine çağrı tarafından IHostApplicationLifetime döndürülen örnekten IHealthChecksBuilder bir çağrı zincirleyerek uygulama ömrü olayları AddHealthChecks 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ız -
StartAsync
:Sağlıksız -
StartedAsync
:Sağlıksız -
ReadyAsync
:Sağlıklı -
StoppingAsync
:Sağlıksız -
StopAsync
:Sağlıksız -
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.