مراقبة تطبيقات PHP: المقاييس والتنبيهات من الألف إلى الياء
\n\nفي تطوير الويب الحديث، الاستقرار والأداء للتطبيق ليس مجرد رغبة، بل هو مطلب حاسم. PHP، على الرغم من نضجها، تتطلب اهتمامًا دقيقًا بالمراقبة. بدونها، تخاطر بمعرفة انهيار الموقع من المستخدمين، وليس من نظام الإنذار. في هذه المقالة، سنشرح كيفية بناء نظام مراقبة كامل لتطبيق PHP: من جمع المقاييس الرئيسية إلى إعداد التنبيهات التي ستنقذ مشروعك من فترات التوقف.
\n\nلماذا مراقبة PHP؟ المقاييس الرئيسية
\n\nتتيح المراقبة الإجابة على ثلاثة أسئلة رئيسية: "هل التطبيق يعمل؟"، "ما مدى سرعة عمله؟" و"هل يحدث شيء غير طبيعي؟". بالنسبة لتطبيقات PHP، تعتبر مجموعات المقاييس التالية بالغة الأهمية:
\n\n- \n
- مقاييس التوفر (Uptime): التحقق من أن خادم الويب وPHP-FPM يستجيبان للطلبات. أبسط طريقة هي نقطة نهاية فحص الصحة. \n
- مقاييس الأداء: وقت تنفيذ الطلب (Response Time)، سعة النقل (Requests per Second)، وقت عمل قاعدة البيانات وواجهات برمجة التطبيقات الخارجية. \n
- مقاييس الموارد: استهلاك الذاكرة (Memory Usage)، تحميل وحدة المعالجة المركزية (CPU)، عدد عمليات PHP-FPM النشطة. \n
- مقاييس الأخطاء: عدد أخطاء HTTP (5xx, 4xx)، الاستثناءات (Exceptions)، الأخطاء الفادحة والتحذيرات. \n
- مقاييس الأعمال: سرعة إتمام الطلب، عدد التسجيلات - كل ما هو مهم لعملك. \n
يمكن جمع هذه المقاييس بطرق مختلفة: من التسجيل البسيط في ملف إلى استخدام أنظمة المراقبة المتقدمة مثل Prometheus + Grafana أو الحلول التجارية (Datadog, New Relic).
\n\nجمع المقاييس: من البسيط إلى المعقد
\n\nلنبدأ بنهج أساسي - إنشاء فحص صحة بسيط وجمع المقاييس بتنسيق Prometheus.
\n\n1. نقطة نهاية فحص الصحة (Health Check endpoint)
\nأنشئ نقطة نهاية بسيطة تتحقق من الاتصال بقاعدة البيانات والذاكرة المؤقتة:
\n\n<?php\n// health.php\n$checks = [\n 'database' => false,\n 'redis' => false,\n 'status' => 'unhealthy'\n];\n\ntry {\n new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n $checks['database'] = true;\n} catch (PDOException $e) {\n // سجل الخطأ\n}\n\nif ($checks['database'] && $checks['redis']) {\n $checks['status'] = 'healthy';\n http_response_code(200);\n} else {\n http_response_code(503);\n}\n\nheader('Content-Type: application/json');\necho json_encode($checks);\n\n\n2. جمع المقاييس لـ Prometheus
\nPrometheus هو نظام شائع لجمع المقاييس. يجب أن يقدم تطبيقك البيانات بتنسيق /metrics. مثال على مُصدر بسيط:
<?php\n// metrics.php\nheader('Content-Type: text/plain; version=0.0.4');\n\n$metrics = [];\n\n// عداد الطلبات\n$metrics[] = '# HELP http_requests_total Total number of HTTP requests.';\n$metrics[] = '# TYPE http_requests_total counter';\n$metrics[] = 'http_requests_total{method="GET",route="/home"} 1024';\n\n// رسم بياني لوقت الاستجابة\n$metrics[] = '# HELP http_request_duration_seconds Request duration in seconds.';\n$metrics[] = '# TYPE http_request_duration_seconds histogram';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.1"} 500';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.5"} 800';\n$metrics[] = 'http_request_duration_seconds_bucket{le="+Inf"} 1024';\n\n// مقاييس PHP (الذاكرة، الوقت)\n$metrics[] = '# HELP php_memory_bytes Current memory usage.';\n$metrics[] = '# TYPE php_memory_bytes gauge';\n$metrics[] = 'php_memory_bytes ' . memory_get_usage(true);\n\necho implode("\\n", $metrics) . "\\n";\n\n\nإعداد التنبيهات: متى وكيف يتم الإخطار
\n\nالمقاييس بدون تنبيهات هي مجرد أرقام. يجب ضبط التنبيهات بناءً على قيم العتبات (thresholds). القواعد الأساسية:
\n\n<