مراقبة تطبيقات JavaScript: المقاييس والتنبيهات من الألف إلى الياء

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

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

ابدأ الدورة

مراقبة تطبيقات JavaScript: المقاييس والتنبيهات من الألف إلى الياء

\n\n

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

\n\n

لماذا تعتبر مراقبة Node.js مهمة؟

\n

تطبيقات Node.js غالبًا ما تعمل في وضع غير متزامن، معالجة آلاف الطلبات في الثانية. بدون مراقبة، أنت تخاطر بـ:

\n
    \n
  • تفويت تسرب الذاكرة (memory leak) الذي قد يؤدي إلى انهيار الخادم.
  • \n
  • عدم ملاحظة زيادة وقت الاستجابة (latency)، مما يضعف تجربة المستخدم.
  • \n
  • فقدان البيانات بسبب أخطاء غير معالجة.
  • \n
\n

نظام المراقبة يمنحك الرؤية (visibility) ويسمح لك باتخاذ القرارات بناءً على البيانات، وليس التخمينات.

\n\n

المقاييس الرئيسية لتطبيقات JavaScript

\n

يمكن تقسيم جميع المقاييس إلى ثلاث مجموعات: مقاييس البنية التحتية، مقاييس الأعمال، ومقاييس التطبيق. دعنا نستعرضها بالتفصيل.

\n\n

1. مقاييس البنية التحتية (طريقة USE)

\n

هذه هي المؤشرات الأساسية لصحة الخادم: وحدة المعالجة المركزية (CPU)، الذاكرة، القرص، الشبكة. بالنسبة لـ Node.js، تعتبر الذاكرة (heap، non-heap) وعدد واصفات الملفات المفتوحة مهمة بشكل خاص.

\n\n

2. مقاييس التطبيق (طريقة RED)

\n

طريقة RED (المعدل، الأخطاء، المدة) هي المعيار الذهبي للخدمات المصغرة:

\n
    \n
  • المعدل (Rate): عدد الطلبات في الثانية (RPS).
  • \n
  • الأخطاء (Errors): النسبة المئوية للطلبات التي انتهت بخطأ (4xx، 5xx).
  • \n
  • المدة (Duration): وقت تنفيذ الطلب (النسب المئوية p50، p95، p99).
  • \n
\n\n

3. مقاييس الأعمال

\n

خاصة بمنتجك: عدد المستخدمين المسجلين، الطلبات المكتملة، الجلسات النشطة، إلخ.

\n\n

جمع المقاييس باستخدام Prometheus و Node.js

\n

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

\n\n

التثبيت والإعداد الأساسي

\n
npm install prom-client express
\n\n

لننشئ خادمًا مع نقطة نهاية /metrics:

\n
const express = require('express');\nconst client = require('prom-client');\n\nconst app = express();\nconst port = 3000;\n\n// إنشاء سجل المقاييس\nconst register = new client.Registry();\n\n// إضافة مقاييس Node.js الافتراضية\nclient.collectDefaultMetrics({ register });\n\n// إنشاء رسم بياني مخصص لوقت الاستجابة\nconst httpRequestDuration = new client.Histogram({\n    name: 'http_request_duration_seconds',\n    help: 'مدة طلبات HTTP بالثواني',\n    labelNames: ['method', 'route', 'status'],\n    buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5]\n});\nregister.registerMetric(httpRequestDuration);\n\n// Middleware لقياس الوقت\napp.use((req, res, next) => {\n    const end = httpRequestDuration.startTimer();\n    res.on('finish', () => {\n        end({ method: req.method, route: req.route?.path || 'غير معروف', status: res.statusCode });\n    });\n    next();\n});\n\n// نقطة نهاية للمقاييس\napp.get('/metrics', async (req, res) => {\n    res.set('Content-Type', register.contentType);\n    res.end(await register.metrics());\n});\n\napp.get('/', (req, res) => {\n    res.send('مرحبًا، مراقبة!');\n});\n\napp.listen(port, () => {\n    console.log(`التطبيق يستمع على http://localhost:${port}`);\n});
\n\n

عدادات مخصصة

\n

لنضف عداد الأخطاء:

\n
const errorCounter = new client.Counter({\n    name: 'app_errors_total',                

المدونات

توصيات الكتب