Skip to main content
تعرض هذه الصفحة مثالًا واحدًا لكل عائلة استجابات في Telemetry API. كل القيم مصطنعة. لرموز الأخطاء وطرق التعافي، راجع أخطاء API.

اقرأ الاستجابة

اقرأ كل استجابة بهذا الترتيب:
  1. اقرأ حالة HTTP.
  2. تأكد أن للنص الشكل الذي يحدده المسار.
  3. تأكد أن كل project_id يقع داخل نطاق المشروع المطلوب.
  4. أبقِ قيم التعداد (enum) المعيارية والمعرّفات دون تغيير.
  5. اتبع next_action فقط عندما يدعم العميل قيمتي code وtarget الخاصتين به.
  6. تعامل مع null والحقل المحذوف والقائمة الفارغة على أنها حالات مختلفة.
قد تحتوي الاستجابة 200 OK على قائمة فارغة. قائمة السجلات الفارغة تعني أنه لم يطابق أي سجل الطلب. ولا تعني أن المشكلات أو التتبّعات أو الإجراءات فارغة أيضًا. لا تربط الإشارات لأن طوابعها الزمنية متقاربة. اتبع تتبّعًا فقط عندما تحتوي الاستجابة على trace_id الخاص به تمامًا. الاستجابة 404 والقائمة الفارغة نتيجتان مختلفتان. يعيد مسار القائمة [] عندما لا يطابق أي قيد. ويعيد مسار التفاصيل 404 مع code: not_found عندما لا يجد قيدًا يمكن قراءته. لا تثبت أي من النتيجتين أن الاستيعاب فشل.

ما يجب إرساله

فائدة الاستجابات بقدر فائدة بيانات القياس عن بُعد التي ترسلها. أرسل هذه القيم في كل غلاف أو إعداد SDK:
  • release وenvironment.
  • أسماء ثابتة للخدمات والإجراءات والمقاييس.
  • سياق التتبّع عندما تنتمي السجلات والـ Spans والإجراءات والمشكلات إلى الطلب نفسه.
  • قيم الخطورة المعيارية: info وwarning وerror وcritical.
  • سمات تساعد في تصحيح الأخطاء، دون أسرار أو بيانات شخصية غير ضرورية.
راجع دمج SDK والتحكم في البيانات الملتقطة.

استجابة الاستيعاب

تقرأ حزم SDK العامة استجابة POST /v1/events نيابةً عنك. لا تحتاج شيفرة التطبيق إلى معالجتها.

استجابة دفعة SDK

تعيد دفعة SDK الناجحة 200 OK مع الأعداد المقبولة لكل تدفق:
تغطي الأعداد هذه الدفعة فقط. إعادة محاولة دفعة قبلها LogBrew سابقًا تعيد 0 لكل تدفق، وعدد الأحداث في already_accepted. أبقِ معرّفات الأحداث الأصلية عندما تعيد المحاولة.

استجابة الغلاف الأصلي

يعيد POST /api/telemetry/ingest الاستجابة 200 OK مع أعداد العناصر المقبولة لكل تدفق:
ليس في الاستجابة الأصلية حقل metrics أو context_updated. لا تضفهما. يعدّ already_accepted العناصر التي قبل LogBrew قيمة id الخاصة بها سابقًا لهذا المشروع. راجع الغلاف الأصلي المباشر.

أخطاء الاستيعاب

الاستجابة 401 مع code: ingest_key_invalid تعني أن رمز Bearer للاستيعاب مُبطَل أو منتهي الصلاحية أو غير صالح للمشروع. في POST /v1/events، يعيد الطلب 401 مع code: unauthorized عندما يغيب رمز Bearer أو لا يكون مفتاح استيعاب. استخدم رمز Bearer الحالي للاستيعاب الخاص بالمشروع. لا تُعد المحاولة باستخدام رمز Bearer للحساب. تعيد دفعة SDK المرفوضة 422 مع code: validation_failed:
من قيم error الأخرى SDK event batch requires at least one event وSDK event type is not supported by this ingest route. افحص إصدار الـ SDK وإعدادات النقل. لا ترسل دفعة فارغة. لا تغيّر أنواع الأحداث أو معرّفاتها لمجرد أن تجتاز الدفعة التحقق. الطلب بطريقة غير POST يعيد 405 مع code: method_not_allowed. ونص JSON غير المقروء يعيد code: invalid_json.

تنسيق استجابة قوائم بيانات القياس عن بُعد

تعيد مسارات القوائم افتراضيًا مصفوفة JSON مجردة. القائمة الفارغة الناجحة هي []. مع pagination=cursor، يعيد المسار غلافًا. يطابق مفتاح المجموعة نوع الإشارة: next_cursor كائن فيه حقول المتابعة، أو null في الصفحة الأخيرة. الصفوف مرتبة من الأحدث إلى الأقدم. راجع ترقيم الصفحات بالمؤشر.

استجابة السجل

صفحة مؤشر للسجلات مع limit=1:
تتضمن السجلات level للتوافق وseverity للعرض. يحمل الحقلان كلاهما القيمة المعيارية. ويحمل triage نتيجة قاعدة الخطورة. راجع استجابات قواعد الخطورة. يكون trace_id وspan_id بالقيمة null عندما لا يكون للسجل رابط تتبّع. عندها تكون قيمة next_action هي inspect_related_logs والهدف telemetry_logs. تستخدم السجلات والمشكلات والإجراءات زوجَي next_action نفسيهما. يعيد GET /api/logs/{log_id} سجلًا واحدًا بالشكل نفسه.

استجابة المشكلة

يعيد GET /api/telemetry/issues/{issue_id} مشكلة مجمّعة واحدة. وتعيد القائمة الكائنات نفسها. يستخدم هذا المثال نسخة الاستجابة الافتراضية 1:
في النسخة 1، قيمة status هي unresolved أو resolved أو ignored. للمشكلة المؤرشفة، تكون قيمة triage.ignored هي true. لأزواج next_action والقراءات التي تليها، راجع التحقيق في مشكلة. first_seen_at وlast_seen_at هما وقتا أول حدوث وأحدث حدوث. لا يتغيران عندما تتغير الحالة. تظهر بعض الحقول فقط عندما تتوفر البيانات لدى LogBrew: قيمة symbolication.status هي resolved أو invalid_metadata أو artifact_not_found أو source_not_resolved أو unavailable. لا تعيد القائمة ولا تغييرات الحالة ولا تغييرات القواعد الحقل symbolication. مع response_version=2، للمشكلة الحقول نفسها، مع هذه التغييرات:
يعرض هذا المثال بعض الحقول فقط. الأولوية المشتقة هي high لـ error وcritical، وmedium لـ warning، وlow لـ info. وهي تستخدم triage.effective_severity، لذلك يمكن لقاعدة خطورة المشكلة أن تغيّرها. مع response_version=3، للمشكلة كل حقول النسخة 2 بالإضافة إلى assignee. تكون قيمة assignee هي null عندما لا يكون للمشكلة مسؤول:
لا تعرض المشكلة أي مسؤول عندما يفقد العضو المُسند إليه صلاحية قراءة المشروع. مع response_version=4، يحمل assignee أيضًا الحقل type. المسؤول من نوع user له user_id وname وemail كما في النسخة 3. والمسؤول من نوع team له team_id وslug وname. تعرض النسخة 3 الفريق المسؤول على أنه null. يطلب CLI النسخة 4:
أي قيمة أخرى لـ response_version تعيد 422 مع code: validation_failed. وتستخدم صفحة المؤشر النسخة نفسها لكل مشكلة في issues.

استجابة قائمة المسؤولين

يعيد GET /api/telemetry/issues/assignees?project_id=<project_id> كل حساب يمكن إسناد المشكلات إليه في المشروع:
أضف response_version=2 لتحصل أيضًا على teams: كل فرق مؤسسة المشروع، مع team_id وslug وname. إذا لم يستطع الحساب قراءة المشروع، يعيد المسار 404 مع code: not_found.

استجابة الإجراء

يتبع distinct_id جهة فاعلة واحدة أو جلسة واحدة. تعامل مع distinct_id وsession_id على أنهما معرّفان مبهمان. يكون session_id وtrace_id بالقيمة null عندما يكونان مفقودين. ويُحذف span_id عندما يكون مفقودًا. ليس للإجراء خطورة. راجع التقاط أحداث المنتج.

استجابة المقياس

كل عنصر عيّنة واحدة. لا تستخدم عدد العيّنات عددًا للأحداث أو المستخدمين. تكون unit وtemporality وtrace_id وspan_id بالقيمة null عندما تكون مفقودة. القيمة null ليست صفرًا.

استجابة الإصدار

يغطي الصف الواحد مشروعًا واحدًا وإصدارًا واحدًا وبيئة واحدة وخدمة واحدة. وتصف أعداده هذا الصف فقط. قيمة trace_health.status هي unknown عندما لا تكون للصف تتبّعات، وإلا فهي no_errors_observed أو errors_observed. وerror_rate_basis_points هي نسبة التتبّعات التي فيها Span خطأ، من 0 إلى 10000. وهي ليست معدل أخطاء لكل الطلبات. يشير next_action إلى أول نوع إشارة له بيانات، بهذا الترتيب: راجع الإصدارات.

استجابة اكتشاف التتبّعات

