دمج مقاييس Prometheus في C++: مكتبة prometheus-cpp

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

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

ابدأ الدورة

مقاييس Prometheus في C++: مكتبة prometheus-cpp



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



ما هي prometheus-cpp؟



prometheus-cpp هي مكتبة عميل للغة C++ تنفذ بروتوكول تصدير مقاييس Prometheus. تدعم جميع أنواع المقاييس الأساسية: Counter، Gauge، Histogram و Summary. المكتبة مكتوبة بلغة C++ الحديثة (C++11 وما فوق)، وليس لها تبعيات خارجية (باستثناء المكتبة القياسية و libcurl لخادم HTTP)، ويتم دعمها بنشاط من قبل المجتمع.



التثبيت



أسهل طريقة للتثبيت هي عبر vcpkg أو Conan. بالنسبة لـ vcpkg، قم بتنفيذ:



vcpkg install prometheus-cpp


إذا كنت تفضل البناء يدويًا، استنسخ المستودع واستخدم CMake:



git clone https://github.com/jupp0r/prometheus-cpp.gitcd prometheus-cppmkdir build && cd buildcmake ..make -j4sudo make install


المفاهيم الأساسية



تُبنى المكتبة حول المكونات التالية:



  • Registry — سجل يخزن جميع مقاييس التطبيق.
  • Counter — عداد يزداد فقط (مثل عدد الطلبات).
  • Gauge — قيمة يمكن أن تزداد أو تنقص (مثل عدد الاتصالات النشطة).
  • Histogram — رسم بياني لقياس توزيع القيم (مثل وقت الاستجابة).
  • Summary — تقدير كمي (يشبه الرسم البياني ولكنه يحسب النسب المئوية الدقيقة).


مثال: إنشاء Counter و Gauge



لننظر إلى مثال بسيط — خادم HTTP يحسب عدد الطلبات ويتتبع عدد الاتصالات النشطة.



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

int main() { // إنشاء سجل المقاييس auto registry = std::make_shared<prometheus::Registry>();

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

// إضافة تسمية "method" بقيمة "GET" auto& http_requests = counter_family.Add({{"method", "GET"}});

// إنشاء عائلة Gauge auto& gauge_family = prometheus::BuildGauge() .Name("active_connections") .Help("Number of active connections") .Register(*registry);

auto& active_connections = gauge_family.Add({});

// تصدير المقاييس على المنفذ 8080 prometheus::Exposer exposer("0.0.0.0:8080"); exposer.RegisterCollectable(registry);

// محاكاة العمل while (true) { http_requests.Increment(); // +1 للعداد active_connections.Set(42); // تعيين القيمة إلى 42 std::this_thread::sleep_for(std::chrono::seconds(1)); }

return 0;}


مثال: Histogram لوقت الاستجابة



الرسوم البيانية مفيدة لقياس زمن الاستجابة. دعنا نحدد الحاويات لوقت الاستجابة:



#include <prometheus/histogram.h>

// إنشاء رسم بياني بحاويات: 0.1، 0.5، 1.0، 2.5، 5.0 ثوانٍauto& histogram_family = prometheus::BuildHistogram() .Name("http_request_duration_seconds") .Help("Request latency in seconds") .Register(*registry);

auto& request_duration = histogram_family.Add(

توصيات