مقدمة: لماذا مراقبة تطبيقات C# هي فن
في التطوير الحديث لـ C# (.NET)، لم تعد المراقبة مجرد خيار. إنها عنصر إلزامي في بيئة الإنتاج، لا يسمح فقط بتسجيل الأعطال، بل بالتنبؤ بها أيضًا. على المستوى المتقدم، تتحول المراقبة إلى نظام إنذار مبكر: أنت لا تنظر فقط إلى لوحات البيانات، بل تقوم بإعداد تنبيهات بناءً على مقاييس معقدة.
في هذه المقالة، سنشرح كيفية تجاوز العدادات القياسية لوحدة المعالجة المركزية والذاكرة. ستتعلم كيفية جمع مقاييس الأعمال المخصصة، وإعداد التنبيهات باستخدام Prometheus و Alertmanager، وكذلك استخدام OpenTelemetry للتتبع. جميع الأمثلة ستكون بلغة C#.
1. الأدوات المتقدمة: App Metrics و Prometheus
1.1. ربط Prometheus بـ ASP.NET Core
غالبًا ما تقتصر المراقبة الأساسية في .NET على PerformanceCounter المدمج. ومع ذلك، بالنسبة للهندسة المعمارية للخدمات المصغرة، أصبح Prometheus هو المعيار. قم بتثبيت الحزمة:
dotnet add package prometheus-net.AspNetCoreثم أضف الوسيطة (middleware) في Program.cs:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// تفعيل نقطة نهاية المقاييسapp.UseHttpMetrics();app.UseRouting();app.MapMetrics(); // /metrics
app.Run();سيمنحك هذا المقاييس الأساسية: عدد الطلبات، المدة، الأخطاء. لكن هذا لا يكفي للمستوى المتقدم.
1.2. مقاييس الأعمال المخصصة
لنفترض أنك تريد تتبع عدد الطلبات التي تم إنشاؤها أو وقت تنفيذ عملية تجارية حرجة. استخدم Counter و Histogram:
using Prometheus;
public class OrderMetrics{ private static readonly Counter OrdersCreated = Metrics .CreateCounter("orders_created_total", "إجمالي عدد الطلبات التي تم إنشاؤها");
private static readonly Histogram OrderProcessingTime = Metrics .CreateHistogram("order_processing_seconds", "مدرج تكراري لوقت معالجة الطلب");
public void RecordOrderCreation(double elapsedSeconds) { OrdersCreated.Inc(); OrderProcessingTime.Observe(elapsedSeconds); }}الآن يمكنك حقن OrderMetrics في أي خدمة وتسجيل البيانات. سيسمح لك ذلك ببناء لوحات بيانات في Grafana بدقة تصل إلى الثانية.
2. التنبيهات: من المشغلات البسيطة إلى القواعد الموجهة نحو SLO
2.1. إعداد Alertmanager لمقاييس C#
جمع المقاييس هو نصف المهمة. النصف الثاني هو التنبيهات. قم بإنشاء قاعدة لـ Prometheus (alerts.yml):
groups: - name: csharp_app_alerts rules: - alert: HighErrorRate expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05 for: 2m labels: severity: critical annotations: summary: "معدل أخطاء مرتفع في تطبيق C#" description: "معدل الأخطاء هو {{ $value }} خلال آخر 5 دقائق"هذا مثال أساسي. على المستوى المتقدم، يجب إضافة تنبيهات SLO. على سبيل المثال، إذا كانت 99% من الطلبات لا تستغرق أقل من 200 مللي ثانية - فهذا سبب للذعر.
2.2. التنبيهات بناءً على مقاييس الأعمال
استخدم العدادات المخصصة من القسم السابق. إذا انخفض عدد الطلبات بشكل حاد - فهذا يعني أن شيئًا ما قد تعطل:
- alert: OrdersStopped expr: rate(orders_created_total[10m]) == 0 for: 5m labels: severity: warning annotations: summary: "لم يتم إنشاء أي طلبات في آخر 10 دقائق"لا يمكن الحصول على هذا التنبيه من مقاييس نظام التشغيل القياسية - فهو يتطلب فهمًا عميقًا لمنطق الأعمال.
3. OpenTelemetry: التتبع الموزع في C#
3.1. تكامل OpenTelemetry SDK
عندما يكون لديك 10 خدمات مصغرة بلغة C#، فإن المقاييس الفردية لن تساعد. أنت بحاجة إلى التتبع. قم بتثبيت