استفاده از کتابخانههای Health Check موجود 📚
قبل از اینکه برای همه چیز یک health check سفارشی پیادهسازی کنید، ابتدا باید ببینید آیا از قبل کتابخانه موجودی وجود دارد یا نه.
در ریپازیتوری AspNetCore.Diagnostics.HealthChecks میتوانید مجموعه وسیعی از پکیجهای health check برای سرویسها و کتابخانههای پرکاربرد را پیدا کنید.
در اینجا فقط چند مثال آمده است:
SQL Server -
AspNetCore.HealthChecks.SqlServer
Postgres -
AspNetCore.HealthChecks.Npgsql
Redis -
AspNetCore.HealthChecks.Redis
RabbitMQ -
AspNetCore.HealthChecks.RabbitMQ
در اینجا نحوه افزودن health checks برای PostgreSQL و RabbitMQ آمده است:
builder.Services.AddHealthChecks()
.AddCheck<SqlHealthCheck>("custom-sql", HealthStatus.Unhealthy);
.AddNpgSql(pgConnectionString)
.AddRabbitMQ(rabbitConnectionString)
فرمتدهی پاسخ Health Checks 🎨
بهطور پیشفرض، endpointی که وضعیت health check شما را برمیگرداند، یک مقدار رشتهای را که نماینده یک HealthStatus است، برمیگرداند.
این عملی نیست اگر چندین health check پیکربندی کرده باشید، زیرا میخواهید وضعیت سلامت را به صورت جداگانه برای هر سرویس مشاهده کنید.
بدتر از آن، اگر یکی از سرویسها در حال شکست باشد، کل پاسخ Unhealthy برمیگرداند و شما نمیدانید چه چیزی باعث مشکل شده است.
شما میتوانید این مشکل را با ارائه یک ResponseWriter حل کنید، و یک نمونه موجود در کتابخانه AspNetCore.HealthChecks.UI.Client وجود دارد.
پکیج NuGet را نصب کنید:
Install-Package AspNetCore.HealthChecks.UI.Client
و باید فراخوانی به MapHealthChecks را کمی بهروز کنید تا از ResponseWriter این کتابخانه استفاده کند:
app.MapHealthChecks(
"/health",
new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
پس از این تغییرات، پاسخ از endpoint health check به این شکل خواهد بود:
{
"status": "Unhealthy",
"totalDuration": "00:00:00.3285211",
"entries": {
"npgsql": { "status": "Healthy", ... },
"rabbitmq": { "status": "Healthy", ... },
"custom-sql": { "status": "Unhealthy", ... }
}
}نکات پایانی 📝
مانیتورینگ اپلیکیشن برای ردیابی در دسترس بودن، استفاده از منابع و تغییرات عملکرد در اپلیکیشن شما مهم است.
مانیتور کردن سلامت اپلیکیشنهای ASP.NET Core شما با ارائه health checks برای سرویسهایتان آسان است.
شما میتوانید تصمیم بگیرید health checks سفارشی را پیادهسازی کنید، اما ابتدا در نظر بگیرید که آیا راهحلهای موجود وجود دارد یا نه.