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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

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

\n\n

تثبيت prom-client

\n\n

يتم تثبيت المكتبة باستخدام مدير الحزم القياسي npm:

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

بعد التثبيت، يمكنك استيراد المكتبة إلى مشروعك:

\n\n
const client = require('prom-client');
\n\n

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

\n\n

يدعم Prometheus أربعة أنواع رئيسية من المقاييس، كل منها يحل مشكلة محددة:

\n\n
    \n
  • Counter — عداد يمكنه فقط الزيادة (مثل عدد الطلبات، الأخطاء).
  • \n
  • Gauge — قيمة يمكن أن تزيد وتنقص (مثل عدد المستخدمين النشطين، حجم الذاكرة).
  • \n
  • Histogram — رسم بياني لقياس توزيع القيم (مثل وقت استجابة الطلبات).
  • \n
  • Summary — مشابه للرسم البياني، لكنه يحسب الكميات (quantiles) من جانب التطبيق.
  • \n
\n\n

أمثلة على استخدام prom-client

\n\n

لننظر إلى إنشاء كل نوع من المقاييس باستخدام تطبيق Express بسيط كمثال.

\n\n

1. Counter (عداد)

\n\n

العداد مثالي لحساب عدد الأحداث، مثل طلبات HTTP أو الأخطاء.

\n\n
const httpRequestsCounter = new client.Counter({\n  name: 'http_requests_total',\n  help: 'Total number of HTTP requests',\n  labelNames: ['method', 'status']\n});\n\n// الاستخدام:\nhttpRequestsCounter.inc({ method: 'GET', status: 200 });\nhttpRequestsCounter.inc({ method: 'POST', status: 500 });
\n\n

2. Gauge (مقياس)

\n\n

يسمح Gauge بتتبع القيمة الحالية التي يمكن أن تتغير في كلا الاتجاهين.

\n\n
const activeUsersGauge = new client.Gauge({\n  name: 'active_users',\n  help: 'Number of active users'\n});\n\n// الزيادة بمقدار 1:\nactiveUsersGauge.inc();\n// النقصان بمقدار 1:\nactiveUsersGauge.dec();\n// تعيين قيمة محددة:\nactiveUsersGauge.set(42);
\n\n

3. Histogram (رسم بياني)

\n\n

يساعد الرسم البياني في تحليل توزيع وقت تنفيذ العمليات.

\n\n
const requestDurationHistogram = new client.Histogram({\n  name: 'http_request_duration_seconds',\n  help: 'Duration of HTTP requests in seconds',\n  labelNames: ['method', 'route'],\n  buckets: [0.1, 0.5, 1, 2, 5] // حدود الحاويات (بالثواني)\n});\n\n// قياس الوقت:\nconst end = requestDurationHistogram.startTimer();\n// ... تنفيذ الطلب ...\nend({ method: 'GET', route: '/api/users' });
\n\n

4. Summary (ملخص)

\n\n

يشبه Summary الرسم البياني، لكنه يوفر كميات دقيقة (مثل الوسيط، المئين 95).

\n\n
const requestDurationSummary = new client.Summary({\n  name: 'http_request_duration_summary_seconds',\n  help: 'Summary of HTTP request duration in seconds',\n  labelNames: ['method', 'route'],\n  percentiles: [0.5, 0.9, 0.99] // الكميات للحساب\n});\n\n// الاستخدام مشابه للرسم البياني:\nconst endSummary = requestDurationSummary.startTimer();\n// ... تنفيذ الطلب ...\nendSummary({ method: 'GET', route: '/api/data' });
\n\n

إعداد نقطة النهاية لـ Prometheus

\n\n

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

توصيات