يعيد GET /api/telemetry/traces?pagination=cursor صفًا واحدًا لكل تتبّع، بالإضافة إلى إيصال naming_quality للصفحة المُعادة:
يغطي naming_quality الصفحة المُعادة فقط. وهو ليس درجة على مستوى الحساب كله. truncated: true تعني أن هناك صفحة أخرى. عندما يكون في الصفحة اسم عام أو مسار غير مطابق أو عملية عامة، تكون قيمة next_action هي improve_trace_naming والهدف sdk_configuration. ودون pagination=cursor، يعيد المسار مصفوفة مجردة من التتبّعات دون naming_quality. يحمل next_cursor الحقلين time وtrace_id. أرسلهما في cursor_time وcursor_trace_id. يعيد GET /api/telemetry/traces/{trace_id} الـ Spans لتتبّع واحد. ويعيد GET /api/telemetry/traces/{trace_id}/summary الـ Span الجذري وSpans الأخطاء والخدمات والمدة وأبطأ مسار، دون سمات الـ Spans الخام. الاستجابة 404 للملخص تعني أنه لم يطابق أي تتبّع النطاق الكامل. لا تُعد المحاولة دون عوامل التصفية. راجع استجابات Spans التتبّع وملخصه.

القوائم الفارغة والقيود المفقودة

قد لا تكون لقراءة القائمة نتائج مطابقة. أما قراءة التفاصيل فلها عقد مختلف: يعيد السجل المفقود هذه الاستجابة 404:
تستخدم المشكلة المفقودة "error": "issue not found". ويستخدم ملخص التتبّع المفقود "error": "trace not found". المعرّف غير المعروف والمعرّف الذي لا يستطيع الحساب قراءته يعيدان الاستجابة نفسها. القائمة التي فيها project_id واحد لا يستطيع الحساب قراءته تعيد 200 مع قائمة فارغة. تحقق من معرّف المشروع قبل أن تبلّغ بعدم وجود بيانات.

تحديدات المشاريع المرفوضة

تقبل قوائم السجلات والمشكلات والإجراءات والمقاييس والإصدارات والتتبّعات مشروعًا واحدًا عبر project_id، أو من 2 إلى 50 مشروعًا عبر project_ids. ويقبل فهرس سمات السجلات المُحدِّدات نفسها. أما تاريخ مرات حدوث المشكلة فلا يقبلها. الطلب الذي فيه project_id وproject_ids معًا يعيد 422:
يعيد project_ids أيضًا 422 مع code: validation_failed عندما يحتوي على UUID غير صالح، أو معرّف مكرر، أو أقل من 2 أو أكثر من 50 معرّفًا. إذا لم يستطع الحساب قراءة مشروع واحد في مجموعة project_ids، يعيد الطلب كله 404. ولا يعيد المشاريع الأخرى نتيجةً جزئية:
اعرض الخطأ، لا قائمة فارغة ولا عددًا صفريًا. اقرأ قائمة المشاريع مرة أخرى. لا تحذف مشروعًا بصمت، ولا تُعد المحاولة عبر كل المشاريع. بيانات الاعتماد المفوَّضة، مثل اتصال MCP (grant)، تعيد 403 مع code: forbidden لمشروع خارج نطاق اتصالها. راجع نطاق المشروع.

أخطاء المؤشر

تستخدم السجلات والمشكلات والإجراءات والمقاييس ومرات حدوث المشكلات cursor_time وcursor_id. يعيد المؤشر المرفوض 422 مع code: validation_failed. ولا تعني هذه الأخطاء أن القائمة فارغة. مثلًا:
انسخ next_cursor كاملًا من الصفحة السابقة. لا تضع الوقت الحالي مكان cursor_time. إذا فقدت المؤشر، فابدأ من جديد مع pagination=cursor وعوامل التصفية الأصلية. مفتاح الاستعلام غير المعروف أو القيمة من نوع خاطئ يعيدان 422 مع "error": "invalid query parameters".

استجابات مؤشر الإصدارات

لمؤشر الإصدارات 5 حقول. الطلب الناجح الذي ليس له نتائج مطابقة يعيد 200:
عندما لا تكون قيمة next_cursor هي null، أرسل القيم الخمس كلها في الطلب التالي: يحدد cursor_project_id موضعًا. ولا يحل محل project_id أو project_ids. أبقِ معاملات المشروع والتصفية الأصلية. رمّز كل قيمة لعنوان URL. مع pagination=cursor، يعيد المؤشر الجزئي أو قيمة الإصدار أو البيئة أو الخدمة الفارغة 422 مع "error": "all release cursor fields must be sent together". وتعيد قيمة cursor_time غير الصالحة وغياب pagination=cursor الأخطاء نفسها التي تعيدها المؤشرات الأخرى.

أخطاء اكتشاف التتبّعات

تنطبق هذه الأخطاء على GET /api/telemetry/traces. يعيد كل منها 422 مع code: validation_failed. الطلب المرفوض ليس نتيجة فارغة. لتضمين حالتي التتبّع كلتيهما، احذف status. للصفحة التالية، انسخ next_cursor.time إلى cursor_time وnext_cursor.trace_id إلى cursor_trace_id. لا ترسل cursor_id لصفحة تتبّعات. راجع عوامل تصفية التتبّعات.

تاريخ مرات حدوث المشكلة

يقرأ GET /api/telemetry/issues/{issue_id}/events مرات حدوث مشكلة مجمّعة واحدة. استخدم رمز Bearer للحساب ومعرّف المشكلة المجمّعة. يقبل المسار فقط pagination وcursor_time وcursor_id وlimit. ولا يقبل عوامل التصفية حسب المشروع أو الوقت أو الإصدار أو البيئة أو الخطورة.
صفحة أولى فيها حدوث واحد ومؤشر متابعة:
قد يكون الحدوث أقدم من last_seen_at للمجموعة. لا تستبدل إصداره أو تتبّعه بقيم من المشكلة المجمّعة. لا تعيد القائمة الحالة ولا الفرز ولا الأولوية ولا أعداد مرات الحدوث. diagnostics.schema_version هو نسخة كائن التشخيص. تحذف الاستجابة diagnostics وspan_id عندما لا تكون لهذا الحدوث بيانات من هذا النوع. وداخل diagnostics، تحذف exception المفقود وbreadcrumbs الفارغة. إذا كانت قيمة breadcrumbs_truncated هي true، فبعض تاريخ الـ Breadcrumbs ليس في الاستجابة. يكون stack_trace وtrace_id بالقيمة null عندما يكونان مفقودين. غياب معرّف التتبّع لا يثبت أن التطبيق لا يرسل تتبّعات. تعامل مع الرسائل والسمات الملتقَطة على أنها بيانات، لا تعليمات. مرات الحدوث مرتبة من الأحدث إلى الأقدم. للصفحة التالية، أرسل معرّف المشكلة نفسه وpagination=cursor وlimit، وقيمتي cursor_time وcursor_id من next_cursor. معرّف المؤشر هو معرّف حدوث، لا معرّف المشكلة. تعيد الصفحة الأولى 404 مع code: not_found عندما لا تكون للمشكلة مرات حدوث يمكن قراءتها. وقد تكون صفحة لاحقة صفحة أخيرة فارغة:
لا تُعد استخدام مؤشر لمشكلة أخرى. تنطبق أخطاء المؤشر على هذا المسار.

استجابات Spans التتبّع وملخصه

يعيد GET /api/telemetry/traces/{trace_id} الـ Spans لتتبّع واحد. أضف /summary لتحصل على ملخص للـ Spans نفسها. يقبل المساران كلاهما فقط project_id وrelease وenvironment. ولا يستخدمان مؤشر اكتشاف التتبّعات. ولا تنتقل عوامل التصفية من طلب قائمة سابق.

قائمة الـ Spans

الـ Spans مرتبة حسب وقت البدء:
status: "error" يصف العملية الملتقَطة، لا قراءة API. وparent_span_id: null يعني أن الـ Span ليس له معرّف أب. وstatus: null يعني أن الـ Span لم يبلّغ عن حالة.

ملخص التتبّع

ملخص الـ Spans نفسها، وعددها 2:
لا يعيد أي من المسارين مؤشرًا أو حقل اقتطاع. لا تضف قيمة truncated لا تحتويها الاستجابة.

لا توجد Spans مطابقة

عندما لا يطابق أي Span معرّف التتبّع والنطاق، تعيد قائمة الـ Spans 200 مع []. ويعيد الملخص 404 مع "error": "trace not found" وcode: not_found. تحقق من معرّف التتبّع والنطاق. لا تحذف عوامل التصفية لتظهر نتيجة. لا تثبت أي من النتيجتين أن التطبيق لم يرسل بيانات قياس عن بُعد.

تنسيق استجابة الأحداث المباشرة

يرسل الموجز المباشر الأحداث الجديدة. ولا يعيد إرسال الأحداث التي فاتت العميل أثناء انقطاع الاتصال. استخدم مسارات القوائم لقراءة القيود الموجودة.

أنشئ تذكرة

أرسل POST /api/feed/ticket مع رمز Bearer للحساب. ليس للطلب نص.
تحتوي الاستجابة 200 OK على التذكرة في الحقل ticket:
التذكرة بيانات اعتماد قصيرة العمر. لا تكتبها في السجلات ولا تضعها في موجّه (prompt) وكيل. افتح الاتصال قبل انتهاء expires_in_seconds. تحدد مدة الصلاحية متى يمكن أن يبدأ الاتصال، لا المدة التي يبقى فيها مفتوحًا. الاستجابة 401 تعني أن تسجيل الدخول إلى الحساب غير صالح. سجّل الدخول مرة أخرى قبل أن تطلب تذكرة. والطلب بطريقة غير POST يعيد 405 مع code: method_not_allowed.

