Pemeriksaan kesehatan di .NET.NET Aspire
Pemeriksaan kesehatan menyediakan ketersediaan dan informasi status tentang aplikasi. Pemeriksaan kesehatan sering dijadikan sebagai endpoint HTTP, tetapi juga dapat digunakan secara internal oleh aplikasi untuk menulis log atau melakukan tugas lain berdasarkan status kesehatan saat ini. Pemeriksaan kesehatan biasanya digunakan dalam kombinasi dengan layanan pemantauan eksternal atau orkestrator kontainer untuk memeriksa status aplikasi. Data yang dilaporkan oleh pemeriksaan kesehatan dapat digunakan untuk berbagai skenario:
- Memengaruhi keputusan yang dibuat oleh orkestrator kontainer, load balancer, gateway API, dan layanan manajemen lainnya. Misalnya, jika pemeriksaan kesehatan untuk aplikasi kontainer gagal, load balancer mungkin akan mengabaikannya saat mengarahkan lalu lintas.
- Verifikasi bahwa dependensi yang mendasar tersedia, seperti database atau cache, dan kembalikan pesan status yang sesuai.
- Kirim peringatan atau pemberitahuan saat aplikasi tidak merespons seperti yang diharapkan.
.NET .NET Aspire titik akhir pemeriksaan kesehatan
Titik akhir
/health
menunjukkan apakah aplikasi berjalan normal di mana aplikasi siap menerima permintaan. Semua pemeriksaan kesehatan harus lulus agar aplikasi dianggap siap menerima lalu lintas setelah dimulai.GET /health
Titik akhir
/health
mengembalikan kode status HTTP 200 dan nilaitext/plain
Healthy ketika aplikasi sehat./alive
menunjukkan apakah aplikasi sedang berjalan atau mengalami crash dan harus dimulai ulang. Hanya pemeriksaan kesehatan yang ditandai dengan tag live yang harus dilewati agar aplikasi dianggap aktif.GET /alive
Titik akhir
/alive
mengembalikan kode status HTTP 200 dan nilaitext/plain
Healthy saat aplikasi berjalan.
Metode AddServiceDefaults
dan MapDefaultEndpoints
juga menerapkan berbagai konfigurasi ke aplikasi Anda, tidak hanya untuk pemeriksaan kesehatan, tetapi juga untuk konfigurasi penemuan layanan seperti OpenTelemetry dan .
Lingkungan non-pengembangan
Di lingkungan non-pengembangan, titik akhir /health
dan /alive
dinonaktifkan secara default. Jika Anda perlu mengaktifkannya, disarankan untuk melindungi titik akhir ini dengan berbagai fitur perutean, seperti pemfilteran host dan/atau otorisasi. Untuk informasi selengkapnya, lihat pemeriksaan kesehatan di ASP.NET Core.
Selain itu, mungkin menguntungkan untuk mengonfigurasi pengaturan batas waktu permintaan dan caching output untuk titik akhir ini untuk mencegah penyalahgunaan atau serangan penolakan layanan. Untuk melakukannya, pertimbangkan metode AddDefaultHealthChecks
yang dimodifikasi berikut:
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;
}
Kode sebelumnya:
- Menambahkan batas waktu 5 detik ke permintaan pemeriksaan kesehatan dengan kebijakan bernama
HealthChecks
. - Menambahkan cache berdurasi 10 detik ke respons pemeriksaan kesehatan dengan kebijakan bernama
HealthChecks
.
Sekarang pertimbangkan metode MapDefaultEndpoints
yang diperbarui:
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;
}
Kode sebelumnya:
- Mengelompokkan titik akhir pemeriksaan kesehatan di bawah jalur
/
. - Cache output dan menentukan waktu permintaan dengan kebijakan
HealthChecks
yang sesuai.
Selain metode AddDefaultHealthChecks
dan MapDefaultEndpoints
yang diperbarui, Anda juga harus menambahkan layanan yang sesuai untuk layanan batas waktu permintaan dan penyimpanan sementara output.
Dalam titik masuk aplikasi yang sesuai untuk mengonsumsi (biasanya file Program.cs), tambahkan kode berikut:
// 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();
Untuk informasi selengkapnya, lihat middleware batas waktu permintaan di ASP.NET Core dan middleware caching output di ASP.NET Core.
Pemeriksaan kesehatan integrasi
integrasi .NET.NET Aspire juga dapat mendaftarkan pemeriksaan kesehatan tambahan untuk aplikasi Anda. Pemeriksaan kesehatan ini berkontribusi pada status titik akhir /health
dan /alive
yang dikembalikan. Misalnya, integrasi .NET AspirePostgreSQL secara otomatis menambahkan pemeriksaan kesehatan untuk memverifikasi kondisi berikut:
- Koneksi database dapat dibuat
- Kueri database dapat berhasil dijalankan
Jika salah satu operasi ini gagal, pemeriksaan kesehatan yang sesuai juga gagal.
Mengonfigurasi pemeriksaan kesehatan
Anda dapat menonaktifkan pemeriksaan kesehatan untuk integrasi tertentu menggunakan salah satu opsi konfigurasi yang tersedia. integrasi
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
Anda juga dapat menggunakan delegasi sebaris untuk mengonfigurasi pemeriksaan kesehatan:
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Lihat juga
- .NET pemeriksaan kesehatan aplikasi di C#
- Pemeriksaan kesehatan di
.NET Aspire