مراقبة تطبيقات C# (.NET) باستخدام AppMetrics

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

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

ابدأ الدورة

مكتبة AppMetrics لمراقبة تطبيقات C# (.NET)



عند تطوير تطبيقات .NET الحديثة، من المهم جدًا تتبع حالتها وأدائها وتحديد الاختناقات. مكتبة AppMetrics هي أداة قوية ومرنة لجمع وتجميع وتصدير المقاييس في الوقت الفعلي. تتيح للمطورين والمسؤولين الحصول على صورة كاملة عن أداء الخدمة: من وقت تنفيذ الطلبات إلى معدل الأخطاء.



تدعم AppMetrics العديد من الخلفيات لتخزين المقاييس: Prometheus، InfluxDB، Graphite، Elasticsearch وغيرها. بفضل فحوصات الصحة المدمجة، لا يمكنك فقط جمع الإحصائيات، بل أيضًا التحقق من صحة التبعيات (قواعد البيانات، واجهات برمجة التطبيقات الخارجية).



الإمكانيات الرئيسية

  • العدادات (Counters) — عدد الطلبات، الأخطاء، الأحداث.
  • المدرجات التكرارية (Histograms) — توزيع وقت تنفيذ العمليات.
  • المؤقتات (Timers) — قياس مدة تنفيذ الكود.
  • مقاييس المعدل (Meters) — سرعة الأحداث في الثانية.
  • فحوصات الصحة (Health Checks) — التحقق من توفر الخدمات الخارجية.
  • تصدير المقاييس — إلى Prometheus (تنسيق /metrics)، InfluxDB وغيرها.


التثبيت والإعداد

قم بتثبيت الحزمة عبر NuGet:

dotnet add package AppMetrics.AspNetCore.Mvcdotnet add package AppMetrics.Reporting.Prometheus.Client


ثم أضف الخدمات في Program.cs (أو Startup.cs):

using App.Metrics;using App.Metrics.AspNetCore;using App.Metrics.Formatters.Prometheus;

var builder = WebApplication.CreateBuilder(args);

// إعداد المقاييسvar metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .Build();

builder.Services.AddMetrics(metrics);builder.Services.AddMetricsTrackingMiddleware();builder.Services.AddMetricsEndpoints();

var app = builder.Build();

app.UseMetricsAllMiddleware();app.UseMetricsAllEndpoints();

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

app.Run();


بعد تشغيل التطبيق، ستكون المقاييس متاحة على العنوان /metrics بتنسيق Prometheus.



إنشاء مقاييس مخصصة

قم بتعريف فئة لتخزين المقاييس:

public class MyMetrics{    private readonly IMetrics _metrics;

public MyMetrics(IMetrics metrics) { _metrics = metrics; }

// عداد الطلبات private readonly CounterOptions _requestCounter = new CounterOptions { Name = "myapp_requests_total", MeasurementUnit = Unit.Requests };

// مؤقت لقياس وقت التنفيذ private readonly TimerOptions _requestTimer = new TimerOptions { Name = "myapp_request_duration_seconds", MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Seconds };

public void TrackRequest() { _metrics.Measure.Counter.Increment(_requestCounter); }

public IDisposable MeasureRequestDuration() { return _metrics.Measure.Timer.Time(_requestTimer); }}


استخدم المقاييس في المتحكمات:

[ApiController][Route("api/[controller]")]public class SampleController : ControllerBase{    private readonly MyMetrics _myMetrics;

public SampleController(MyMetrics myMetrics) { _myMetrics = myMetrics; }

[HttpGet] public IActionResult Get() { _myMetrics.TrackRequest();

using (_myMetrics.MeasureRequestDuration()) { // محاكاة العمل Thread.Sleep(100); }

return Ok("Metrics tracked"); }}


فحوصات الصحة

توصيات