مراقبة تطبيقات C++: المكتبات والأدوات لجمع المقاييس

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

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

ابدأ الدورة

مراقبة تطبيقات C++: الأدوات والمكتبات لجمع المقاييس والتسجيل



غالبًا ما يتضمن التطوير بلغة C++ إنشاء أنظمة عالية التحميل، حيث يكون الأداء والاستقرار أمرًا بالغ الأهمية. بدون مراقبة عالية الجودة، من المستحيل تحديد الاختناقات أو تسرب الذاكرة أو السلوك غير الطبيعي بسرعة. في هذه المقالة، سننظر في المكتبات والأساليب الرئيسية لتنظيم مراقبة تطبيقات C++ - من جمع المقاييس إلى التكامل مع أنظمة المراقبة الشائعة.



لماذا نحتاج إلى مراقبة تطبيقات C++؟

المهام الرئيسية للمراقبة:

  • تتبع استخدام وحدة المعالجة المركزية (CPU)، والذاكرة، والقرص، والشبكة.
  • قياس زمن الاستجابة (latency) لمعالجة الطلبات.
  • جمع عدد الأخطاء والاستثناءات.
  • تحليل أداء النقاط الساخنة (hot paths) في الكود.
  • التنبيه التلقائي عند الوصول إلى قيم حدية.


المكتبات الرئيسية لمراقبة C++



1. Prometheus-CPP (prometheus-cpp)

واحدة من أشهر المكتبات لجمع وتصدير المقاييس بتنسيق Prometheus. تتيح إنشاء العدادات (counter)، والمدرجات التكرارية (histogram)، وأجهزة القياس (gauge).

مثال على الاستخدام:

#include <prometheus/counter.h>#include <prometheus/exposer.h>#include <prometheus/registry.h>

// نقطة نهاية HTTP لجمع المقاييسprometheus::Exposer exposer{"0.0.0.0:8080"};auto registry = std::make_shared<prometheus::Registry>();

// إنشاء عدادauto& counter_family = prometheus::BuildCounter() .Name("http_requests_total") .Help("Total HTTP requests") .Register(*registry);

auto& http_requests = counter_family.Add({{"method", "GET"}});

// عرض المقاييسexposer.RegisterCollectable(registry);

// زيادة العداد مع كل طلبhttp_requests.Increment();


2. OpenTelemetry C++

معيار حديث لجمع التتبعات (traces)، والمقاييس، والسجلات. يوفر OpenTelemetry للغة C++ SDK لأدوات الكود وتصدير البيانات إلى أي نظام خلفي (Jaeger، Zipkin، Prometheus).

مثال على إعداد التتبع:

#include <opentelemetry/trace/provider.h>#include <opentelemetry/exporters/otlp/otlp_http_exporter.h>#include <opentelemetry/sdk/trace/tracer_provider.h>

// تهيئة المُصدرauto exporter = std::unique_ptr<opentelemetry::sdk::trace::SpanExporter>( new opentelemetry::exporter::otlp::OtlpHttpExporter());

auto processor = std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>( new opentelemetry::sdk::trace::SimpleSpanProcessor(std::move(exporter)));

auto provider = std::shared_ptr<opentelemetry::trace::TracerProvider>( new opentelemetry::sdk::trace::TracerProvider(std::move(processor)));

opentelemetry::trace::Provider::SetTracerProvider(provider);

// إنشاء سبانauto tracer = provider->GetTracer("my_app");auto span = tracer->StartSpan("process_request");span->SetAttribute("user_id", 12345);span->End();


3. spdlog + metrics

على الرغم من أن spdlog هي مكتبة للتسجيل، إلا أنها غالبًا ما تُدمج مع مقاييس مخصصة. على سبيل المثال، يمكن تسجيل وقت تنفيذ الوظائف وتحليل السجلات بواسطة أدوات خارجية (Filebeat + Elasticsearch).

مثال على قياس الوقت باستخدام spdlog:

#include <spdlog/spdlog.h>#include <chrono>

void process_data() { auto start = std::chrono::high_resolution_clock::now(); // ... منطق الأعمال ... auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); spdlog::info("process_data took {} ms", duration.count());}


4. Google Performance Tools (gperftools)

مجموعة أدوات لتحليل الأداء: محلل وحدة المعالجة المركزية (CPU profiler)، ومحلل الكومة (heap profiler)، ومحلل

توصيات