افتح الاتصال

اربط عميل WebSocket بالعنوان wss://api.logbrew.co/api/feed/live?ticket=<feed-ticket>. رمّز التذكرة لعنوان URL. لا تضع رمز Bearer للحساب ولا رمز Bearer للاستيعاب في عنوان URL. الاستجابة 401 تعني أن التذكرة أو تسجيل الدخول إلى الحساب غير صالح. أنشئ تذكرة جديدة بعد أن تسجّل الدخول مرة أخرى. انتظر قبل أن تعيد الاتصال بعد خطأ. لا تُعد الاتصال في حلقة متقاربة.

اقرأ الرسائل

كل رسالة غلاف بالشكل { "type": "...", "data": ... }. اقرأ type قبل أن تحلّل data. تجاوز الأنواع التي لا يدعمها العميل.
يستخدم الحدث native_issue النسخة 1 من استجابة المشكلة: تظهر المشكلة المؤرشفة بالقيمة ignored، وليس للحدث أولوية. المقاييس والإصدارات ليست من أنواع الأحداث المباشرة. اقرأها بمسارات قوائمها. لا تختار التذكرة مشروعًا. تحقق من project_id لكل حدث قبل أن تعرضه في عرض مشروع. يستخدم logbrew watch --json هذا الموجز. راجع مرجع CLI.

تعامل مع الاتصال المغلق

قد لا يكون لحالات الانقطاع الأخرى سبب من LogBrew. بعد أن تعيد الاتصال، اقرأ مسارات القوائم مرة أخرى وطابق القيود حسب المعرّف.

أمثلة استجابات حالة المشكلة

يعيد PATCH /api/telemetry/issues/{issue_id} مع { "status": "resolved" } الاستجابة 200 OK مع المشكلة المجمّعة المحدَّثة، بشكل استجابة المشكلة نفسه. يختار مفتاح الاستعلام response_version النسخة. ولا يعيد المسار علامة نجاح. يضبط النص حقلًا واحدًا أو أكثر من status وpriority وassignee. يقبل status القيم unresolved أو resolved أو archived. وignored اسم أقدم لـ archived. راجع حدّث مشكلة واحدة. تحقق من id وstatus وpriority في الاستجابة قبل أن تعرض النجاح. لا تبنِ النتيجة من القيم المرسلة. تغيير الحالة لا يحذف مرات الحدوث، ولا يغيّر first_seen_at وlast_seen_at. ولا يغيّر severity أو قاعدة الخطورة. يعيد التغيير المرفوض 422 مع code: validation_failed:
الحقل الذي له القيمة المطلوبة بالفعل لا يتغير. بعد انتهاء المهلة أو ضياع الاستجابة، أرسل الطلب نفسه مرة أخرى، أو اقرأ المشكلة أولًا. لا ترسل تغييرًا مختلفًا قبل أن تقرأ الحالة الحالية. راجع عمليات الكتابة. يعيد POST /api/telemetry/issues/bulk الاستجابة 200 OK مع نتيجة واحدة لكل معرّف مشكلة مطلوب، بترتيب الطلب. تستخدم كل مشكلة موجودة شكل النسخة 3. ولنتيجة not_found القيمة issue: null:
يعرض هذا المثال بعض حقول المشكلة فقط. قيمة outcome هي updated أو unchanged أو not_found. الطلب المكرر يعيد unchanged ولا يغيّر شيئًا. راجع حدّث المشكلات دفعة واحدة. يفشل الطلب الجماعي كله في هذه الحالات:

نطاق طلبات التحليلات

تقرأ مسارات التحليلات ومسار سلسلة المقياس ومسار حجم الإشارات مشروعًا واحدًا ونطاقًا زمنيًا واحدًا. يحتاج كل طلب إلى project_id وsince. يقبل since مدة مختصرة مثل 24h أو 7d، أو طابعًا زمنيًا بتنسيق RFC3339. ويقبل until طابعًا زمنيًا بتنسيق RFC3339، وقيمته الافتراضية وقت الطلب. يشمل النطاق since ولا يشمل until، ولا يمكن أن يزيد على 31 يومًا. service_name وrelease وenvironment عوامل تصفية اختيارية بالمطابقة التامة. يجب أن تكون كل قيمة من 1 إلى 256 حرفًا بعد أن يزيل LogBrew المسافات من طرفيها. يضع مسار مقارنة الشرائح عوامل التصفية هذه داخل كل شريحة، لا في المستوى الأعلى. إذا لم يستطع الحساب قراءة المشروع، تعيد هذه المسارات 200 OK مع أعداد صفرية. ولا تعيد 404. النتيجة الفارغة لا تؤكد صلاحية الوصول إلى المشروع. قارن project_id بالمشاريع التي يستطيع الحساب قراءتها. والطلب عبر اتصال MCP (grant) لا يشمل المشروع يعيد 403 وforbidden. تبدأ كل استجابة بالحقول schema_version وquery وpurpose. يعيد query النطاق الفعلي. ويحذف أي عامل تصفية لم ترسله. وpurpose نص عادي يشرح السؤال الذي يجيب عنه المسار. يُحذف المعدّل عندما يكون مقامه صفرًا. المعدّل المحذوف ليس 0 وليس null. اقرأ coverage قبل أن تثق بمعدّل.

أخطاء النطاق المشتركة

تستخدم هذه الأخطاء HTTP 422 وvalidation_failed: مثلًا، الطلب الذي ليس فيه project_id يعيد:
يستخدم مسارا سلسلة المقياس وحجم الإشارات قواعد النطاق نفسها، مع نص error خاص بكل منهما. تسرد أقسامهما أدناه تلك الأخطاء. يعيد مفتاح الاستعلام غير المعروف 422 مع استجابة معاملات الاستعلام غير الصالحة. ويعيد حقل JSON غير المعروف، أو حقل JSON المطلوب المفقود، أو قيمة التعداد غير المدعومة invalid_json. راجع JSON غير صالح. والطلب بطريقة HTTP خاطئة يعيد 405 وmethod_not_allowed. ويسمّي نص next فيه الطريقة والحقول المدعومة. راجع طريقة غير مدعومة.

استجابة النظرة العامة لتحليلات المنتج

يعرض GET /api/telemetry/analytics/overview النشاط في مشروع واحد: حجم الإجراءات، والمستخدمين، والجلسات، وسلسلة زمنية، وأبرز الإجراءات، ومشاهدات الصفحات ومشاهدات الشاشات والتفاعلات المصنَّفة. استخدمه لتجد أسماء الأحداث الدقيقة لمسارات التحليلات الأخرى. أرسل response_version=3. تعيد النسختان 1 و2 الأعداد نفسها، لكن قيمة estimation.method فيهما رمز أقدم. لا تتحقق النسخة 1 من نوع الكيان عندما تعدّ المستخدمين معروفي الهوية. وتعدّ النسختان 2 و3 فقط الكيانات من النوع user، وتضيفان أعداد الكيانات مجهولة الهوية وsubject_coverage. يقرأ هذا الطلب ساعة واحدة في فواصل زمنية مدة كل منها خمس دقائق، ويعيد صفين في كل قائمة من القوائم الأبرز:

نجاح النظرة العامة

في هذه النتيجة المصطنعة، للمشروع 120 إجراءً في فاصلين زمنيين من الفواصل الاثني عشر. يأتي عشرون إجراءً من كيانات مجهولة الهوية. لكل إجراء معرّف جلسة. ولنصف الإجراءات معرّف تتبّع.

اقرأ النظرة العامة

مجموع أعداد subject_coverage الخمسة يساوي إجمالي الأحداث في قسمها. وحده identified_user_events يُحسب ضمن المستخدمين. وanonymous_actions يساوي summary.actions ناقص identified_actions. يحتوي series فقط على الفواصل الزمنية التي فيها نشاط. وexpected_buckets هو عدد الفواصل الزمنية الممكنة في النطاق. لا ترسم الفاصل الزمني المفقود صفرًا مقيسًا إلا إذا ذكر مخططك هذه القاعدة. تتوافق الفواصل الزمنية مع حدود الفواصل بتوقيت UTC. والنطاق الذي يبدأ داخل فاصل زمني يشمل ذلك الفاصل الجزئي. يعدّ classified_activity مشاهدات الصفحات ومشاهدات الشاشات والتفاعلات. مشاهدات الشاشات والتفاعلات إجراءات أيضًا. أما مشاهدات الصفحات فليست إجراءات. لا تجمع summary.actions مع classified_activity.summary.events. انسخ kind وevent_name من classified_activity.top_events إلى خطوات قمع التحويل، ومُحدِّدات الاحتفاظ بالمستخدمين، ومُحدِّدات دورة الحياة، والأحداث المرجعية للمسارات، وأهداف الشرائح. القيمة true في top_events_truncated تعني وجود أسماء أقل حجمًا. زِد top_limit حتى 20 لترى المزيد. قيمة analysis_level هي no_data أو event_only أو user_level أو user_and_session. إذا لم تكن للمشروع إجراءات ولا أحداث مصنَّفة، فقيمة next_action.code هي capture_product_activity. راجع تحليلات المنتج.

أخطاء النظرة العامة

