مراقبة Node.js: أدوات ومكتبات لتتبع الأداء

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

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

ابدأ الدورة

مراقبة تطبيقات JavaScript (Node.js): نظرة شاملة على الأدوات والممارسات



التطوير باستخدام Node.js قوي، ولكن بدون مراقبة صحيحة قد يتحول تطبيقك إلى "صندوق أسود". في هذه المقالة، سنستعرض الأدوات والمكتبات الرئيسية التي ستساعدك على تتبع حالة تطبيقات JavaScript من جانب الخادم، وتحديد نقاط الضعف، ومنع الأعطال.



لماذا نحتاج إلى مراقبة Node.js؟

يعمل Node.js في حلقة الأحداث (Event Loop) أحادية الخيط، لذلك أي عملية حظر (مثل حلقة ثقيلة أو قراءة ملف متزامنة) يمكن أن تشل التطبيق بأكمله. بدون مراقبة، أنت معرض لخطر:

  • تسرب الذاكرة — لا يستطيع جامع القمامة (GC) التعامل، ويتعطل التطبيق.
  • عدم ملاحظة زيادة وقت الاستجابة — يغادر المستخدمون.
  • فقدان السيطرة على الأخطاء — الرفض غير المعالج (unhandled rejections) يقتل العملية.


1. الأدوات المدمجة في Node.js

لنبدأ بما هو موجود بالفعل في النواة. توفر Node.js الوحدات process و perf_hooks لجمع المقاييس الأساسية.

// مثال: جمع مقاييس الذاكرة ووقت الاستجابةconst { performance, PerformanceObserver } = require('perf_hooks');

// مراقبة حلقة الأحداثconst obs = new PerformanceObserver((items) => { const entry = items.getEntries()[0]; console.log(`تأخير حلقة الأحداث: ${entry.duration}ms`);});obs.observe({ entryTypes: ['function'] });

// قياس وقت تنفيذ الدالةperformance.mark('start');// ... الكود الخاص بك ...performance.mark('end');performance.measure('myFunction', 'start', 'end');

// مراقبة الذاكرةsetInterval(() => { const memory = process.memoryUsage(); console.log(`RSS: ${memory.rss}, Heap: ${memory.heapUsed}`);}, 5000);


2. PM2 — مدير العمليات مع المراقبة

PM2 هو المعيار الفعلي (de-facto) للإنتاج في Node.js. لا يدير العمليات فحسب، بل يوفر أيضًا مراقبة مدمجة عبر الأمر pm2 monit.

  • إعادة التشغيل التلقائي عند تعطل العملية.
  • جمع المقاييس: وحدة المعالجة المركزية (CPU)، الذاكرة، عدد الطلبات.
  • تسجيل السجلات stdout/stderr.
  • وضع الكتلة (Cluster mode) لتحقيق أقصى استفادة من النوى.
// التثبيت والتشغيلnpm install pm2 -gpm2 start app.js --name "my-app" --instances max

// المراقبة المدمجةpm2 monit

// تصدير المقاييس إلى JSONpm2 jlist > metrics.json

للمراقبة المتقدمة، استخدم pm2-metrics — وهي إضافة ترسل البيانات إلى Prometheus.



3. Clinic.js — تشخيص الأداء

Clinic.js هي مجموعة أدوات من NearForm لتحليل أداء Node.js. تتضمن ثلاث أدوات:

  • Clinic Doctor — تشخيص عام (حلقة الأحداث، جامع القمامة، الإدخال/الإخراج).
  • Clinic Bubbleprof — تحليل العمليات غير المتزامنة.
  • Clinic Flame — رسوم بيانية اللهب (flame graphs) للبحث عن الدوال الساخنة.
// التثبيتnpm install -g clinic

// التشغيل مع اختبار التحميلclinic doctor -- node app.js

// ثم في محطة طرفية أخرى:autocannon localhost:3000

// بعد الإيقاف، سيتم فتح تقرير HTML مع تصور بياني

Clinic.js مفيد بشكل خاص لتحديد مشاكل حلقة الأحداث (تأخير عالٍ، توقفات متكررة لجامع القمامة).



4. Prometheus + Node.js — مقاييس مخصصة

Prometheus هو المعيار لجمع المقاييس في بنية الخدمات المصغرة. بالنسبة لـ Node.js، استخدم المكتبة prom-client.

const prometheus = require('prom-client');

// إنشاء عداد الطلباتconst httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'إجمالي عدد طلبات HTTP', labelNames: ['method', 'route', 'status']});

// مدرج تكراري لوقت الاستجابةconst httpRequestDuration = new prometheus.Histogram({ name: 'http

توصيات