TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #244 99
بررسی‌های سلامت (Health Checks) در ASP.NET Core برای مانیتورینگ اپلیکیشن‌های شما 🩺


همه ما می‌خواهیم اپلیکیشن‌های قوی و قابل اعتماد بسازیم که بتوانند به طور نامحدود مقیاس‌پذیر باشند و هر تعداد درخواستی را مدیریت کنند.

اما با افزایش پیچیدگی سیستم‌های توزیع‌شده و معماری‌های میکروسرویس، مانیتور کردن سلامت اپلیکیشن‌های ما به طور فزاینده‌ای دشوارتر می‌شود.

حیاتی است که شما سیستمی برای دریافت بازخورد سریع از سلامت اپلیکیشن خود داشته باشید.

اینجاست که health checks وارد می‌شوند.

بررسی‌های سلامت راهی برای مانیتور و تأیید سلامت کامپوننت‌های مختلف یک اپلیکیشن فراهم می‌کنند، از جمله:

🔹 دیتابیس‌ها
🔹 APIها
🔹 کش‌ها
🔹 سرویس‌های خارجی

در این مقاله به شما نشان خواهم داد:

🔹 Health checks چه هستند
🔹 افزودن یک health check سفارشی
🔹 استفاده از کتابخانه‌های health check موجود
🔹 سفارشی‌سازی فرمت پاسخ health checks

بیایید ببینیم چگونه health checks را در ASP.NET Core پیاده‌سازی کنیم.

Health Checks چه هستند؟ 🤔

یک مکانیزم پیشگیرانه برای مانیتورینگ و تأیید سلامت و در دسترس بودن یک اپلیکیشن در ASP.NET Core هستند.

در اینجا پیکربندی اولیه آمده است که سرویس‌های health check را ثبت کرده و HealthCheckMiddleware را برای پاسخگویی در URL مشخص شده اضافه می‌کند.
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks();

var app = builder.Build();

app.MapHealthChecks("/health");

app.Run();


health check
یک مقدار HealthStatus را برمی‌گرداند که سلامت سرویس را نشان می‌دهد.
سه مقدار متمایز HealthStatus وجود دارد:

🟢 HealthStatus.Healthy

🟡 HealthStatus.Degraded

🔴 HealthStatus.Unhealthy

شما می‌توانید از HealthStatus برای نشان دادن حالت‌های مختلف اپلیکیشن خود استفاده کنید.
برای مثال، اگر اپلیکیشن کندتر از حد انتظار عمل می‌کند، می‌توانید HealthStatus.Degraded را برگردانید.

افزودن Health Checks سفارشی 👨‍🔧

شما می‌توانید health checks سفارشی را با پیاده‌سازی اینترفیس IHealthCheck ایجاد کنید.
برای مثال، می‌توانید یک چک برای بررسی در دسترس بودن دیتابیس SQL خود پیاده‌سازی کنید.
مهم است که از یک کوئری استفاده کنید که بتواند به سرعت در دیتابیس کامل شود، مانند SELECT 1.

در اینجا یک مثال از پیاده‌سازی health check سفارشی در کلاس SqlHealthCheck آمده است:
public class SqlHealthCheck : IHealthCheck
{
private readonly string _connectionString;

public SqlHealthCheck(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("Database");
}

public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
try
{
using var sqlConnection = new SqlConnection(_connectionString);
await sqlConnection.OpenAsync(cancellationToken);
using var command = sqlConnection.CreateCommand();
command.CommandText = "SELECT 1";
await command.ExecuteScalarAsync(cancellationToken);

return HealthCheckResult.Healthy();
}
catch(Exception ex)
{
return HealthCheckResult.Unhealthy(
context.Registration.FailureStatus,
exception: ex);
}
}
}

پس از پیاده‌سازی health check سفارشی، باید آن را ثبت کنید.
فراخوانی قبلی به AddHealthChecks اکنون به این شکل می‌شود:
builder.Services.AddHealthChecks()
.AddCheck<SqlHealthCheck>("custom-sql", HealthStatus.Unhealthy);

ما به آن یک نام سفارشی می‌دهیم و مشخص می‌کنیم که کدام وضعیت به عنوان نتیجه شکست در
HealthCheckContext.Registration.FailureStatus
استفاده شود.

اما یک لحظه بایستید و فکر کنید.
آیا می‌خواهید برای هر سرویس خارجی که دارید، یک health check سفارشی را خودتان پیاده‌سازی کنید؟
البته که نه! یک راه حل بهتر وجود دارد.
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →