مقاييس Prometheus في Node.js: مكتبة prom-client للمراقبة

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

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

ابدأ الدورة

مكتبة prom-client: مراقبة تطبيقات Node.js باستخدام Prometheus



في تطوير الويب الحديث، أصبحت مراقبة أداء التطبيقات وحالتها ضرورة. أحد أشهر الحلول لجمع وتحليل المقاييس هو Prometheus - نظام مفتوح المصدر يجمع البيانات على شكل سلاسل زمنية. للتكامل مع Node.js، توجد مكتبة رسمية prom-client تتيح تصدير المقاييس بسهولة بتنسيق مفهوم لـ Prometheus.



في هذه المقالة، سنشرح بالتفصيل كيفية تثبيت واستخدام prom-client، وما هي أنواع المقاييس المتاحة، وكيفية دمجها مع إطار العمل Express.



التثبيت والاستيراد



للبدء، قم بتثبيت المكتبة عبر npm:



npm install prom-client


بعد التثبيت، قم باستيرادها في تطبيقك:



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


الأنواع الرئيسية للمقاييس



تدعم مكتبة prom-client أربعة أنواع رئيسية من مقاييس Prometheus:



  • Counter - عداد يزداد فقط (مثل عدد الطلبات).
  • Gauge - قيمة يمكن أن تزيد أو تنقص (مثل عدد الاتصالات النشطة).
  • Histogram - رسم بياني يقيس توزيع القيم (مثل وقت الاستجابة).
  • Summary - إحصاءات موجزة مشابهة لـ Histogram ولكن بكميات أكثر دقة.


مثال: Counter (عداد الطلبات)



لنقم بإنشاء عداد لتتبع العدد الإجمالي لطلبات HTTP:



const httpRequestsTotal = new prometheus.Counter({  name: 'http_requests_total',  help: 'Total number of HTTP requests',  labelNames: ['method', 'route', 'status']});

// Middleware لحساب الطلباتapp.use((req, res, next) => { res.on('finish', () => { httpRequestsTotal.inc({ method: req.method, route: req.path, status: res.statusCode }); }); next();});


مثال: Gauge (الاتصالات النشطة)



Gauge مفيد لتتبع الحالة الحالية، مثل عدد المستخدمين النشطين:



const activeUsers = new prometheus.Gauge({  name: 'active_users',  help: 'Number of active users'});

app.get('/login', (req, res) => { activeUsers.inc(); // الزيادة عند الدخول res.send('Logged in');});

app.get('/logout', (req, res) => { activeUsers.dec(); // النقصان عند الخروج res.send('Logged out');});


مثال: Histogram (وقت الاستجابة)



يسمح Histogram بقياس الوقت المستغرق في معالجة الطلبات:



const httpRequestDuration = new prometheus.Histogram({  name: 'http_request_duration_seconds',  help: 'Duration of HTTP requests in seconds',  labelNames: ['method', 'route'],  buckets: [0.1, 0.5, 1, 2, 5] // حدود الحاويات بالثواني});

app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.path }); }); next();});


تصدير المقاييس لـ Prometheus



لكي يتمكن Prometheus من جمع البيانات، يجب إنشاء نقطة نهاية (عادةً /metrics) تُرجع جميع المقاييس المسجلة:



app.get('/metrics', async (req, res) => {  res.set('Content-Type', prometheus.register.contentType);  res.end(await prometheus.register.metrics());});

app.listen(3000, () => { console.log('Server running on port 3000');});


مقاييس مخصصة مع تسميات



يمكنك إضافة تسميات (labels) لتصفية أكثر تفصيلاً. على سبيل المثال، تقسيم المقاييس حسب إصدارات API:



const apiCalls = new prometheus.Counter({                    

توصيات