بالإضافة إلى أخطاء النطاق المشتركة، تعيد النظرة العامة 422 وvalidation_failed لهذه القيم: القيمة الافتراضية لـ interval هي auto. وهي تختار أصغر فاصل زمني يحتاج إلى 300 فاصل على الأكثر. والقيمة الافتراضية لـ top_limit هي 10.

استجابة قمع التحويل المرتب

يقيس POST /api/telemetry/analytics/funnel الإكمال المرتب عبر خطوتين إلى 8 خطوات. انسخ كل قيمة kind وevent_name كما هي تمامًا من classified_activity.top_events في النظرة العامة. اسم الإجراء المشابه ليس تطابقًا. يعدّ نص الطلب هذا الجلسات التي تشاهد /pricing ثم تكمل التسجيل خلال ساعة واحدة:
قيمة analysis_unit هي session أو identified_user. القيمة الافتراضية session. وقيمة kind للخطوة هي page_view أو screen_view أو interaction. لا يقبل مسار قمع التحويل response_version.

نجاح قمع التحويل

استجابة 200 OK:
المعدّلات كسور من 0 إلى 1. اقرأ coverage قبل أن تثق بمعدّل. وselected_unit_coverage_rate هي نسبة أحداث الخطوات المختارة التي استطاع LogBrew استخدامها. لا تعيد الاستجابة الهويات الخام. راجع تحليلات المنتج.

اقرأ التحويل والتغطية

entry_rate يساوي entered_units مقسومًا على candidate_units: 50 من 60. وoverall_conversion_rate يساوي completed_units مقسومًا على entered_units: 15 من 50، أي 30%. وهو ليس 15 مقسومًا على كل الوحدات المرشّحة. لا توضح هذه الأعداد سبب توقف الوحدات. تعدّ التغطية الأحداث، لا الجلسات. هنا يطابق 120 حدثًا خطوةً ما، و20 منها ليس لها معرّف جلسة. تستبعد النتيجة هذه الأحداث العشرين من أعداد الجلسات. لا تتعامل معها على أنها 20 جلسة فاشلة. ليس للخطوة الأولى conversion_from_previous. وليس للخطوة الأخيرة drop_off_to_next_units ولا drop_off_to_next_rate. تصل الوحدة إلى خطوة لاحقة فقط عندما تتزايد أوقات الخطوات تزايدًا صارمًا. لا يمكن للأحداث ذات الطابع الزمني نفسه أن تحقق خطوتين متتاليتين. ويجب أن تقع الخطوة الأخيرة خلال conversion_window_seconds من الخطوة الأولى. وضع الجلسات يعدّ الجلسات، لا الأشخاص. استخدم identified_user فقط للأحداث التي تحمل معرّف كيان مبهمًا من النوع user. يمكن لهذا الوضع أن يربط أحداثًا من جلسات مختلفة داخل فترة التحويل. أبقِ الوحدة نفسها والخطوات نفسها عندما تقارن النتائج. القيمة الافتراضية لـ conversion_window_seconds هي 24 ساعة أو طول النطاق، أيهما أقصر. والحد الأقصى هو طول النطاق بالثواني الكاملة، مقرَّبًا إلى الأعلى.

نتائج قمع التحويل الفارغة

الاستجابة الفارغة الناجحة تسرد مع ذلك الخطوات المطلوبة مع units صفرية. إذا لم تكن هناك وحدات مرشّحة، يحذف summary الحقلين entry_rate وoverall_conversion_rate. لا يعيد المسار 404 لأن أي حدث لم يطابق. اقرأ coverage وnext_action لتجد السبب:

طلبات قمع التحويل المرفوضة

بالإضافة إلى أخطاء النطاق المشتركة، تعيد هذه الطلبات 422 وvalidation_failed. أقل من خطوتين أو أكثر من 8 خطوات:
قيمة conversion_window_seconds تساوي 0، أو قيمة أكبر من طول النطاق:
قيمة event_name الفارغة، أو الأطول من 256 حرفًا، أو التي تحتوي على حرف تحكم تعيد product analytics funnel event_name must be non-empty, control-free, and at most 256 characters. ويجب أن تكون خطوة interaction أيضًا اسم إجراء صالحًا. وإلا فالخطأ هو product analytics interaction event_name must be a bounded stable action name. صحّح الطلب قبل أن ترسله مرة أخرى. لا تحذف خطوات ولا تغيّر وحدة التحليل لمجرد أن تحصل على نتيجة غير فارغة.

التحليل بأحداث محددة والتحليل التلقائي

يقبل الاحتفاظ بالمستخدمين ودورة الحياة شكلين للطلب. استخدم response_version لتختار الشكل الذي يجيب عن سؤالك: يحتوي المُحدِّد الدقيق على kind وevent_name. قيمة kind هي page_view أو screen_view أو interaction. انسخ event_name من classified_activity.top_events. لا تخمّن اسم الحدث من نص زر. يعدّ الشكلان كلاهما المستخدمين فقط: معرّفات الكيانات المبهمة من النوع user. لا تُحسب الكيانات مجهولة الهوية ولا الأحداث التي ليس لها معرّف كيان صالح للاستخدام مستخدمين. لا تعيد الاستجابات معرّفات الكيانات أبدًا. الفواصل الزمنية الثابتة هي hour وday وweek وthirty_day. وهي مُدد ثابتة. thirty_day تعني 30 يومًا، لا شهرًا تقويميًا. إذا حذفت interval، يستخدم API القيمة hour للنطاق الذي مدته 48 ساعة أو أقل، وday للنطاق الأطول.

طلب الاحتفاظ بالمستخدمين لأحداث محددة

أرسل هذا النص إلى POST /api/telemetry/analytics/retention. وهو يسأل هل يكمل المستخدمون عملية إتمام شراء أخرى بعد أول عملية إتمام شراء لهم في النطاق:
أول حدث بداية مطابق في النطاق هو نقطة البداية لكل مستخدم. يجب أن تقع العودة بعد نقطة البداية هذه تمامًا وقبل until. ويمكن أن يكون المُحدِّدان الحدث نفسه.

نجاح الاحتفاظ بالمستخدمين لأحداث محددة

في هذا المثال المصطنع، يُتم مستخدمان عملية الشراء. يُتم المستخدم الأول الشراء الساعة 12:00 يوم 1 يونيو، ثم مرة أخرى الساعة 13:00. ويُتم المستخدم الثاني الشراء الساعة 12:00 يوم 2 يونيو. وفي الساعة 13:00 يوم 2 يونيو، يشاهد المستخدم الثاني صفحة لكنه لا يُتم عملية شراء أخرى.

اقرأ الاحتفاظ بالمستخدمين

تعدّ التغطية الأحداث المصنَّفة الأربعة كلها، لكن ثلاثة منها فقط تطابق كل مُحدِّد لإتمام الشراء. مشاهدة الصفحة لا تُحسب عودة. يكرر أحد المستخدمَين إتمام الشراء، لذلك قيمة return_rate_after_start هي 0.5. وحده المستخدم الأول لديه يوم كامل من الرصد بعد نقطة البداية. ويعود هذا المستخدم خلال اليوم، لذلك معدّل المنحنى 1.0. أما المستخدم الثاني فلديه 12 ساعة فقط من الرصد. هذا المستخدم غير مؤهل للفترة 0، لذلك تحذف خلية المجموعة النموذجية الثانية retention_rate. لا تَعُدّ هذا المستخدم مفقودًا. يقسم weighted_retention_rate كل المستخدمين المحتفَظ بهم على كل المستخدمين المؤهلين. وfully_observed_cohort_average_rate هو المتوسط البسيط لمعدّلات المجموعات النموذجية التي يكون كل مستخدم فيها مؤهلًا. المجموعات النموذجية فواصل زمنية ثابتة تبدأ عند since. ويحتوي cohorts فقط على المجموعات النموذجية التي فيها مستخدمون. مع mode: "return_on_or_after"، يحذف المنحنى window_end_seconds.

الاحتفاظ بالمستخدمين تلقائيًا

أرسل response_version: 2 دون start_event أو return_event. كل مشاهدة صفحة أو مشاهدة شاشة أو تفاعل مدعوم يُحسب بدايةً وعودةً. تختار هذه النسخة مجموعة من الأحداث. ولا تختار تنسيق التقاط في الـ SDK.
للاستجابة أشكال summary وcurve وcohorts وnext_action نفسها التي لاستجابة الأحداث المحددة. يعرض هذا المقتطف الحقول التي تتغير. في هذا المثال، للمستخدمَين نفسيهما ثلاثة أحداث وليس لهما مشاهدة صفحة:
في الوضع التلقائي، يساوي كل من start_events وreturn_events قيمة classified_events. هذه الأعداد أحداث، لا مستخدمون.

الاحتفاظ بالمستخدمين دون مستخدمين مؤهلين

قد لا يكون في النتيجة الناجحة مستخدمون ضمن المجموعات النموذجية. يعرض هذا المقتطف فترة واحدة مطلوبة دون مجموعات نموذجية:
اقرأ coverage وnext_action. فهما يميّزان النطاق الذي ليس فيه أحداث مصنَّفة (capture_product_activity) من الأحداث التي ليس لها مستخدمون (identify_product_users أو identify_returning_users). المعدّل المفقود ليس صفرًا مقيسًا.

أخطاء الاحتفاظ بالمستخدمين

