مقاييس Prometheus في C# (.NET) — مكتبة prometheus-net
في التطوير الحديث لتطبيقات الويب والخدمات المصغرة على منصة .NET، أصبحت المراقبة وقابلية الملاحظة (observability) عناصر إلزامية في بيئة الإنتاج. مكتبة prometheus-net هي مكتبة العميل الرسمية لـ .NET، والتي تتيح تصدير مقاييس التطبيق بسهولة بتنسيق يفهمه خادم المراقبة Prometheus.
باستخدام prometheus-net، يمكنك جمع بيانات الأداء (وقت الاستجابة، عدد الطلبات، الأخطاء، استخدام الذاكرة) ونقلها إلى Prometheus لعرضها لاحقًا في Grafana أو أدوات أخرى. تدعم المكتبة كلاً من الإصدارات القديمة من .NET Framework (4.6.1+) والإصدارات الحديثة .NET Core / .NET 5/6/7/8.
التثبيت
يمكن تثبيت المكتبة عبر NuGet Package Manager أو باستخدام .NET CLI:
dotnet add package prometheus-netلتطبيقات ASP.NET Core، يلزم أيضًا حزمة prometheus-net.AspNetCore:
dotnet add package prometheus-net.AspNetCoreالأنواع الرئيسية للمقاييس
يدعم Prometheus أربعة أنواع رئيسية من المقاييس. في prometheus-net، يتم تنفيذها كمصانع ثابتة في الفئة Metrics:
- Counter — عداد يمكنه فقط الزيادة (مثل عدد الطلبات المعالجة).
- Gauge — مقياس يمكنه الزيادة والنقصان (مثل عدد الاتصالات النشطة أو درجة الحرارة الحالية).
- Histogram — رسم بياني يحسب عدد الملاحظات في فترات زمنية محددة (buckets). يُستخدم لقياس توزيع وقت الاستجابة أو حجم البيانات.
- Summary — مقياس إجمالي يحسب الشرائح المئوية (p50, p95, p99) بناءً على تدفق الملاحظات.
مثال على استخدام Counter
لنقم بإنشاء عداد بسيط لحساب عدد طلبات HTTP المعالجة:
using Prometheus;
// إنشاء عداد باسم ووصفprivate static readonly Counter RequestCount = Metrics .CreateCounter("myapp_requests_total", "Total number of HTTP requests.");
// في معالج الطلب، نزيد العدادpublic IActionResult Index(){ RequestCount.Inc(); // زيادة بمقدار 1 // أو RequestCount.Inc(5); // زيادة بمقدار 5 return View();}مثال على استخدام Gauge
Gauge مفيد لتتبع الحالة الحالية، مثل عدد المستخدمين النشطين:
private static readonly Gauge ActiveUsers = Metrics .CreateGauge("myapp_active_users", "Number of active users.");
// عند دخول المستخدمActiveUsers.Inc();
// عند خروج المستخدمActiveUsers.Dec();مثال على استخدام Histogram
الرسم البياني مثالي لقياس وقت تنفيذ الطلبات:
private static readonly Histogram RequestDuration = Metrics .CreateHistogram("myapp_request_duration_seconds", "Histogram of request duration.", new HistogramConfiguration { // تكوين حدود buckets Buckets = new[] { 0.1, 0.25, 0.5, 1.0, 2.5 } });
// في middleware أو في إجراء المتحكمusing (RequestDuration.NewTimer()){ // تنفيذ الطلب await Next(context);}التكامل مع ASP.NET Core
لكي يبدأ نقطة النهاية /metrics في تقديم البيانات بتنسيق Prometheus، يكفي إضافة middleware في Program.cs:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// إضافة middleware لجمع الـ