مراقبة تطبيقات C#: المقاييس والتنبيهات في .NET

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا تحتاج إلى مراقبة تطبيقات C#

تطبيقات C# الحديثة على منصة .NET هي أنظمة موزعة معقدة تعمل تحت أحمال عالية. بدون مراقبة عالية الجودة، فإنك تخاطر بفقدان تدهور الأداء أو تسرب الذاكرة أو الأعطال الحرجة. لا تتيح المراقبة تسجيل المشكلات فحسب، بل تتيح أيضًا التنبؤ بها والاستجابة الفورية للشذوذ.

في هذه المقالة، سنشرح كيفية إعداد جمع المقاييس والتسجيل ونظام التنبيهات لتطبيقات C# (.NET) باستخدام أدوات حديثة: Prometheus وGrafana وSerilog و Health Checks المضمنة. ستحصل على أمثلة جاهزة للكود وتوصيات عملية.



المقاييس الرئيسية لتطبيقات C# (.NET)

تبدأ المراقبة بتحديد المؤشرات الرئيسية. بالنسبة لتطبيقات .NET، يمكن تقسيمها إلى ثلاث فئات:

  • مقاييس البنية التحتية — استخدام CPU والذاكرة والقرص والشبكة.
  • مقاييس التطبيق — وقت استجابة API وعدد الطلبات والأخطاء (4xx/5xx) وحجم قوائم الانتظار.
  • مقاييس خاصة بـ .NET — حجم كومة GC وعدد الخيوط ووقت جمع القمامة وعدد الاتصالات بقاعدة البيانات.


جمع المقاييس عبر Prometheus و .NET

لتصدير المقاييس إلى Prometheus، استخدم مكتبة prometheus-net. قم بتثبيتها عبر NuGet:

dotnet add package prometheus-net.AspNetCore

أضف middleware في Program.cs:

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// تفعيل مقاييس Prometheusapp.UseHttpMetrics(); // مقاييس HTTPapp.UseMetricServer(); // نقطة نهاية /metrics

app.MapGet("/", () => "Hello World!");app.Run();

الآن، على العنوان /metrics، ستكون المقاييس القياسية متاحة: عدد الطلبات والمدة والأخطاء. دعنا نضيف مقياسًا مخصصًا — عداد زيارات لنقطة النهاية:

using Prometheus;

var requestCounter = Metrics.CreateCounter( "myapp_requests_total", "Total requests to the endpoint");

app.MapGet("/api/data", () => { requestCounter.Inc(); return new { Message = "Data loaded" };});


Health Checks: فحص الحالة الأساسي

تتيح آلية Health Checks المضمنة في .NET تقييم قابلية تشغيل التطبيق بسرعة. أضف فحص الاتصال بقاعدة البيانات:

using Microsoft.Extensions.Diagnostics.HealthChecks;

builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>() .AddUrlGroup(new Uri("https://external-api.com"), "External API");

app.MapHealthChecks("/health");

تُرجع Health Checks الحالة Healthy أو Degraded أو Unhealthy — وهذا مصدر مثالي للتنبيهات.



التسجيل باستخدام Serilog: سجلات منظمة

السجلات هي أهم مصدر للبيانات للتشخيص. يتيح لك Serilog إرسال السجلات إلى Elasticsearch أو Seq أو ببساطة إلى ملف بتنسيق منظم.

التثبيت:

dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Seq

الإعداد في Program.cs:

Log.Logger = new LoggerConfiguration()    .MinimumLevel.Information()    .WriteTo.Console()    .WriteTo.Seq("http://localhost:5341")    .Enrich.WithProperty("Application", "MyApp")    .CreateLogger();

builder.Host.UseSerilog();

الآن، ستحتوي جميع السجلات على معلومات سياقية: RequestId و UserId ووقت التنفيذ. مثال على تسجيل خطأ:

try {    // كود خطير} catch (Exception ex) {    Log.Error(ex, "خطأ أثناء معالجة الطلب {OrderId}", orderId);}

من السهل تحليل السجلات المنظمة في Grafana أو Kibana، وبناء

المدونات

توصيات الكتب