دمج مقاييس Prometheus في PHP: المكتبات والأمثلة

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

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

ابدأ الدورة

مقاييس Prometheus في PHP: مراقبة أداء التطبيقات



Prometheus هو نظام مراقبة وتنبيه قوي مفتوح المصدر، أصبح المعيار الفعلي في عالم Cloud Native. لدمج Prometheus مع تطبيقات PHP، توجد عدة مكتبات ناضجة. في هذه المقالة، سنستعرض اثنتين رئيسيتين: promphp/prometheus_client_php و artisanphpex/prometheus، وسنوضح كيفية إضافة المقاييس إلى مشروع PHP الخاص بك.



لماذا نحتاج إلى مقاييس في PHP؟

تتيح مراقبة تطبيقات PHP تتبع:

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


يساعد جمع هذه البيانات في اكتشاف المشكلات بسرعة، والتخطيط للتوسع، وتحسين تجربة المستخدم.



مكتبة promphp/prometheus_client_php

هذه هي المكتبة الأكثر شيوعًا والتي يتم صيانتها بنشاط. وهي تنفذ العميل الرسمي لـ Prometheus للغة PHP وتدعم جميع أنواع المقاييس:

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


التثبيت

composer require promphp/prometheus_client_php


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

<?phprequire 'vendor/autoload.php';

use Prometheus\\CollectorRegistry;use Prometheus\\Storage\\InMemory;use Prometheus\\RenderTextFormat;

// إنشاء مخزن (يمكن أن يكون Redis، APC، InMemory)$adapter = new InMemory();$registry = new CollectorRegistry($adapter);

// إنشاء عداد$counter = $registry->registerCounter( 'app', 'requests_total', 'Total number of HTTP requests', ['method', 'endpoint']);

// الزيادة عند كل طلب$counter->incBy(1, ['GET', '/api/users']);

// إنشاء رسم بياني لوقت الاستجابة$histogram = $registry->registerHistogram( 'app', 'response_time_seconds', 'Response time in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5] // buckets);

// مراقبة وقت تنفيذ الطلب$histogram->observe(0.234, ['GET', '/api/users']);

// إخراج المقاييس بتنسيق Prometheus$renderer = new RenderTextFormat();$result = $renderer->render($registry->getMetricFamilySamples());

header('Content-Type: ' . RenderTextFormat::MIME_TYPE);echo $result;


مكتبة artisanphpex/prometheus

هذه بديل أخف وزنًا، يركز على سهولة الاستخدام. كما أنها تدعم Counter و Gauge و Histogram و Summary.



التثبيت

composer require artisanphpex/prometheus


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

<?phprequire 'vendor/autoload.php';

use ArtisanPhp\\Prometheus\\CollectorRegistry;use ArtisanPhp\\Prometheus\\Storage\\InMemory;use ArtisanPhp\\Prometheus\\RenderTextFormat;

$adapter = new InMemory();$registry = new CollectorRegistry($adapter);

// إنشاء Gauge$gauge = $registry->registerGauge( 'app', 'memory_usage_bytes', 'Current memory usage in bytes', ['process']);

$gauge->set(memory_get_usage(true), ['main']);

// إنشاء Summary$summary = $registry->registerSummary( 'app', 'request_duration_milliseconds', 'Request duration in ms', ['method'], 0.95, // quantile 0.01 // error);

$summary->observe(150, ['GET']);

// إخراج الم

توصيات