مراقبة تطبيقات PHP: مقاييس متقدمة وتنبيهات

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

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

ابدأ الدورة

مقدمة: لماذا لا تكفي المراقبة الأساسية؟

المراقبة الأساسية لتطبيقات PHP (التحقق من "حي/ميت" واستخدام وحدة المعالجة المركزية) تتوقف عن العمل تحت الأحمال العالية. عندما يعالج تطبيقك آلاف الطلبات في الثانية، لا تظهر المقاييس القياسية نقاط الاختناق: الاستعلامات البطيئة لقاعدة البيانات، تسرب الذاكرة في العمليات الطويلة، أو الارتفاعات المفاجئة في زمن الاستجابة (latency).

في هذه المقالة، سنستعرض المستوى المتقدم للمراقبة: جمع مقاييس الأعمال، التحليل في الوقت الفعلي، إعداد التنبيهات بناءً على النسب المئوية، والتكامل مع مجموعات المراقبة الحديثة (Prometheus + Grafana). ستتعلم كيفية تطبيق أدوات تسمح لك ليس فقط برؤية أن التطبيق "توقف"، بل بالتنبؤ بالمشاكل قبل حدوثها.



1. مقاييس متقدمة: من رموز HTTP إلى مؤشرات الأعمال

العدادات القياسية (عدد الطلبات، حالات 200/500) هي الحد الأدنى. للتحليل العميق، تحتاج إلى جمع:

  • زمن الاستجابة (Latency): p50، p95، p99 لوقت الاستجابة. تشير الحالات الشاذة في p99 إلى "القيم المتطرفة" في الأداء.
  • استهلاك الذاكرة: ليس فقط القيمة القصوى، بل أيضًا معدل النمو خلال الطلب الواحد.
  • وقت تنفيذ الاستدعاءات الخارجية: Redis، MySQL، RabbitMQ — يجب أن يكون لكل خدمة مقياسها الخاص.
  • مقاييس الأعمال: عدد الطلبات المكتملة، أخطاء التحقق، سرعة قوائم الانتظار.

مثال لجمع المقاييس باستخدام promphp/prometheus_client_php:

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

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

// رسم بياني لوقت تنفيذ الطلب$histogram = $registry->registerHistogram( 'app', 'request_duration_seconds', 'HTTP request duration', ['method', 'endpoint'], [0.1, 0.5, 1.0, 2.0, 5.0]);

// عداد أحداث الأعمال$counter = $registry->registerCounter( 'business', 'orders_total', 'Total orders created', ['status'] // success/failed);

// في الوسيط (middleware) نقيس الوقت$start = microtime(true);// ... تنفيذ الطلب ...$duration = microtime(true) - $start;$histogram->observe($duration, ['GET', '/api/orders']);


2. فحوصات الصحة والاختبار العميق: التحقق من التبعيات

نقطة نهاية ping البسيطة لا تتحقق من توفر قاعدة البيانات أو ذاكرة التخزين المؤقت أو قوائم الانتظار. قم بإنشاء فحص صحي شامل يحاكي الطلبات الحقيقية:

// health.php$checks = [    'database' => function () {        $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');        $db->query('SELECT 1');        return true;    },    'redis' => function () {        $redis = new Redis();        $redis->connect('127.0.0.1', 6379);        $redis->ping();        return true;    },    'queue' => function () {        // نتحقق من أن RabbitMQ غير ممتلئ        $channel = new AMQPChannel(new AMQPConnection());        $queue = new AMQPQueue($channel);        return $queue->declareQueue() !== false;    }];

$results = [];$healthy = true;foreach ($checks as $name => $check) { try { $check(); $results[$name] = 'ok'; } catch (\\Throwable $e) { $results[$name] = 'failed: ' . $e->getMessage(); $healthy = false; }}

header('Content-Type: application/json');http_response_code($healthy ? 200 : 503);echo json_encode(['status' => $healthy ? 'healthy' : 'unhealthy', 'checks' => $results]);

يمكن ربط نقطة النهاية هذه بفحوصات Kubernetes liveness/readiness probes أو بمراقبة خارجية (مثل UptimeRobot)، والتي ستتحقق ليس فقط من التوفر، بل من قابلية عمل جميع التبعيات.



3. التنبيهات بناءً على النسب المئوية والحالات الشاذة

التنبيهات على "متوسط وقت الاستجابة" غالبًا ما تفوت

المدونات

توصيات الكتب