مراقبة تطبيقات JavaScript (Node.js): الأدوات والمكتبات
مراقبة تطبيقات Node.js هي مهمة بالغة الأهمية للحفاظ على استقرار الخدمات وأدائها وتوافرها. بدون جمع مستمر للمقاييس، وتتبع الأخطاء، وتنميط الكود، فإنك تخاطر بمواجهة أعطال غير متوقعة، وبطء في الأداء، وتسريبات في الذاكرة. في هذه المقالة، سنستعرض أفضل الأدوات والمكتبات لمراقبة Node.js، بما في ذلك الحلول مفتوحة المصدر الشائعة.
لماذا نحتاج إلى مراقبة Node.js؟
Node.js هي بيئة غير متزامنة تتعامل بشكل ممتاز مع عمليات الإدخال/الإخراج (I/O)، ولكن لها خصائص تتطلب الانتباه:
- النموذج أحادي الخيط: يمكن للكود المعطل أن يوقف العملية بأكملها.
- تسريبات الذاكرة: بسبب الإغلاقات (closures) والإدارة غير الصحيحة للمراجع.
- حلقة الأحداث (Event Loop): تأخيراتها تؤثر بشكل مباشر على سرعة الاستجابة.
- أخطاء الكود غير المتزامن: قد تبقى الوعود (promises) غير المعالجة دون اكتشاف.
الفئات الرئيسية للأدوات
للمراقبة الشاملة لتطبيق Node.js، ستحتاج إلى أدوات من ثلاث فئات:
- جمع المقاييس (Metrics): وحدة المعالجة المركزية (CPU)، الذاكرة، الطلبات في الثانية، وقت الاستجابة.
- التنميط (Profiling): تحليل نقاط الاختناق وحلقة الأحداث.
- تتبع الأخطاء (Error Tracking): جمع وتجميع الاستثناءات تلقائياً.
1. Prometheus + prom-client (جمع المقاييس)
Prometheus هو المعيار الفعلي لجمع المقاييس في البنية التحتية الحديثة. بالنسبة لـ Node.js، تُستخدم مكتبة prom-client. تتيح لك إنشاء رسوم بيانية (histograms)، عدادات (counters)، ومقاييس قياس (gauges).
التثبيت:
npm install prom-client expressمثال لتصدير المقاييس (server.js):
const express = require('express');const client = require('prom-client');const app = express();
// إنشاء رسم بياني لوقت الاستجابةconst httpRequestDurationMicroseconds = new client.Histogram({ name: 'http_request_duration_ms', help: 'Duration of HTTP requests in ms', labelNames: ['method', 'route', 'status'], buckets: [50, 100, 200, 500, 1000, 2000]});
// Middleware لقياس الوقتapp.use((req, res, next) => { const end = httpRequestDurationMicroseconds.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status: res.statusCode }); }); next();});
// نقطة نهاية لـ Prometheusapp.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.get('/', (req, res) => res.send('Hello World!'));app.listen(3000, () => console.log('Server running on port 3000'));يمكنك الآن تكوين Prometheus لجمع المقاييس من /metrics وتصورها في Grafana.
2. PM2 (مدير العمليات والمراقبة الأساسية)
PM2 ليس مجرد مدير عمليات لـ Node.js، بل هو أيضاً نظام مراقبة مدمج. يتيح لك تتبع حالة العمليات، وإعادة تشغيلها عند التعطل، وجمع المقاييس الأساسية.
التثبيت:
npm install pm2 -gتشغيل التطبيق مع المراقبة:
pm2 start server.js --name "my-app"pm2 monit # فتح لوحة المراقبةتصدير المقاييس إلى Prometheus (عبر pm2-metrics):
npm install pm2-metricspm2 start server.js --name "my-app"pm2-metrics --port 9200 # يفتح نقطة نهاية /metrics3. Clinic.js (التنميط والتشخيص)
Clinic.js هي مجموعة أدوات