مراقبة تطبيقات TypeScript: دليل شامل للأدوات والمكتبات
المراقبة هي جزء لا يتجزأ من تطوير تطبيقات الويب الحديثة باستخدام TypeScript. بدونها، تعمل بشكل أعمى: تبقى الأخطاء غير مكتشفة، وينخفض الأداء، ويغادر المستخدمون. في هذه المقالة، سنستعرض المكتبات والأدوات الرئيسية لمراقبة تطبيقات TypeScript، بما في ذلك Sentry وOpenTelemetry وPrometheus والتسجيل المدمج. ستتعلم كيفية إعداد جمع الأخطاء والمقاييس والتتبع في الوقت الفعلي.
1. Sentry: تتبع الأخطاء في الوقت الفعلي
Sentry هي المنصة الأكثر شيوعًا لمراقبة الأخطاء. وهي تدعم TypeScript بشكل افتراضي وتتيح لك اكتشاف الاستثناءات، وتسجيل سياق التنفيذ، وتلقي الإشعارات عند حدوث أعطال.
التثبيت والإعداد الأساسي
npm install @sentry/node @sentry/tracingمثال على تهيئة Sentry في تطبيق TypeScript على Node.js:
import * as Sentry from "@sentry/node";import { ProfilingIntegration } from "@sentry/profiling-node";
Sentry.init({ dsn: "https://examplePublicKey@o0.ingest.sentry.io/0", integrations: [ new ProfilingIntegration(), ], tracesSampleRate: 1.0, profilesSampleRate: 1.0,});
// إرسال خطأ قسريapp.get("/debug-sentry", function mainHandler(req, res) { throw new Error("خطأ اختباري من Sentry!");});تسجيل السياق
يتيح لك Sentry إضافة علامات وسياقات مخصصة:
Sentry.setUser({ email: "user@example.com" });Sentry.setTag("environment", "production");Sentry.captureException(new Error("خطأ أثناء معالجة الطلب"));2. OpenTelemetry: معيار للتتبع والمقاييس
OpenTelemetry هو معيار مفتوح لجمع بيانات القياس عن بُعد: التتبعات والمقاييس والسجلات. وهو يدعم TypeScript ويتكامل بسهولة مع أي أنظمة خلفية (Jaeger, Zipkin, Prometheus).
تثبيت الحزم
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/instrumentation-expressمثال على إعداد التتبع
import { NodeSDK } from "@opentelemetry/sdk-node";import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";import { ConsoleSpanExporter } from "@opentelemetry/sdk-trace-node";
const sdk = new NodeSDK({ traceExporter: new ConsoleSpanExporter(), instrumentations: [getNodeAutoInstrumentations()],});
sdk.start();الآن، سيتم تغليف كل طلب HTTP تلقائيًا في span مع بيانات وصفية. يمكنك إضافة spans مخصصة:
import { trace } from "@opentelemetry/api";
const tracer = trace.getTracer("my-service");
app.get("/api/data", async (req, res) => { const span = tracer.startSpan("processData"); try { const data = await fetchData(); span.setAttribute("data.size", data.length); res.json(data); } finally { span.end(); }});3. Prometheus + express-prom-bundle: مقاييس لـ Node.js
لجمع مقاييس الأداء (RPS، وقت الاستجابة، عدد الأخطاء)، استخدم Prometheus مع مكتبة express-prom-bundle. وهي تجمع تلقائيًا المقاييس من تطبيقات Express.
التثبيت
npm install prom-client express-prom-bundleمثال على الإعداد
import express from "express";import promBundle from "express-prom-bundle";
const app = express();
const metricsMiddleware = promBundle({ includeMethod: true, includePath: true, includeStatusCode: true, customLabels: { project: "my-app" }, metricsPath: "/metrics",});
app.use(metricsMi