مراقبة تطبيقات TypeScript: المقاييس والتنبيهات
في تطوير الويب الحديث، مراقبة تطبيقات TypeScript ليست رفاهية، بل ضرورة. بدونها، أنت تخاطر بمعرفة العطل فقط من المستخدمين. في هذه المقالة، سنشرح كيفية إعداد مراقبة فعالة لمشاريع TypeScript، وما هي المقاييس التي يجب تتبعها وكيفية إعداد التنبيهات لتلقي إشعارات حول المشكلات قبل أن تصبح حرجة.
لماذا مراقبة تطبيقات TypeScript مهمة جدًا؟
TypeScript، كونه طبقة فوق JavaScript، يُستخدم غالبًا لإنشاء أنظمة مؤسسية معقدة وحلول خادم على Node.js. ومع ذلك، فإن الطبيعة الديناميكية لـ JavaScript تحت الغطاء يمكن أن تؤدي إلى أخطاء غير متوقعة في وقت التشغيل. تتيح المراقبة:
- اكتشاف المشكلات في مرحلة مبكرة — قبل أن تؤثر على المستخدمين.
- تحليل الأداء — تحديد نقاط الضعف في الكود.
- التنبؤ بالأعطال — بناءً على اتجاهات المقاييس.
- تحسين جودة الكود — فهم أي الوحدات هي الأكثر "إشكالية".
المقاييس الرئيسية لتطبيقات TypeScript
لكي تكون المراقبة فعالة، تحتاج إلى جمع المقاييس الصحيحة. سنقسمها إلى ثلاث مجموعات رئيسية.
1. المقاييس التقنية (طريقة RED)
طريقة RED (Rate, Errors, Duration) مناسبة تمامًا للخدمات المصغرة وواجهات API:
- Rate (معدل الطلبات) — عدد الطلبات في الثانية (RPS).
- Errors (الأخطاء) — نسبة الأخطاء (4xx, 5xx).
- Duration (مدة الاستجابة) — وقت معالجة الطلب (p50, p95, p99).
مثال على جمع المقاييس باستخدام مكتبة prom-client:
import client from 'prom-client';import express from 'express';
const app = express();
// إنشاء المقاييسconst httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5]});
const httpRequestsTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status_code']});
// Middleware لجمع المقاييسapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { const labels = { method: req.method, route: req.path, status_code: res.statusCode }; httpRequestsTotal.inc(labels); end(labels); }); next();});
// نقطة نهاية لـ Prometheusapp.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.listen(3000, () => console.log('Server running on port 3000'));2. مقاييس الأعمال
تعكس هذه المقاييس صحة الأعمال:
- عدد المعاملات الناجحة.
- متوسط حجم سلة التسوق (للتجارة الإلكترونية).
- وقت استجابة قاعدة البيانات.
- عدد المستخدمين النشطين.
مثال على مقياس مخصص لتتبع الطلبات:
const ordersCreated = new client.Counter({ name: 'orders_created_total', help: 'Total number of orders created', labelNames: ['status']});
// في مكان ما في الكودexport function createOrder(data: OrderData): Order { // منطق إنشاء الطلب ordersCreated.inc({ status: 'success' }); return order;}3. مقاييس البنية التحتية
لتطبيقات Node.js/TypeScript، تعتبر ما يلي حرجًا:
- استخدام الذاكرة (heap, RSS).
- تحميل CPU.
- عدد واصفات الملفات المفتوحة.
- عدد الاتصالات النشطة.
- جمع القمامة (GC).
مثال على جمع مقاييس الذاكرة:
المدونات
توصيات الكتب
اقرأ أيضًا