بالإضافة إلى أخطاء النطاق المشتركة، تعيد هذه الطلبات 422 وvalidation_failed: يستخدم حد الخلايا النطاق والفترات، لا عدد المستخدمين. النطاق الذي مدته 30 يومًا مع interval: "hour" فيه 720 فاصلًا زمنيًا للمجموعات النموذجية. ومع interval_count: 1، ينتج 720 خلية، وهذا أكثر من 500:
لاستخدام الاحتفاظ بالمستخدمين تلقائيًا، احذف المُحدِّدين كليهما. لا تغيّر الـ SDK لتصحيح طلب القراءة هذا.

طلب دورة الحياة لحدث محدد

أرسل هذا النص إلى POST /api/telemetry/analytics/lifecycle. وهو يصنّف المستخدمين حسب حدث واحد، لا حسب كل نشاط في المشروع:
يحدد history_period_count الفترات الكاملة قبل since التي يقرؤها LogBrew تاريخًا مرصودًا سابقًا. ويقبل من 2 إلى 31. القيمة الافتراضية 2. قد يكون المستخدم خاملًا لهذا الحدث بينما يمارس أنشطة أخرى.

نجاح دورة الحياة لحدث محدد

يستخدم هذا المثال المصطنع يومين من التاريخ المرصود السابق ويومين للتحليل. الحروف تميّز مستخدمي المثال فقط. لا تعيد الاستجابة معرّفات المستخدمين. يشاهد C أيضًا صفحة يوم 2 يونيو. هذا الحدث لا يطابق مُحدِّد إتمام الشراء.

اقرأ دورة الحياة

في 1 يونيو، A عائد، وB مستعاد، وC جديد، وD خامل. وفي 2 يونيو، A وB عائدان، وC خامل لإتمام الشراء رغم مشاهدة الصفحة. صافي التغير في 2 يونيو هو 2 - 3 = -1. في كل فاصل زمني، مجموع المستخدمين الجدد والعائدين والمستعادين يساوي active_subjects. وreturning_subjects زائد dormant_subjects يساوي previous_active_subjects. وnet_active_change يساوي active_subjects ناقص previous_active_subjects. لا تجمع الأعداد اليومية للنشطين لتحصل على المستخدمين الفريدين. هنا مجموع الأعداد اليومية 5، لكن قيمة analysis_active_subjects هي 3. يظهر أربعة مستخدمين فريدين عبر التاريخ المرصود والتحليل. تكون قيمة fully_observed هي false للفاصل الزمني الأخير الذي ينتهي بعد until. وقد تتغير أعداده عندما يصبح رصد الفترة الكاملة ممكنًا. يقترح next_action تحقيقًا. ولا يبيّن سببًا.

دورة الحياة تلقائيًا

أرسل response_version: 2 دون مُحدِّد event. كل مشاهدة صفحة أو مشاهدة شاشة أو تفاعل مدعوم يُحسب نشاطًا:
للاستجابة أشكال summary وbuckets وnext_action نفسها التي لاستجابة الأحداث المحددة. يعرض هذا المقتطف الحقول التي تتغير:
في الوضع التلقائي، يساوي coverage.selected_events قيمة coverage.analysis_classified_events. والعنصر الخامس في limitations هو Returning, resurrected, and dormant compare any supported classified product activity; no event is ranked, selected, or inferred.

دورة الحياة دون مستخدمين

إذا لم يكن في نطاق التحليل ولا في التاريخ المرصود مستخدمون صالحون للاستخدام، تكون buckets فارغة ويحذف summary الحقل latest_fully_observed_period:
المستخدمون الذين يظهرون في التاريخ المرصود فقط قد ينتجون مع ذلك فواصل زمنية فيها مستخدمون خاملون عندما لا يكون في نطاق التحليل نشاط.

أخطاء دورة الحياة

بالإضافة إلى أخطاء النطاق المشتركة، تعيد هذه الطلبات 422 وvalidation_failed: مثلًا، عشر فترات week للتاريخ المرصود تحتاج إلى 70 يومًا:

اقرأ نطاق التحليل المختار

لاستجابات الأحداث المحددة schema_version: 1. ويعيد query فيها المُحدِّدات ويحذف activity_scope. أما الاستجابات التلقائية فلها schema_version: 2 وquery.activity_scope: "all_classified_activity". وتحذف المُحدِّدات. قد يغيّر مُحدِّد مختلف النتيجة دون أي تغيير في النشاط الملتقَط.

استجابة سلسلة المقياس

يقرأ GET /api/telemetry/metrics/series اسم مقياس محددًا واحدًا في مشروع واحد. انسخ الاسم من GET /api/telemetry/metrics. يجمّع هذا الطلب عدّادًا تفاضليًا (delta counter) حسب الخدمة:

نجاح سلسلة المقياس

تحتوي هذه الاستجابة المصطنعة على سلسلة واحدة لعدّاد تفاضلي. تقع ثلاث عيّنات بالقيم 2 و3 و5 في الفاصل الزمني الأول. وتقع عيّنتان بالقيمتين 1 و4 في الفاصل الزمني الأخير. لا تقع أي عيّنة في الفاصل الزمني الأوسط، لذلك ليس للاستجابة نقطة له.

اقرأ سلسلة المقياس

تسجّل النقطة الأولى 10 مهام مكتملة، لا 10 عيّنات. يقسم rate_per_second هذا التغير على الفاصل الزمني الذي مدته 300 ثانية. وlast هو آخر تغير مُدوَّن، لا المجموع. راجع معاني تجميع المقاييس. يحدد نوع السلسلة وطبيعتها الزمنية (temporality) قيمة aggregation.code والإحصاءات في كل نقطة. تحذف النقطة الإحصاء الذي لا ينطبق. الإحصاء المفقود ليس صفرًا. limited استجابة ناجحة، لا خطأ. وهي تضيف aggregation.limitation الذي يشرح سبب عرض LogBrew للقيم الخام فقط. وready لا تثبت أن الالتقاط كامل. اقرأ coverage قبل أن ترسم مخططًا:
  • يعدّ samples عيّنات كل السلاسل المطابقة، ومنها السلاسل التي لا تعيدها الاستجابة.
  • يعدّ series السلاسل المطابقة. ويعدّ returned_series وpoints البيانات المُعادة.
  • تكون قيمة truncated هي true عندما يحذف series_limit السلاسل الأقل حجمًا.
  • expected_buckets_per_series هو عدد الفواصل الزمنية الممكنة في النطاق.
لا تضف نقطة لفاصل زمني ليس فيه عيّنات. لا تُدرج صفرًا ولا تنسخ القيمة السابقة. تعيد كل نقطة حتى 3 قيم في trace_exemplars. تربط العيّنة النموذجية للتتبّع (trace exemplar) عيّنة واحدة بتتبّع. ولا تشرح كل عيّنة في الفاصل الزمني. إذا لم تكن لأي نقطة عيّنة نموذجية للتتبّع، فقيمة next_action.target هي metric_samples.

نطاق سلسلة المقياس وأخطاؤها

project_id وname وsince مطلوبة. يمكن أن يحتوي name على 200 حرف على الأكثر. قيمة interval هي auto أو 1m أو 5m أو 15m أو 1h أو 6h أو 1d. القيمة الافتراضية auto، وهي تختار أصغر فاصل زمني يحتاج إلى 300 فاصل على الأكثر. ولا يمكن أن يحتاج الفاصل الصريح إلى أكثر من 500 فاصل. قيمة group_by هي none أو service_name أو release أو environment. القيمة الافتراضية none. دون تجميع، تبقى الأنواع والوحدات والطبائع الزمنية المختلفة في سلاسل منفصلة. يقبل series_limit من 1 إلى 20. القيمة الافتراضية 10. النتيجة الفارغة تعيد 200 مع series: [] وsamples صفرية. ويحذف الكائن coverage الحقلين first_seen_at وlast_seen_at. وهذا لا يثبت أن التطبيق لم يرسل المقياس قط. تحقق من المشروع واسم المقياس والنطاق الزمني. حذف name يعيد 422:
الفواصل الزمنية التي مدتها دقيقة واحدة عبر سبعة أيام تعيد 422:
أخطاء 422 الأخرى هي metric series group_by is not supported وmetric series interval is not supported وmetric series_limit must be between 1 and 20.

استجابة تحليل المسارات

يجد POST /api/telemetry/analytics/paths الأحداث المسماة قبل حدث مختار واحد أو بعده في الجلسة نفسها. الحدث المختار هو الحدث المرجعي. انسخ kind وevent_name الخاصين به من classified_activity.top_events. يعيد المسار schema_version: 1. ولا يقبل response_version أو analysis_unit.
direction وanchor مطلوبان.

نجاح المسارات

في هذه النتيجة المصطنعة، تحتوي أربع جلسات على الحدث المرجعي. يمثّل المساران المُعادان ثلاثًا من هذه الجلسات. ولا يُعاد مسار واحد أدنى ترتيبًا.

اقرأ المسارات

