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

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

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

ابدأ الدورة

مراقبة تطبيقات JavaScript: مقاييس وتنبيهات (مستوى متقدم)



تطبيقات JavaScript الحديثة على Node.js أصبحت أكثر تعقيدًا: فهي خدمات مصغرة، بنى موجهة بالأحداث، أنظمة زمن حقيقي. المراقبة البسيطة "حي/ميت" لم تعد تعطي الصورة الكاملة. لضمان الاستقرار والأداء العالي، نحتاج إلى نهج متقدم: جمع مقاييس الأعمال، تحليل زمن الاستجابة، إعداد تنبيهات ذكية والمراقبة الشاملة. في هذه المقالة، سنشرح كيفية بناء نظام مراقبة على مستوى متقدم باستخدام Node.js و Prometheus و Grafana.



1. المقاييس الرئيسية لتطبيقات Node.js



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



  • مقاييس RED (المعدل، الأخطاء، المدة) — تكرار الطلبات، عدد الأخطاء، وقت الاستجابة.
  • مقاييس USE (الاستخدام، التشبع، الأخطاء) — تحميل CPU، استخدام الذاكرة، عدد واصفات الملفات المفتوحة.
  • مقاييس الأعمال — عدد المستخدمين النشطين، حجم قائمة المهام، سرعة معالجة الأحداث.


مثال لجمع المقاييس باستخدام مكتبة prom-client:



const client = require('prom-client');const httpRequestDuration = new client.Histogram({    name: 'http_request_duration_seconds',    help: 'مدة طلبات HTTP بالثواني',    labelNames: ['method', 'route', 'status_code'],    buckets: [0.1, 0.3, 0.5, 1, 3, 5]});

app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'غير معروف', status_code: res.statusCode }); }); next();});


يجب أيضًا مراقبة جمع القمامة (GC) وتأخر حلقة الأحداث (event loop lag) — فهذا يساعد في اكتشاف مشاكل الأداء قبل أن تصبح حرجة.



2. إعداد التنبيهات: من البسيط إلى الذكي



التنبيهات ليست مجرد إشعارات بسقوط الخادم. على المستوى المتقدم، يجب أن تكون التنبيهات:



  • سياقية — تأخذ في الاعتبار الوقت من اليوم، يوم الأسبوع، دورات الأعمال.
  • متعددة المستويات — تحذير، حرج، استدعاء.
  • تنبؤية — بناءً على الاتجاهات (مثل زيادة زمن الاستجابة بنسبة 20% خلال 15 دقيقة).


مثال لقاعدة لـ Prometheus Alertmanager باستخدام التنبؤ:



groups:  - name: nodejs_alerts    rules:      - alert: HighErrorRate        expr: rate(http_requests_errors_total[5m]) / rate(http_requests_total[5m]) > 0.05        for: 2m        labels:          severity: critical        annotations:          summary: "نسبة أخطاء عالية ({{ $value | humanizePercentage }})"          description: "أكثر من 5% من الطلبات ترجع أخطاء خلال الدقيقتين الأخيرتين."

- alert: MemoryLeak expr: predict_linear(nodejs_heap_bytes_used{space="total"}[30m], 3600) > 1e9 for: 5m labels: severity: warning annotations: summary: "تسرب ذاكرة متوقع" description: "قد يتجاوز استخدام heap 1GB خلال ساعة."


من المهم إعداد إزالة التكرار وتجميع التنبيهات، حتى لا تغرق المهندس المناوب بمئات الرسائل المتشابهة. استخدم group_wait و group_interval في تكوين Alertmanager.



3. التسجيل المتقدم: سجلات منظمة وتتبع



الطريقة القياسية console.log غير مناسبة للإنتاج. استخدم التسجيل المنظم مع مكتبات pino أو winston بتنسيق JSON. هذا يسمح بتحليل السجلات بسهولة ودمجها مع أنظمة التجميع (ELK, Loki).



مثال لإعداد pino:



const pino = require('pino');const logger = pino({    level: process.env.LOG_LEVEL ||                

المدونات

توصيات الكتب