مقاييس Prometheus في C# (.NET): التكامل والإعداد

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

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

ابدأ الدورة

مقاييس Prometheus في C# (.NET): دليل شامل للتكامل

\n\n

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

\n\n

لماذا نحتاج مقاييس Prometheus في .NET؟

\n

تتيح المراقبة باستخدام Prometheus ما يلي:

\n
    \n
  • تتبع عدد الطلبات، الأخطاء، ووقت الاستجابة.
  • \n
  • جمع مقاييس الأداء (وحدة المعالجة المركزية، الذاكرة، جامع القمامة).
  • \n
  • إنشاء مقاييس أعمال مخصصة (المستخدمون النشطون، الطلبات).
  • التكامل مع Grafana لتصور لوحات المعلومات.
  • إعداد التنبيهات بناءً على قيم العتبة.
\n\n

مكتبة prometheus-net

\n

المكتبة الرئيسية للعمل مع Prometheus في .NET هي prometheus-net. وهي تدعم ASP.NET Core، .NET Core، .NET Framework و gRPC. التثبيت عبر NuGet:

\n
dotnet add package prometheus-net
\n

لـ ASP.NET Core، قم بتثبيت الحزمة الإضافية:

\n
dotnet add package prometheus-net.AspNetCore
\n\n

أنواع المقاييس في Prometheus

\n

تدعم المكتبة جميع أنواع المقاييس القياسية:

\n
    \n
  • Counter — عداد يزداد فقط (عدد الطلبات).
  • Gauge — قيمة يمكن أن تزيد وتنقص (درجة الحرارة الحالية).
  • Histogram — رسم بياني لقياس توزيع القيم (وقت الاستجابة).
  • Summary — كميات مئوية لتجميع البيانات (p95، p99).
\n\n

مثال: Counter أساسي

\n

لننشئ مقياسًا يحسب عدد الطلبات إلى نقطة النهاية:

\n
using Prometheus;\n\npublic class MetricsService\n{\n    private static readonly Counter RequestCount = Metrics\n        .CreateCounter("app_requests_total", "إجمالي عدد الطلبات", new CounterConfiguration\n        {\n            LabelNames = new[] { "method", "endpoint" }\n        });\n\n    public void RecordRequest(string method, string endpoint)\n    {\n        RequestCount.WithLabels(method, endpoint).Inc();\n    }\n}
\n

في وحدة التحكم ASP.NET Core، سيكون الاستدعاء كالتالي:

\n
[ApiController]\n[Route("api/order")]\npublic class OrderController : ControllerBase\n{\n    private readonly MetricsService _metrics;\n\n    public OrderController(MetricsService metrics) => _metrics = metrics;\n\n    [HttpGet]\n    public IActionResult GetOrders()\n    {\n        _metrics.RecordRequest("GET", "/api/order");\n        return Ok(new { orders = new[] { "order1", "order2" } });\n    }\n}
\n\n

مثال: Gauge للمستخدمين النشطين

\n
private static readonly Gauge ActiveUsers = Metrics\n    .CreateGauge("app_active_users", "عدد المستخدمين النشطين");\n\npublic void UserLoggedIn() => ActiveUsers.Inc();\npublic void UserLoggedOut() => ActiveUsers.Dec();
\n\n

مثال: Histogram لوقت الاستجابة

\n
private static readonly Histogram RequestDuration = Metrics\n    .CreateHistogram("app_request_duration_seconds", "مدة الطلب بالثواني",\n        new HistogramConfiguration\n        {\n            Buckets = Histogram.ExponentialBuckets(0.001, 2, 10) // من 1 مللي ثانية إلى ~1 ثانية\n        });\n\npublic void RecordRequestDuration(double seconds)\n{\n    RequestDuration.Observe(seconds);\n}
\n\n

تصدير المقاييس في ASP.NET Core

\n

لكي يتمكن Prometheus من جمع المقاييس، يجب إضافة نقطة نهاية /metrics. في Program.cs:

\n
using Prometheus;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddCont                    

توصيات