يقسم share_of_anchored_sessions جلسات المسار على الجلسات الأربع كلها التي فيها الحدث المرجعي. النسبتان 50% و25%، لا 67% و33%. يعدّ unrepresented_sessions الجلسات التي فيها الحدث المرجعي ولا يمثّلها أي مسار مُعاد. وpaths_truncated: true تعني أن النتيجة غير مكتملة. تعدّ التغطية الأحداث، لا الجلسات. هنا تطابق خمسة أحداث الحدث المرجعي، لكن أحدها ليس له معرّف جلسة. لا يمكن لهذا الحدث أن يدخل في مسار. يعيد كل مسار حتى 3 عيّنات نموذجية للتتبّع. استخدم معرّف تتبّع من استجابتك أنت. رابط التتبّع لا يبيّن سبب إجراء المستخدم أو سبب الفشل. العقد مرتبة زمنيًا في الاتجاهين كليهما. المسار ليس إعادة تشغيل كاملة للجلسة. يقرأ LogBrew 1024 حدثًا مسمى على الأكثر لكل جلسة قبل أن يختار الحدث المرجعي: أبكر الأحداث لـ following، وأحدث الأحداث لـ preceding. وقد يُحذف الحدث المرجعي الذي يقع خارج هذا الحد.

صفِّ الحدث المرجعي حسب خاصية

أرسل حتى أربعة عناصر في property_filters، لكل منها key وvalue محددان تمامًا. انسخ المفتاح من فهرس الخصائص. تنطبق عوامل التصفية على الحدث المرجعي فقط، لا على الأحداث المحيطة به. القيم حساسة لحالة الأحرف. عندما توجد عوامل تصفية، يعيدها query، ويبلّغ coverage.anchor_property_filters بما يلي: المفاتيح المفقودة والقيم المختلفة تحتاج إلى إصلاحات مختلفة. لا تجمعها معًا. يُحذف الكائن عندما لا يكون في الطلب عامل تصفية للخصائص.

المسارات الفارغة والطلبات المرفوضة

قد تكون مصفوفة paths الفارغة استجابة 200 ناجحة. اقرأ summary وcoverage وnext_action. تميّز هذه الرموز بين الأسباب: capture_product_activity وchoose_captured_path_anchor وcapture_anchor_properties وimprove_anchor_property_coverage وverify_anchor_property_values وsessionize_product_activity وnarrow_or_move_path_anchor. بالإضافة إلى أخطاء النطاق المشتركة، تعيد هذه الطلبات 422 وvalidation_failed: مثلًا، depth: 0 يعيد:

فهرس خصائص التحليلات

يسرد GET /api/telemetry/analytics/properties مفاتيح الخصائص في أحداث المنتج المصنَّفة في مشروع واحد. استخدم المفاتيح في مقارنات الشرائح وفي عوامل تصفية الحدث المرجعي للمسارات. يعيد الفهرس المفاتيح والأعداد. ولا يعيد قيم الخصائص أو الهويات أبدًا.

اقرأ مفاتيح الخصائص المتاحة

أرسل project_id وsince. يمكنك أيضًا إرسال until وservice_name وrelease وenvironment وlimit وresponse_version. يقبل limit من 1 إلى 50 مفتاحًا. القيمة الافتراضية 20. أرسل response_version=2 لتحصل على قيمة estimation.method العامة.

نجاح فهرس الخصائص

في هذه النتيجة المصطنعة، يوجد 100 حدث مصنَّف. التُقطت خمسة منها قبل فهرس الخصائص الحالي.

فسّر الفهرس

قيمة source هي standard_context لمفتاح سياق قياسي، مثل resource.runtime.name، أو custom_tag لمفتاح يبدأ بـ tag.. وقيمة value_type هي دائمًا string. وproperties مرتبة حسب events، من الأعلى إلى الأدنى. يوجد tag.plan في 60 حدثًا من أصل 100 حدث مصنَّف. وله نحو 3 قيم مختلفة. لا يعرض الوصف هذه القيم. استخدم قيمًا تعرفها من تطبيقك. لا تخمّن قيمة من عدد. قد يحمل الحدث الواحد عدة مفاتيح، لذلك لا تجمع أعداد events الخاصة بكل مفتاح. مصفوفة properties الفارغة لا تثبت أن المشروع ليس فيه أحداث منتج. اقرأ summary وcoverage وnext_action.

أخطاء فهرس الخصائص

بالإضافة إلى أخطاء النطاق المشتركة، يعيد limit=0 أو limit=51 الاستجابة 422:
قيمة response_version غير 1 أو 2 تعيد product analytics response_version must be 1 or 2. يتحقق LogBrew من response_version قبل القيم الأخرى. الطلب POST يعيد 405:

مقارنة شرائح التحليلات

يقارن POST /api/telemetry/analytics/segments/compare عدد المرات التي تصل فيها الجلسات أو المستخدمون إلى حدث محدد واحد عبر 2 إلى 4 شرائح في مشروع واحد. تختار الشريحة الأحداث حسب الخدمة والإصدار والبيئة وقيم الخصائص. الشريحة الأولى هي الشريحة الأساسية.

حدّد المقارنة

أرسل نص JSON هذا مع مصادقة الحساب وContent-Type: application/json. هنا basic وpremium قيمتا خطة في تطبيق المثال، لا خطط LogBrew:
target وsegments مطلوبان. قيمة analysis_unit هي session أو identified_user. القيمة الافتراضية session، وهي تعدّ الجلسات، لا الأشخاص. يقبل interval القيم نفسها التي تقبلها النظرة العامة. القيمة الافتراضية auto. تحتاج كل شريحة إلى key فريد وlabel ومجموعة عوامل تصفية مختلفة:
  • key: من 1 إلى 32 بايت. ابدأ بحرف ASCII صغير أو رقم. استخدم فقط أحرف ASCII الصغيرة والأرقام و_ و-.
  • label: من 1 إلى 80 حرفًا، دون أحرف تحكم.
  • service_name، release، environment: اختيارية. كل قيمة من 1 إلى 256 حرفًا، دون أحرف تحكم.
  • property_filters: من 0 إلى 4 عوامل تصفية. يمكن أن يظهر كل مفتاح مرة واحدة في الشريحة. يجب أن يطابق الحدث كل عوامل تصفية الشريحة. القيم حساسة لحالة الأحرف، ومن 1 إلى 256 حرفًا، ويزيل LogBrew المسافات من بدايتها ونهايتها.
الشريحة التي ليس فيها عوامل تصفية تختار كل النشاط المصنَّف في المشروع والنطاق الزمني. يمكن أن تتداخل الشرائح. اختلاف الاسم أو المفتاح لا يجعل مجموعتي عوامل تصفية متطابقتين صالحتين.

نجاح مقارنة الشرائح

في هذه النتيجة المصطنعة، تصل الشريحة الأساسية إلى إتمام الشراء في 10 جلسات من أصل 50. وتصل إليه شريحة premium في 18 جلسة من أصل 60.

اقرأ المعدّلات والفروق

يقدّر eligible_units عدد الجلسات أو المستخدمين الذين لهم نشاط مصنَّف في الشريحة. ويقدّر reached_units عدد من وصل منهم إلى الهدف. وreach_rate يساوي reached_units مقسومًا على eligible_units. لا تُحسب الأحداث التي ليس لها معرّف الوحدة المختارة ضمن هذه الوحدات. معدّل الشريحة الأساسية 20%. ومعدّل شريحة premium هو 30%. الفرق 10 نقاط مئوية. والزيادة النسبية 50%، لا 10%. تأتي أخطاء الكسور العشرية الصغيرة من حساب الفاصلة العائمة. قرّب المعدّلات للعرض، لكن احسب بالقيم المُعادة. ليس للشريحة الأساسية comparison_to_baseline. وتُحذف الزيادة النسبية عندما يكون معدّل وصول الشريحة الأساسية صفرًا. في query، يكون عامل تصفية الشريحة الذي لم ترسله بالقيمة null. وتُحذف قائمة property_filters الفارغة. لـ coverage.property_filters الحقول نفسها التي لـ تغطية عوامل تصفية الحدث المرجعي للمسارات. هنا يساوي matching_events قيمة classified_events. أبقِ المفاتيح المفقودة والقيم المختلفة منفصلة. يمكن أن تتداخل الشرائح، وقد تظهر الجلسة الواحدة في عدة فواصل زمنية. لا تجمع أعداد الوحدات عبر الشرائح أو الفواصل الزمنية. المقارنة وصفية. قيمة confidence.causal_inference هي not_established، وقيمة confidence.statistical_significance هي not_tested. معدّل 30% مقابل 20% لا يبيّن أن خطةً تسببت في زيادة عمليات إتمام الشراء.

أخطاء مقارنة الشرائح

بالإضافة إلى أخطاء النطاق المشتركة، تعيد هذه الطلبات 422 وvalidation_failed: أخطاء interval هي نفسها أخطاء النظرة العامة. مثلًا، شريحتان لهما مفتاحان مختلفان وعوامل تصفية متطابقة تعيدان:
اختلاف الاسم أو ترتيب عوامل تصفية الخصائص لا يغيّر الأحداث المختارة. فشل التحقق ليس دليلًا على أنه لا توجد أحداث مطابقة. الطلب GET يعيد 405:

استجابة حجم الإشارات

يعدّ GET /api/telemetry/summary/volume الإشارات المحتفَظ بها لمشروع واحد ونطاق زمني واحد. ويتطلب project_id وsince. ولا يقبل project_ids. لا يمكن أن يكون until في المستقبل. إذا حذفته، فالنهاية هي وقت الطلب. وقيمة since المختصرة مثل 24h تُحسب رجوعًا من until. قيمة interval هي auto أو 1m أو 5m أو 15m أو 1h أو 6h أو 1d. القيمة الافتراضية auto تختار أصغر فاصل زمني يحتاج إلى 120 فاصلًا على الأكثر. ولا يمكن أن يحتاج الطلب إلى أكثر من 500 فاصل. قيمة response_version الوحيدة هي 1.

