Skip to main content

مقدمة

بعد التثبيت، فعّل تتبّع الطلبات لترى كل استدعاء لدالتك ضمن الطلبات في لوحة التحكم، مع مساره ومدته واستدعاءات قاعدة البيانات والطلبات الخارجية. ويمكنك أيضاً فتح الطلب الذي تسبّب في أي خطأ. راجع تتبّع الطلبات لما تعرضه لوحة التحكم.

التفعيل

التتبّع معطَّل افتراضياً. وعندما يكون معطَّلاً لا تُعدَّل fetch ولا يُصَفّ أي شيء.

ما الذي يُسجَّل

  • نطاق خادم واحد لكل طلب مغلَّف، باسم METHOD /route. المسار هو مسار الرابط بعد استبدال المقاطع التي تشبه القيم (GET /orders/:id). تُواصَل ترويسة W3C traceparent الواردة، فيظهر الطلب القادم من تطبيقك (أو من دالة أخرى) كتتبّع واحد.
  • fetch الخارجي: يصبح كل استدعاء داخل الطلب نطاق client باسم METHOD host ويحمل ترويسة traceparent. تُتجاهل الاستدعاءات إلى Lerix API نفسها.
  • استدعاءات قاعدة بيانات Supabase: تُسمّى الطلبات التي ترسلها supabase-js إلى PostgREST كنطاقات قاعدة البيانات: select orders وinsert orders وupsert orders وupdate orders وdelete orders وrpc apply_discount. المرشّحات (filters) موجودة في سلسلة الاستعلام ولا تُسجَّل أبداً.
عطّل خطاف fetch عبر tracing: { enabled: true, instrumentations: { fetch: false } }. وتتبّع أي شيء آخر يدوياً:
تضيف lerix.trace() نطاقاً فرعياً للطلب الحالي؛ وخارج الطلب المتتبَّع تكتفي بتنفيذ الدالة.

أخذ العينات

يُتخذ قرار أخذ العينة مرة واحدة عند بدء التتبّع، وينتقل لاحقاً عبر traceparent. الطلبات التي تفشل أو تتباطأ أو تبلّغ عن خطأ تُحفظ كاملةً دائماً. ويُرسل النطاق الجذر لكل طلب، فتغطي أعداد المسارات ومعدلات الأخطاء والنسب المئوية كل الحركة. النطاقات الجذرية للطلبات غير المشمولة بالعينة تغذّي تلك العدّادات فقط، لذا يُحتفظ بها في العازل (isolate) وتُرسل مع طلب لاحق بدلاً من تصدير منفصل لكل استدعاء. أما ما شملته العينة أو ما فشل فيُرسل مباشرة بعد استجابته.

التتبّع خلف الخطأ

الخطأ المُبلَّغ عنه داخل طلب متتبَّع يحمل معرّف تتبّعه. ترتبط صفحته في لوحة التحكم بشلال الطلب، ويُحفظ ذلك التتبّع حتى لو كان أخذ العينات قد أسقطه.

عنوان العميل

يُسجَّل عنوان العميل وفق إعدادات التتبّع في المشروع (مُقنَّعاً افتراضياً). يوفّر Deno.serve وCloudflare (cf-connecting-ip) عنوان المتصل مباشرةً. أما Supabase وVercel فيمرّرانه في ترويسة تمرير فقط: اضبط تلك الترويسة وعدد الوكلاء (proxies) الموثوقين في إعدادات المشروع، وإلا فلن يُسجَّل أي عنوان.

القيود

  • تحتاج النطاقات الفرعية إلى AsyncLocalStorage لتجد طلبها. في Cloudflare فعّل nodejs_compat. وفي Vercel Edge تعتمد النطاقات الفرعية على إتاحة بيئة التشغيل AsyncLocalStorage كمتغير عام. وبدونه تحصل مع ذلك على نطاق الخادم لكل طلب، وتبقى الأخطاء مرتبطة به.
  • لا تتقدّم الساعات في Cloudflare Workers إلا عبر عمليات الإدخال/الإخراج، لذا يظهر العمل الحسابي الخالص (CPU) هناك بمدة صفرية.