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

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

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

ابدأ الدورة

مراقبة تطبيقات C#: المقاييس والتنبيهات على مستوى متقدم

\n\n

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

\n\n

لماذا نحتاج إلى مراقبة متقدمة؟

\n

المراقبة الأساسية (CPU، RAM، القرص) لا تعطي صورة كاملة. بالنسبة لتطبيقات C#، تعتبر المقاييس المحددة حاسمة: عدد عمليات جمع القمامة (GC)، وقت حظر الخيوط، حجم مجموعة اتصالات قاعدة البيانات. تتيح التنبيهات على هذه المقاييس الاستجابة قبل حدوث الفشل. يتضمن النهج المتقدم ثلاثة مستويات:

\n
    \n
  • مستوى البنية التحتية — المقاييس القياسية للخادم.
  • \n
  • مستوى التطبيق — مقاييس منطق الأعمال (التأخيرات، الأخطاء، تكرار الاستدعاءات).
  • \n
  • مستوى الأعمال — المقاييس المرتبطة بالمجال (عدد الطلبات، معدل التحويل).
  • \n
\n

سنركز على مستوى التطبيق، الذي يعطي أكبر تأثير لمطوري C#.

\n\n

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

\n

OpenTelemetry (OTel) هو المعيار الفعلي لأدوات تطبيقات .NET. يتيح جمع المقاييس والتتبعات والسجلات عبر واجهة برمجة تطبيقات موحدة. لنلق نظرة على مثال للتكامل مع Prometheus.

\n\n

قم بتثبيت حزم NuGet:

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

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

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation()\n        .AddRuntimeInstrumentation()\n        .AddPrometheusExporter());\n\nvar app = builder.Build();\n\napp.MapPrometheusScrapingEndpoint(); // نقطة نهاية لـ Prometheus\n\napp.Run();
\n\n

الآن على العنوان /metrics، سيوفر خدمتك المقاييس بتنسيق Prometheus. من بينها: عدد طلبات HTTP، وقت معالجتها، مقاييس GC والذاكرة.

\n\n

المقاييس المخصصة

\n

للمقاييس التجارية، استخدم Meter و Counter:

\n
using System.Diagnostics.Metrics;\n\npublic class OrderMetrics\n{\n    private readonly Counter<int> _ordersCreated;\n\n    public OrderMetrics(IMeterFactory meterFactory)\n    {\n        var meter = meterFactory.Create("MyApp.Orders");\n        _ordersCreated = meter.CreateCounter<int>("orders.created.count");\n    }\n\n    public void OrderCreated() => _ordersCreated.Add(1);\n}\n\n// التسجيل في DI:\nbuilder.Services.AddSingleton<OrderMetrics>();
\n\n

سيتم تضمين هذه المقاييس تلقائيًا في Prometheus وستكون متاحة لبناء لوحات المعلومات في Grafana.

\n\n

إعداد التنبيهات: من القواعد البسيطة إلى النظام متعدد المستويات

\n

المقاييس وحدها عديمة الفائدة بدون تنبيهات. في Prometheus، يتم إعداد التنبيهات عبر Alertmanager. لنلق نظرة على سيناريو متقدم: تنبيه لوقت استجابة API غير طبيعي.

\n\n

قاعدة في Prometheus (alert.rules.yml)

\n
groups:\n  - name: csharp_app_alerts\n    rules:\n      - alert: HighRequestLatency\n        expr: |\n          histogram_quantile(0.95, \n            rate(http_server_duration_seconds_bucket[5m])\n          ) > 2\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n          summary: "زمن استجابة الطلبات مرتفع ({{ $value }}s)"\n          descr                

المدونات

توصيات الكتب