.NET .NET Aspire sağlık kontrolleri
Sağlık kontrolleri, bir uygulama hakkında kullanılabilirlik ve durum bilgileri sağlar. Sağlık kontrolleri genellikle HTTP uç noktaları olarak sunulur, ancak günlükleri yazmak veya mevcut sağlık durumuna göre başka görevler gerçekleştirmek için uygulama tarafından dahili olarak da kullanılabilir. Sağlık kontrolleri, genellikle bir uygulamanın durumunu kontrol etmek için bir dış izleme hizmeti veya kapsayıcı düzenleyicisi ile birlikte kullanılır. Sağlık kontrolleri tarafından bildirilen veriler çeşitli senaryolar için kullanılabilir.
- Kapsayıcı düzenleyicileri, yük dengeleyiciler, API ağ geçitleri ve diğer yönetim hizmetleri tarafından alınan kararları etkileyin. Örneğin, kapsayıcılı bir uygulama için sistem durumu denetimi başarısız olursa, yük dengeleyici yönlendirme trafiği tarafından atlanabilir.
- Veritabanı veya önbellek gibi temel bağımlılıkların kullanılabilir olduğunu doğrulayın ve uygun bir durum iletisi döndürebilirsiniz.
- Bir uygulama beklendiği gibi yanıt vermediğinde uyarıları veya bildirimleri tetikleme.
.NET .NET Aspire sağlık kontrolü uç noktaları
.NET
.NET Aspire, Geliştirme ortamlarında, Program.cs dosyasından AddServiceDefaults
ve MapDefaultEndpoints
yöntemleri çağrıldığında iki varsayılan durum denetimi HTTP uç noktasını kullanıma sunar.
/health
uç noktası, uygulamanın istekleri almaya hazır olduğu yerde normal çalışıp çalışmadığını gösterir. Uygulamanın başladıktan sonra trafiği kabul etmeye hazır olarak kabul edilmesi için tüm sistem durumu denetimlerinin geçmesi gerekir.GET /health
/health
uç noktası, uygulama sağlıklıolduğunda HTTP durum kodu 200 vetext/plain
değeri Healthy döndürür./alive
, bir uygulamanın çalışıp çalışmadığını veya kilitlendiğini ve yeniden başlatılması gerektiğini belirtir. Uygulamanın canlı olarak kabul edilmesi için yalnızca canlı etiketiyle etiketlenmiş durum denetimleri geçmelidir.GET /alive
/alive
uç noktası, uygulama canlıolduğunda HTTP durum kodu 200 vetext/plain
değeri olarak Healthy döndürür.
AddServiceDefaults
ve MapDefaultEndpoints
yöntemleri, uygulamanıza yalnızca sistem durumu denetimlerinin ötesinde OpenTelemetry ve hizmet bulma yapılandırmaları gibi çeşitli yapılandırmalar da uygular.
Geliştirme dışı ortamlar
Geliştirme dışı ortamlarda, /health
ve /alive
uç noktaları varsayılan olarak devre dışı bırakılır. Bunları etkinleştirmeniz gerekiyorsa, bu uç noktaları konak filtreleme ve/veya yetkilendirme gibi çeşitli yönlendirme özellikleriyle korumanız önerilir. Daha fazla bilgi için bkz. Sağlık kontrolleri ASP.NET Core.
Ayrıca, kötüye kullanım veya hizmet reddi saldırılarını önlemek için bu uç noktalar için istek zaman aşımlarını ve çıkış önbelleğini yapılandırmak avantajlı olabilir. Bunu yapmak için aşağıdaki değiştirilmiş AddDefaultHealthChecks
yöntemini göz önünde bulundurun:
public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)
{
builder.Services.AddRequestTimeouts(
configure: static timeouts =>
timeouts.AddPolicy("HealthChecks", TimeSpan.FromSeconds(5)));
builder.Services.AddOutputCache(
configureOptions: static caching =>
caching.AddPolicy("HealthChecks",
build: static policy => policy.Expire(TimeSpan.FromSeconds(10))));
builder.Services.AddHealthChecks()
// Add a default liveness check to ensure app is responsive
.AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);
return builder;
}
Önceki kod:
-
HealthChecks
adlı bir ilkeyle sistem durumu denetimi isteklerine 5 saniyelik bir zaman aşımı ekler. - sistem durumu denetimi yanıtlarına
HealthChecks
adlı bir ilkeyle 10 saniyelik bir önbellek ekler.
Şimdi güncelleştirilmiş MapDefaultEndpoints
yöntemini göz önünde bulundurun:
public static WebApplication MapDefaultEndpoints(this WebApplication app)
{
var healthChecks = app.MapGroup("");
healthChecks
.CacheOutput("HealthChecks")
.WithRequestTimeout("HealthChecks");
// All health checks must pass for app to be
// considered ready to accept traffic after starting
healthChecks.MapHealthChecks("/health");
// Only health checks tagged with the "live" tag
// must pass for app to be considered alive
healthChecks.MapHealthChecks("/alive", new()
{
Predicate = static r => r.Tags.Contains("live")
});
return app;
}
Önceki kod:
- Sağlık kontrolü uç noktalarını
/
yolu altında grupla. - Çıktıyı önbelleğe alır ve ilgili
HealthChecks
ilkesiyle bir istek süresi belirtir.
Güncelleştirilmiş AddDefaultHealthChecks
ve MapDefaultEndpoints
yöntemlerine ek olarak, hem istek zaman aşımları hem de çıktı önbelleği için ilgili hizmetleri de eklemeniz gerekir.
Uygun tüketen uygulamanın giriş noktasına (genellikle Program.cs dosyası) aşağıdaki kodu ekleyin:
// Wherever your services are being registered.
// Before the call to Build().
builder.Services.AddRequestTimeouts();
builder.Services.AddOutputCache();
var app = builder.Build();
// Wherever your app has been built, before the call to Run().
app.UseRequestTimeouts();
app.UseOutputCache();
app.Run();
Daha fazla bilgi için bkz. ASP.NET Core'de İstek zaman aşımları ara yazılımı ve Çıkış önbelleğe alma ara yazılımı ASP.NET Core'da.
Tümleştirme sistem durumu denetimleri
.NET
.NET Aspire tümleştirmeleri, uygulamanız için ek sağlık kontrolleri de kaydedebilir. Bu sağlık kontrolleri, /health
ve /alive
uç noktalarının geri döndürülen durumuna katkıda bulunur. Örneğin, .NET AspirePostgreSQL tümleştirmesi, aşağıdaki koşulları doğrulamak için otomatik olarak bir sağlık kontrolü ekler.
- Veritabanı bağlantısı kurulabilir
- Veritabanı sorgusu başarıyla yürütülebilir
Bu işlemlerden herhangi biri başarısız olursa, ilgili sağlık kontrolü de başarısız olur.
Sağlık kontrollerini yapılandırma
Kullanılabilir yapılandırma seçeneklerinden birini kullanarak belirli bir tümleştirme için sistem durumu denetimlerini devre dışı bırakabilirsiniz.
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
Sistem durumu denetimlerini yapılandırmak için satır içi temsilci de kullanabilirsiniz:
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Ayrıca bkz.
.NET Aspire