أعداد الإشارات

تغطي هذه الاستجابة المصطنعة فاصلين زمنيين مدة كل منهما دقيقة واحدة. نُفّذ الطلب الساعة 12:02 بتوقيت UTC دون until. لدى الحساب سياسة احتفاظ بالبيانات مدتها 30 يومًا. اقرأ السياسة وتاريخ القطع المُعادين. لا تفترض أن هذه القيم تنطبق على حسابك.

اقرأ كل عدد بوحدته

total هو مجموع أعداد الفواصل الزمنية في السلسلة. وpeak هو أكبر عدد في فاصل زمني منها. ويعدّ non_empty_buckets الفواصل الزمنية التي عددها أكبر من صفر. تظهر السلاسل الخمس دائمًا بهذا الترتيب. لا تدمج أعداد الإشارات المختلفة في درجة تأثير واحدة. تبدأ الفواصل الزمنية عند query.since. يشمل الفاصل الزمني بدايته ولا يشمل نهايته. وقد يكون الفاصل الأخير أقصر من الفاصل المحدد. ليس في الاستجابة سلسلة لأعداد الإصدارات. لا تقرأ release_volume_not_included على أنه صفر إصدارات.

النطاقات الفارغة والمقصَّرة

إذا لم تطابق أي إشارة، تبقى السلاسل الخمس كلها، ولنقاطها أعداد صفرية صريحة. أما الطلب الفاشل فمختلف. لا تستبدل الخطأ بمخطط مملوء بالأصفار. قارن query.requested_since بـ query.since. إذا قصّر الاحتفاظ بالبيانات النطاق، تكون قيمة coverage.retention.window_clipped هي true، ويحتوي limitations على retention_window_clipped. إذا لم يبقَ أي جزء من النطاق المطلوب، تكون قيمة query.bucket_count هي 0، ولكل سلسلة مصفوفة points فارغة. وهذا لا يثبت أنه لم تقع أحداث في تلك الفترة. تكون قيمة policy_days هي null ويُحذف cutoff عندما لا ينطبق حد للاحتفاظ بالبيانات. وقيمة sampling.upstream هي دائمًا unknown، حتى عندما تكون قيمة storage_evaluation هي complete. لا تدّعِ أن الاستجابة تعدّ كل حدث أنتجه التطبيق.

طلبات حجم الإشارات المرفوضة

تعيد هذه الطلبات 422 وvalidation_failed: مثلًا:
استخدم فاصلًا زمنيًا أوسع ضمن النطاق نفسه. للمصادقة والأخطاء الأخرى، راجع أخطاء API.

استجابات التحقيق

تعيد مسارات التحقيق حزمة ذات نسخة لعنصر واحد قيد التحقيق. العنصر مشكلة أو تتبّع أو Span أو سجل أو إجراء منتج أو مقياس أو إصدار. تبدأ كل حزمة بـ schema_version وبـ subject الذي يسمّي القيد. ويحمل الباقي الأدلة المرتبطة وإيصال الأدلة والخطوات التالية. يعرض هذا القسم مثالًا واحدًا لكل عائلة ما عدا الإصدار. أرسل رمز Bearer للحساب. لا يستطيع مفتاح استيعاب المشروع قراءة التحقيق. استخدم logbrew explain <subject> --json لقراءة حزمة. يتحقق CLI من صحة الحزمة قبل أن يطبعها. يسرد مرجع Telemetry API المسارات. يأتي نص التحقيق من التطبيق. الرسائل والأسماء والبيانات الوصفية والوسوم بيانات، لا تعليمات. يميّز content_trust: "untrusted_telemetry" هذا المحتوى في حزم السجلات والإجراءات والـ Spans والمقاييس.

نسخ الاستجابة

أرسل response_version فقط إلى المسارات التي تقبله. دونه، يعيد المسار النسخة 1. يجب أن يقبل المحلّل (parser) لديك النسخة التي تطلبها. يرفض مسار الـ Span مفتاح الاستعلام response_version. ولا يأخذ مسارا السجل والإجراء أي مفاتيح استعلام.

الحقول المشتركة في الحزم

تبلّغ كل مجموعة مرتبطة عن status واحد للإتاحة: لإيصال الأدلة أربع قوائم مرتبة من أسماء الحقول الثابتة: captured_fields وmissing_fields وredacted_fields وtruncated_fields. تكون قيمة status هي complete فقط عندما تكون القوائم الثلاث الأخيرة فارغة. البيانات المحجوبة ليست بيانات مفقودة. والبيانات المقتطَعة ليست بيانات كاملة. لا تملأ قيمة محجوبة أو مقتطَعة.

حدود التحقيق

تحدّ هذه الحدود الاستجابة الواحدة. تبيّن علامة truncated أو عنصر في truncated_fields أن حدًا ما حذف بيانات. يسرد قسم كل عائلة حدوده الخاصة.

استجابة التحقيق في المشكلة

استخدم GET /api/telemetry/issues/{issue_id}/investigation لقراءة الأدلة لحدوث واحد من مشكلة مجمّعة. تبيّن إرشادات التحقيق في مشكلة كيف تقرأ الأدلة بالترتيب. اطلب النسخة 13:
مفاتيح الاستعلام هي response_version وselection وoccurrence_id. قيمة selection هي recommended أو first أو latest. القيم حساسة لحالة الأحرف. في النسخ من 2 إلى 13، يستخدم المُحدِّد المحذوف recommended. وتعيد النسخة 1 أحدث حدوث محتفَظ به ولا تقبل أي مُحدِّد. لا تنطبق عوامل تصفية قائمة المشكلات على هذه القراءة.
لاستجابة 200 OK المصطنعة هذه حدوث TypeError معالَج واحد مع تتبّع مرتبط. ليس فيها طلب ولا Breadcrumbs ولا سجلات مرتبطة ولا أدلة نشر، لذلك قيمة evidence.status هي partial.
المفاتيح التي تضيفها نسخة لاحقة تغيب عن النسخة الأقدم. لا تقرأ المفتاح الغائب على أنه null. يبلّغ subject.status وحالات lifecycle عن المشكلة المؤرشفة بالقيمة ignored. أما استجابات قائمة المشكلات وتفاصيلها فتستخدم archived في نسخة الاستجابة 2 وما بعدها. حدود المشكلة: يقرأ الاقتراح 50 حدوثًا محتفَظًا به على الأكثر. وللاتجاه 30 فاصلًا زمنيًا على الأكثر. ويعيد كل توزيع 10 قيم على الأكثر. وللمكدّس 32 إطارًا على الأكثر.

أخطاء طلب التحقيق في المشكلة

استخدم selection أو occurrence_id. لا ترسلهما معًا، حتى عندما يختاران الحدوث نفسه:
الحدوث المفقود لا يعني أن المشكلة مفقودة. والاستجابة 404 لا تبيّن هل يستطيع حساب آخر قراءة المشكلة.

استجابة التحقيق في التتبّع

استخدم GET /api/telemetry/traces/{trace_id}/investigation لقراءة تتبّع واحد مع مسار الفشل وأبطأ مسار والإشارات المرتبطة. مفاتيح الاستعلام هي response_version وproject_id وrelease وenvironment. وكلها اختيارية. اطلب النسخة 3:
تضيف النسخة 2 الحقلين cause وfix إلى كل مشكلة مرتبطة. وتضيف النسخة 3 الحقل span_id إلى المشكلات والإجراءات والمقاييس المرتبطة عندما يكون قد التُقط.
في هذه الاستجابة المصطنعة Span خادم جذري وSpan عميل فاشل. والـ Span الفاشل هو أيضًا أبطأ Span فرعي. ليس للـ Spans سياق منظّم، لذلك spans.context مفقود.
يكون trace.parentage مفقودًا عندما يسمّي Span أبًا لم يحتفظ به LogBrew. في معاينة الـ Spans 64 Span على الأكثر. وفي كل مسار تحليل 64 Span على الأكثر. وتستخدم القراءات المرتبطة 8 نطاقات نشر على الأكثر. الإجراء التالي الذي هدفه trace_span يسمّي span_id من هذه الحزمة. لقراءة هذا الـ Span، أرسل طلبًا إلى مسار الـ Span مع project_id وenvironment وrelease الخاصة بالـ Span.

استجابة التحقيق في Span

استخدم GET /api/telemetry/traces/{trace_id}/spans/{span_id}/investigation لقراءة عملية واحدة في تتبّع. أرسل project_id وenvironment وrelease. الثلاثة كلها مطلوبة. انسخها من الـ Span المختار. لا ترسل قيمة id لصف الـ Span على أنها span_id.
تصف هذه الاستجابة المصطنعة Span العميل الفاشل من مثال التتبّع. لسجل خطأ معرّف الـ Span نفسه. استغرق الـ Span وقتًا أطول من المئين 95 التقريبي لنظرائه المحتفَظ بهم.
يقرأ خط الأساس الساعات الأربع والعشرين التي تسبق بداية الـ Span. يشمل النطاق since ولا يشمل until. وerror_rate_basis_points: 500 تعني 5%. وsubject_percentile_basis_points: 9500 تعني أن 95% من النظراء المحتفَظ بهم لم يستغرقوا وقتًا أطول من هذا الـ Span. المئينات تقريبية. أبقِ baseline.limitations مع القيم. خط الأساس not_found ليس له نظراء محتفَظ بهم. وخط الأساس unavailable قراءة فاشلة، لا عدد صفري. parent_chain_status: "complete" تعني أن السلسلة المحتفَظ بها تصل إلى Span جذري. ولا تثبت أن LogBrew احتفظ بكل Span في الطلب. تعيد topology 64 سلفًا على الأكثر، و50 Span فرعيًا مباشرًا، و50 حافة بين الخدمات.

