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

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

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

ابدأ الدورة

مراقبة تطبيقات C# (.NET): دليل كامل لـ OpenTelemetry وPrometheus



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



لماذا OpenTelemetry تحديدًا؟

OpenTelemetry (OTel) هو المعيار الصناعي لجمع المقاييس والتتبعات (التتبع) والسجلات. بالنسبة لـ .NET، يوفر حزم SDK رسمية وأدوات آلية للمكتبات الشائعة (ASP.NET Core، gRPC، Entity Framework).



تثبيت وإعداد OpenTelemetry في مشروع C#

أضف حزم NuGet إلى مشروعك:

dotnet add package OpenTelemetrydotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore


الإعداد الأساسي في Program.cs

قم بإعداد جمع المقاييس والتصدير إلى Prometheus:

using OpenTelemetry.Metrics;using OpenTelemetry.Resources;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .ConfigureResource(resource => resource .AddService("MyApp", serviceVersion: "1.0.0")) .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddMeter("Microsoft.AspNetCore.Hosting") .AddMeter("Microsoft.AspNetCore.Server.Kestrel") .AddPrometheusExporter());

var app = builder.Build();

// نقطة نهاية لـ Prometheus (الافتراضي /metrics)app.MapPrometheusScrapingEndpoint();

app.Run();


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

يمكنك إضافة عدادات ومدرجات ترددية وأجهزة استشعار خاصة بك:

using System.Diagnostics.Metrics;

public class OrderMetrics{ private readonly Counter<int> _ordersCreated; private readonly Histogram<double> _orderProcessingTime;

public OrderMetrics(IMeterFactory meterFactory) { var meter = meterFactory.Create("MyApp.Orders"); _ordersCreated = meter.CreateCounter<int>("orders.created", description: "عدد الطلبات المنشأة"); _orderProcessingTime = meter.CreateHistogram<double>("orders.processing_time", unit: "ms"); }

public void RecordOrderCreated() => _ordersCreated.Add(1); public void RecordProcessingTime(double ms) => _orderProcessingTime.Record(ms);}


تتبع الطلبات (التتبع الموزع)

لتتبع سلاسل الاستدعاءات، أضف التتبع:

using OpenTelemetry.Trace;

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEntityFrameworkCoreInstrumentation() .AddConsoleExporter()); // للتصحيح، في الإنتاج استخدم Jaeger أو Zipkin


التسجيل عبر OpenTelemetry

قم بتوصيل المسجل بـ OTel:

using OpenTelemetry.Logs;

builder.Logging.AddOpenTelemetry(logging => logging .AddConsoleExporter() .AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317")));


إعداد Prometheus لجمع المقاييس

في ملف prometheus.yml، حدد نقطة النهاية الخاصة بك:

scrape_configs:  - job_name: 'dotnet-app'    scrape_interval: 5s    static_configs:      - targets: ['localhost:5000']  # منفذ تطبيقك


التصور في Grafana

بعد توصيل Prometheus بـ Grafana، أنشئ لوحة تحكم بالمقاييس الرئيسية:

توصيات