مراقبة تطبيقات .NET باستخدام Prometheus وOpenTelemetry

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

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

ابدأ الدورة

مراقبة تطبيقات C# (.NET): من المقاييس إلى التنبيهات



تتطلب تطبيقات .NET الحديثة مراقبة مستمرة للأداء والتوفر وحالة العمليات الداخلية. في هذه المقالة، سنستعرض الأدوات الرئيسية لتنظيم المراقبة: Prometheus لجمع المقاييس، OpenTelemetry للتتبع، وSerilog للتسجيل المنظم. ستتعلم كيفية دمج قابلية المراقبة (observability) في تطبيق C# الخاص بك.



لماذا نحتاج إلى مراقبة تطبيقات .NET؟

غياب المراقبة يحول التصحيح إلى تخمين. بدون مقاييس، لن تعرف عن زيادة وقت الاستجابة، بدون تتبعات، لن تجد الاختناق في سلسلة الاستدعاءات، بدون سجلات، لن تفهم سبب الخطأ. تتيح المراقبة المضبوطة بشكل صحيح ما يلي:

  • اكتشاف الحالات الشاذة قبل أن تؤثر على المستخدمين.
  • تحليل أداء المكونات الفردية (قواعد البيانات، API، التخزين المؤقت).
  • جمع مقاييس الأعمال (عدد الطلبات، الجلسات النشطة).
  • أتمتة التنبيهات حول الحوادث.


أدوات مراقبة .NET

سنستخدم ثلاثة مكونات رئيسية:

  • Prometheus — نظام لجمع وتخزين المقاييس بلغة استعلام قوية PromQL.
  • OpenTelemetry — معيار لجمع بيانات القياس عن بُعد (التتبعات، المقاييس، السجلات).
  • Serilog — مكتبة تسجيل منظم لـ .NET.


الخطوة 1: تثبيت وتهيئة Prometheus مع .NET

لدمج Prometheus مع C#، استخدم الحزمة prometheus-net. قم بتثبيتها عبر NuGet:

dotnet add package prometheus-net

ثم أضف الوسيطة (middleware) إلى ملف Program.cs الخاص بك:

using Prometheus;

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

// تفعيل نقطة النهاية /metrics لـ Prometheusapp.UseHttpMetrics();app.MapMetrics();

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

بعد تشغيل التطبيق، انتقل إلى العنوان http://localhost:5000/metrics. سترى المقاييس القياسية: http_requests_total، http_request_duration_seconds وغيرها.



الخطوة 2: إنشاء مقاييس مخصصة

غالبًا ما تحتاج إلى تتبع مؤشرات الأعمال. على سبيل المثال، عدد الطلبات المعالجة:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCounter = Metrics .CreateCounter("orders_processed_total", "Total number of processed orders");

public static void RecordOrder() { OrdersCounter.Inc(); }}

// الاستخدام في المتحكم (Controller)[ApiController][Route("api/orders")]public class OrdersController : ControllerBase{ [HttpPost] public IActionResult CreateOrder() { // ... منطق إنشاء الطلب OrderMetrics.RecordOrder(); return Ok(); }}

الآن في /metrics سيظهر السطر orders_processed_total 1.



الخطوة 3: التتبع باستخدام OpenTelemetry

يساعد التتبع في فهم المدة التي يستغرقها كل مرحلة من مراحل معالجة الطلب. قم بتثبيت الحزم:

dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Console

قم بتهيئة OpenTelemetry في Program.cs:

using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddConsoleExporter());

var app = builder.Build();app.Run();

الآن، كل طلب HTTP سينشئ تلقائيًا تتبعًا بمعلومات عن وقت التنفيذ. للتصدير

توصيات