استجابة التحقيق في السجل

استخدم GET /api/logs/{log_id}/investigation لقراءة سجل واحد وأدلته المرتبطة. ليس لهذا المسار مفاتيح استعلام. انسخ معرّف السجل من قائمة سجلات.
قد تعيد القراءة أدلة خارج عوامل تصفية قائمة السجلات. تستخدم القراءات المرتبطة مشروع السجل وبيئته وإصداره، و5 دقائق قبل السجل وبعده. وتستخدم السجلات القريبة أيضًا الخدمة نفسها. ولا تحتاج إلى معرّف تتبّع. أما قراءات التتبّع المطابق تمامًا فتحتاج إلى معرّف تتبّع السجل، وقد تتضمن خدمات أخرى. ويستخدم ملخص التتبّع معرّف التتبّع والنطاق نفسيهما، دون النطاق الزمني.
في هذه الاستجابة المصطنعة سجل تحذير دون سياق تتبّع، وسجل قريب واحد. لا تبني الاستجابة رابط تتبّع من الطوابع الزمنية.
قد يكون معرّف التتبّع موجودًا عندما تكون حالة التتبّع not_found أو unavailable. وملخص التتبّع المتاح لا يضمن وجود exact_span.

استجابة التحقيق في الإجراء

استخدم GET /api/telemetry/actions/{action_id}/investigation لقراءة إجراء منتج واحد وحالته المبلَّغ عنها وأدلته المرتبطة. ليس لهذا المسار مفاتيح استعلام. تستخدم القراءات المرتبطة النطاق الزمني والنطاقات نفسها التي يستخدمها التحقيق في السجل.
تستخدم correlations وtimeline وnext_actions أشكال التحقيق في السجل. وتستبعد الإجراءات المرتبطة الإجراء قيد التحقيق.
تصف هذه الاستجابة المصطنعة إجراء إتمام شراء فاشلًا من مستخدم مسجَّل الدخول. ليس للإجراء معرّف تتبّع.
لا تعيد الاستجابة معرّفات الكيانات أو الجلسات أبدًا. يسرد إيصال الأدلة دائمًا subject.distinct_id على أنه محجوب، وsubject.session_id عندما تكون الجلسة قد التُقطت. لهذا السبب، كل حزمة إجراء partial وتتضمن improve_capture. لا تُزِل ضوابط الخصوصية لتلبية ذلك.

استجابة التحقيق في المقياس

استخدم GET /api/telemetry/metrics/investigation لقراءة اسم مقياس واحد في مشروع واحد ونطاق زمني واحد. تحتوي الاستجابة على السلسلة الحالية، ومقارنة مع النطاق السابق المساوي له في الطول، وأحدث عيّنة، والعيّنات النموذجية للتتبّع، وعمليات النشر المكتملة. تضيف النسخة 2 وصف المقياس من أحدث عيّنة محتفَظ بها. وتبلّغ النسخة 1 دائمًا عن description_status: "not_captured".
project_id وname وsince مطلوبة. يشمل النطاق since ولا يشمل until. والقيمة الافتراضية لـ until هي الآن. وتقرأ المقارنة أيضًا النطاق السابق المساوي في الطول.
في هذا المدرّج التكراري المصطنع 5 عيّنات في فاصلين زمنيين مدة كل منهما 5 دقائق. قيمة p95 في الفاصل الأحدث 48 ms. وقيمة p95 في أحدث فاصل من النطاق السابق 24 ms.
relative_change_percent يساوي (current - previous) / abs(previous) * 100. ويكون null عندما تكون القيمة السابقة صفرًا أو مفقودة. يعدّ expected_buckets_per_series الفواصل الزمنية الممكنة، لا الفواصل التي فيها بيانات. لا ترسم الفواصل الفارغة أصفارًا. عملية النشر القريبة من تغير لا تثبت أنها سببت التغير. المشروع الذي لا يستطيع الحساب قراءته يعيد 200 OK مع analysis.status: "no_samples"، لا 404. النتيجة الفارغة لا تصف أنواع الإشارات الأخرى. حدود المقياس: النطاق 31 يومًا على الأكثر. ولكل سلسلة 500 فاصل زمني على الأكثر. وقيمة series_limit من 1 إلى 20، والافتراضية 10. تعيد الاستجابة 20 عيّنة نموذجية و20 عملية نشر على الأكثر. قيمة interval هي auto أو 1m أو 5m أو 15m أو 1h أو 6h أو 1d. وقيمة group_by هي none أو service_name أو release أو environment. والقيم الأخرى تعيد 422.

أخطاء التحقيق

الاستجابة 404 تعني أنه لا يوجد مشروع يمكن قراءته يحتوي على القيد. ويعيد كل مسار أيضًا 401 دون مصادقة صالحة، و405 لطريقة غير GET. راجع أخطاء API لاستجابات عدم العثور والمسار والمصادقة والطريقة. قد تفشل قراءة أدلة اختيارية داخل استجابة 200 OK. عندها تبلّغ المجموعة عن unavailable. لا تعرضها على أنها not_found أو صفر قيود.

قيم الخطورة

قيم الخطورة التي يراها المستخدم هي info وwarning وerror وcritical. يمكن لحزم SDK وبيئات التشغيل أن ترسل أسماء بديلة شائعة مثل trace أو debug أو warn أو fatal. تعيد استجابات REST والاستجابات المباشرة دائمًا القيمة المعيارية. مثلًا، يقبل LogBrew القيمة warn مُدخلًا ويعيد warning. ويرفض الاستيعاب قيم الخطورة غير المعروفة.

استجابات قواعد الخطورة

تغيّر قاعدة الخطورة طريقة عرض LogBrew لسجل أو مشكلة. ولا تغيّر الخطورة التي التقطها التطبيق. تعيد السجلات والمشكلات كائن triage: استخدم triage.effective_severity للعرض. أبقِ severity على أنها القيمة الملتقَطة. تحذف قائمة السجلات افتراضيًا السجلات المتجاهَلة. أرسل status=ignored أو status=all في GET /api/logs لتضمينها. يجب أن يملك الحساب صلاحية إدارة المشكلات في المشروع. صلاحية القراءة لا تكفي. دون هذه الصلاحية، يعيد تغيير القاعدة 403 مع code: forbidden.

غيّر قاعدة سجل

يضبط PUT /api/logs/{log_id}/triage-rule القاعدة للسجل وللسجلات اللاحقة التي لها البصمة نفسها. يحتاج النص إلى severity وignored كليهما:
تحتوي الاستجابة 200 OK على السجل كاملًا. تبقى قيمة severity فيه warning. ويعرض triage القاعدة:
يعرض هذا المقتطف الحقول التي تغيّرت فقط. قيمة severity في الطلب هي source أو info أو warning أو error أو critical. تعيد source الخطورة الملتقَطة. ولا تجعل السجل المتجاهَل نشطًا. لعرض السجل مرة أخرى، أرسل "ignored": false.

غيّر قاعدة مشكلة

يضبط PUT /api/telemetry/issues/{issue_id}/triage-rule الخطورة المعروضة لمشكلة مجمّعة ولمرات حدوثها اللاحقة. يقبل النص severity فقط:
تحتوي الاستجابة 200 OK على المشكلة كاملة بالنسخة 1. ولا تتغير severity وstatus الملتقَطتان:
يعرض هذا المقتطف بعض الحقول فقط. لا تحلّ القاعدة المشكلة ولا تؤرشفها ولا تعيد فتحها. استخدم تغيير الحالة لذلك. تتبع الأولوية المشتقة الخطورة الفعلية الجديدة. اقرأ المشكلة مع response_version=2 أو 3 لتراها. الخطورة غير المدعومة تعيد 422:
حقل النص غير المعروف، مثل status في قاعدة مشكلة، يعيد 422 مع code: invalid_json. والسجل أو المشكلة المفقودة أو غير المقروءة تعيد 404 مع code: not_found. إذا ضاعت الاستجابة، فاقرأ السجل أو المشكلة مرة أخرى قبل أن ترسل القاعدة مرة أخرى.

تنسيق استجابة الخطأ

تعيد أخطاء LogBrew API غلاف JSON. يعرض هذا المثال طلبًا مرفوضًا؛ ويعتمد نص error وnext على المشكلة:
استخدم code لفروع البرنامج، وnext_action للأتمتة. اعرض error وnext على الأشخاص نصًا عاديًا. لا تحلّل صياغتهما. تضيف بعض الأخطاء حقولًا، مثل limit أو reset_at أو retry_after_seconds. الاستجابة التي ليس لها نص JSON ليس لها code من LogBrew. راجع أخطاء API لكل الرموز.

اقرأ البيانات باستخدام CLI

يقرأ CLI المسارات نفسها ويعيد JSON نفسه مع --json. ابدأ بنطاق واسع، ثم ضيّقه:
أضف --pagination cursor لتحصل على غلاف المؤشر. يطلب CLI نسخة استجابة المشكلة 4. راجع اقرأ الصفحة التالية والمتابعة المباشرة.