مراقبة تطبيقات C#: المقاييس والتنبيهات من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا تعتبر المراقبة أمرًا حيويًا لتطبيقات C#

\n\n

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

\n\n

بدون مراقبة، أنت تعمل بشكل أعمى: تظل تسريبات الذاكرة غير مكتشفة حتى تعطل الخادم، وتتراكم الطلبات البطيئة، ويغادر المستخدمون إلى المنافسين. في هذه المقالة، سنشرح دورة كاملة لإعداد قابلية المراقبة (observability) لتطبيقات C#: من جمع المقاييس الأساسية إلى إعداد التنبيهات الذكية في الوقت الفعلي.

\n\n

1. أساسيات المراقبة: ما المقاييس التي يجب جمعها في .NET

\n\n

قبل إعداد الأدوات، من المهم فهم المقاييس المهمة حقًا لتطبيقات C#. سنقسمها إلى ثلاث مجموعات:

\n\n

1.1. مقاييس النظام (مستوى البنية التحتية)

\n
    \n
  • CPU و Memory — تحميل المعالج واستهلاك الذاكرة العشوائية لعملية dotnet.
  • \n
  • GC (Garbage Collection) — تكرار ومدة عمليات جمع القمامة، حجم الأكوام (Gen0, Gen1, Gen2, LOH).
  • \n
  • Thread Pool — عدد الخيوط النشطة والحرة والمنتظرة.
  • \n
  • Disk I/O و Network — القراءة/الكتابة على القرص، الاتصالات الشبكية.
  • \n
\n\n

1.2. مقاييس الأعمال (مستوى التطبيق)

\n
    \n
  • Request Rate — عدد الطلبات في الثانية (RPS).
  • \n
  • Latency — وقت الاستجابة (النسب المئوية p50, p95, p99).
  • \n
  • Error Rate — نسبة أخطاء 4xx و 5xx.
  • \n
  • Active Users — عدد المستخدمين النشطين في وقت واحد.
  • \n
\n\n

1.3. مقاييس .NET Runtime

\n
    \n
  • JIT Compilation — وقت ترجمة الطرق.
  • \n
  • Assembly Loading — عدد التجميعات المحملة.
  • \n
  • Exceptions — عدد الاستثناءات الملقاة في الثانية.
  • \n
\n\n

لجمع هذه المقاييس في .NET، تُستخدم أداة قوية — System.Diagnostics.Metrics (API مدمج منذ .NET 6+) ومكتبة OpenTelemetry.

\n\n

2. إعداد جمع المقاييس باستخدام OpenTelemetry و Prometheus

\n\n

أفضل طريقة لتنظيم مراقبة تطبيق C# هي استخدام مجموعة OpenTelemetry (جمع المقاييس) + Prometheus (التخزين) + Grafana (التصور). دعنا نستعرض الإعداد خطوة بخطوة.

\n\n

2.1. تثبيت حزم NuGet

\n

أضف الحزم التالية إلى المشروع:

\n
dotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.Runtime
\n\n

2.2. التكوين في Program.cs

\n

قم بإعداد OpenTelemetry لجمع مقاييس ASP.NET Core و .NET Runtime تلقائيًا:

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation() // مقاييس طلبات HTTP\n        .AddRuntimeInstrumentation()    // مقاييس GC, JIT, ThreadPool\n        .AddPrometheusExporter());      // التصدير إلى Prometheus\n\nvar app = builder.Build();\n\napp.UseOpenTelemetryPrometheusScrapingEndpoint(); // نقطة النهاية /metrics\n\napp.Run();
\n\n

الآن، سيكون عنوان http://localhost:5000/metrics متاحًا كنقطة نهاية تحتوي على المقاييس بتنسيق Prometheus.

\n\n

2.3. إنشاء مقاييس مخصصة

\n

دعنا نضيف مقياس أعمال — عداد للطلبات المعالجة:

\n
public class OrderMetrics\                

المدونات

توصيات الكتب