مقاييس Prometheus في TypeScript: دليل كامل لـ client.js

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

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

ابدأ الدورة

مقاييس Prometheus في TypeScript: دليل عملي



Prometheus هو نظام مراقبة وتنبيه مفتوح المصدر قوي. لدمجه مع تطبيقات TypeScript، تُستخدم مكتبة prom-client (عميل Prometheus). تتيح هذه المكتبة جمع وتجميع وتصدير المقاييس بتنسيق يمكن لخادم Prometheus فهمه. في هذه المقالة، سنشرح بالتفصيل كيفية العمل مع مقاييس Prometheus في TypeScript، بما في ذلك أنواع المقاييس وأمثلة الكود وأفضل الممارسات.



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



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

npm install prom-client


بالنسبة لـ TypeScript، ستحتاج أيضًا إلى تثبيت الأنواع:

npm install @types/prom-client --save-dev


بعد التثبيت، قم بإنشاء ملف metrics.ts لتهيئة العميل:



import client from 'prom-client';

// تفعيل جمع المقاييس الافتراضية (GC، الذاكرة، المعالج)const collectDefaultMetrics = client.collectDefaultMetrics;collectDefaultMetrics({ timeout: 5000 });

// إنشاء سجل لتخزين المقاييسconst register = client.register;

export { client, register };


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



يدعم Prometheus أربعة أنواع رئيسية من المقاييس. دعنا نستعرض كل نوع مع أمثلة على TypeScript.



1. Counter (عداد)

يُستخدم لحساب الأحداث التي تزداد فقط (الطلبات، الأخطاء).



import { Counter } from 'prom-client';

const httpRequestsTotal = new Counter({ name: 'http_requests_total', help: 'إجمالي عدد طلبات HTTP', labelNames: ['method', 'path', 'status_code'],});

// زيادة العداد عند الطلبhttpRequestsTotal.inc({ method: 'GET', path: '/api', status_code: 200 });httpRequestsTotal.inc({ method: 'POST', path: '/users', status_code: 201 }, 2); // +2


2. Gauge (مقياس)

يمكن أن يزيد وينقص. يُستخدم للقيم الحالية (الذاكرة، قائمة الانتظار).



import { Gauge } from 'prom-client';

const memoryUsageGauge = new Gauge({ name: 'memory_usage_bytes', help: 'استخدام الذاكرة الحالي بالبايت',});

// تعيين القيمةmemoryUsageGauge.set(process.memoryUsage().heapUsed);

// التغيير بمقدار دلتاmemoryUsageGauge.inc(1024); // +1 كيلوبايتmemoryUsageGauge.dec(512); // -512 بايت


3. Histogram (مدرج تكراري)

يقيس توزيع القيم (مثل وقت الاستجابة).



import { Histogram } from 'prom-client';

const httpRequestDuration = new Histogram({ name: 'http_request_duration_seconds', help: 'مدة طلبات HTTP بالثواني', labelNames: ['method', 'route'], buckets: [0.1, 0.3, 0.5, 1, 2, 5], // حدود الشرائح});

// مراقبة القيمةconst start = Date.now();// ... معالجة الطلب ...httpRequestDuration.observe( { method: 'GET', route: '/api' }, (Date.now() - start) / 1000);


4. Summary (ملخص)

يشبه المدرج التكراري، لكنه يحسب القيم المئوية على جانب العميل.



import { Summary } from 'prom-client';

const responseTimeSummary = new Summary({ name: 'response_time_summary_seconds', help: 'ملخص وقت الاستجابة بالثواني', percentiles: [0.5, 0.9, 0.99], // القيم المئوية});

responseTimeSummary.observe(0.42);responseTimeSummary.observe(0.35);


تصدير المقاييس إلى Prometheus



قم بإنشاء نقطة نهاية /metrics لعرض المقاييس بتنسيق نصي:



import express from 'express';import { register } from './metrics';

const app = express();

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

app.listen(3000, () => console.log('الخادم يعمل على المنفذ 3000'));


الآن، عند إرسال طلب GET إلى

توصيات