غالبًا ما تكون بطاقة الجدول فهرسًا: صف واحد لكل خدمة، أو مضيف، أو نقطة نهاية، أو مجموعة أخطاء، مع بضعة أعمدة تُقيِّم كلًّا منها. وتحوِّل إجراءات النقر على الصف هذا الفهرس إلى مسار عمل للفحص. تستعرض الفهرس للعثور على الصف المهم، ثم تنقر عليه، فيمرّر ClickStack قيم الصف الذي نُقر عليه كعوامل تصفية. ثم تُفتح الوجهة وهي محددة النطاق مسبقًا لذلك العنصر وحده، من دون الحاجة إلى إعادة إنشاء الاستعلام يدويًا.
يمكن أن ينقلك النقر إلى أحد موضعين:
- لوحة معلومات أخرى، لعرض مركّز لذلك العنصر وحده، مثل لوحة معلومات تفصيلية لكل خدمة، أو
- الأحداث الأساسية في Search، للسجل أو التتبع الكامنة وراء الصف.
تبدأ حالتا الاستخدام أدناه من الفهرس نفسه (قائمة الخدمات) ثم تتدرجان منه إلى كل وجهة. تنطبق إجراءات النقر على الصفوف على بطاقات الجداول فقط. وهي تختلف عن الانتقال التفصيلي إلى Search في المخططات، الذي يفتح قائمة سياقية عند النقر على نقطة في مخطط خطي أو شريطي.
افحص خدمة في لوحة المعلومات الخاصة بها
يجيب جدول نظرة عامة يحتوي على صف واحد لكل خدمة عن سؤال: "أي خدمة غير سليمة؟". ويمكن أن يؤدي النقر على صف إلى فتح لوحة معلومات مخصصة لتلك الخدمة تجيب عن سؤال: "ما الذي يحدث داخلها؟"، مع قصر العرض على الخدمة التي نقرت عليها. يربط النمط أدناه بين جدول لقائمة الخدمات ولوحة معلومات Service Detail.
أنشئ لوحة المعلومات التفصيلية
أنشئ لوحة معلومات باسم Service Detail وأضف عامل تصفية مخصص بالتعبير ServiceName على مصدر التتبعات لديك. يعيد عامل التصفية على مستوى لوحة المعلومات ضبط نطاق كل بطاقة على خدمة واحدة، لذلك لا تحتاج البطاقات نفسها إلى تضمين خدمة ثابتة في استعلاماتها. أضف العروض التي تريدها لكل خدمة: مؤشرات RED الأساسية (الطلبات، والأخطاء، ومدة P95)، ومخطط النسب المئوية لزمن الاستجابة (P50 وP95 وP99)، ومعدل الطلبات بمرور الوقت، وتقسيمًا بحسب نقطة النهاية مجمّعًا حسب SpanName.
احفظ لوحة المعلومات هذه أولًا حتى تتمكن من تحديدها كهدف في الخطوة التالية.
أنشئ قائمة الخدمات
على لوحة معلومات نظرة عامة، أضف بطاقة Table على مصدر التتبعات لديك مجمّعة حسب ServiceName. أضف إليها أعمدة RED التي تقيّم كل خدمة، بحيث تكون كل واحدة منها سلسلة باسم مستعار:
Requests: عدد spans (المعدل).Errors: عدد spans ذات حالة خطأ.P95 Duration: النسبة المئوية الخامسة والتسعون منDuration. اضبط تنسيق الأرقام في العمود على مدة بحيث تُعرض مثل288ms، لا كقيمة خام بالنانوثانية.
رتّب حسب Requests ترتيبًا تنازليًا بحيث تظهر أكثر الخدمات نشاطًا في الأعلى. هذا الجدول هو الفهرس: صف واحد لكل خدمة، مع تقييمها وفق RED.

اربط إجراء النقر على الصف
في جدول الحصر، افتح Row Click Action، وحدد Dashboard، ثم اختر Service Detail من قائمة لوحات المعلومات. يؤدي اختيار لوحة المعلومات مباشرةً إلى تثبيتها حسب المعرّف ID. ويستمر الرابط في العمل إذا أُعيدت تسمية لوحة المعلومات لاحقًا، كما يظل صالحًا عند تصدير لوحة المعلومات واستيرادها. (اترك خيار Template للحالات التي تريد فيها اختيار لوحة معلومات مختلفة لكل صف؛ انظر إعداد إجراء للنقر على الصف.)
ولأن Service Detail يعرّف عامل تصفية مخصصًا باسم ServiceName، فإن الدرج يملأ مسبقًا عامل تصفية فارغًا لهذا التعبير. املأ القالب الخاص به:
- Expression:
ServiceName(معبأ بالفعل) - Template:
{{ServiceName}}
انقر Apply ثم احفظ. تنتقل الآن خدمة الصف الذي نُقر عليه إلى عامل التصفية ServiceName في لوحة المعلومات.
انقر على صف
يكشف تمرير المؤشر فوق صف عن رابط على الحافة اليمنى للجدول، مع تلميح يصف الإجراء (Open dashboard "Service Detail"). ويؤدي النقر على الصف إلى فتح لوحة معلومات Service Detail مع ضبط عامل التصفية Service على القيمة التي نُقر عليها، بحيث يُعاد ضبط نطاق كل بطاقة (مؤشرات RED الأساسية، والنسب المئوية لزمن الاستجابة، والتقسيم بحسب نقطة النهاية) على تلك الخدمة وحدها بنقرة واحدة.

الانتقال من خدمة إلى التتبعات الخاصة بها
أحيانًا لا تحتاج إلى عرض تجميعي آخر؛ بل تريد الأحداث الخام نفسها. يوجّه إجراء Search النقرة إلى صفحة Search بدلًا من لوحة معلومات، فيفتح السجلات أو التتبعات المرتبطة بذلك الصف بعد تصفيتها عليه مسبقًا.
انطلاقًا من جدول قائمة الخدمات نفسه، وجّه النقر على الصف إلى التتبعات نفسها بدلًا من لوحة المعلومات التفصيلية.
وجّه النقر على الصف إلى Search
في جدول الحصر، افتح Row Click Action واختر Search. اختر مصدر التتبعات لديك (لا تظهر إلا مصادر السجلات والتتبعات). أضف عامل تصفية واحدًا:
- Expression:
ServiceName - Template:
{{ServiceName}}
انقر Apply ثم احفظ.
انقر على صف
يؤدي النقر على صف خدمة الآن إلى فتح صفحة Search لهذا المصدر الخاص بالتتبعات، مع تصفيتها إلى ServiceName = <service>، بحيث تصل إلى spans الخاصة بتلك الخدمة فقط ضمن النطاق الزمني نفسه.

وينجح النمط نفسه مع أي فهرس للعناصر. اجمع الجدول حسب عملية (SpanName) أو حسب attribute لنقطة نهاية بدلًا من ServiceName، ثم استخدم قالب عامل التصفية من ذلك العمود، وعندها يفتح كل نقر على صف الأحداث الخاصة بتلك العملية أو نقطة النهاية فقط. للاطلاع على group-by على attribute من نوع map، راجع ملاحظة alias ضمن Validation and limitations.
إعداد إجراء النقر على الصف
تُضبط إجراءات النقر على الصف من بطاقة الجدول نفسها؛ ولا توجد لها صفحة منفصلة. أضف بطاقة أو حرّرها، واضبط نوع التصور فيها على Table. عندها يظهر زر Row Click Action في شريط أدوات المحرر بجانب Display Settings. لا يظهر هذا الزر إلا لبطاقات الجدول، ويعكس عنوانه الإجراء الحالي: Row Click Action: Default أو Row Click Action: Search أو Row Click Action: Dashboard. انقر عليه لفتح الدرج.

يوفّر الدرج ثلاثة إجراءات:
- Default: السلوك المضمّن. يؤدي النقر على صف إلى فتح صفحة Search، مع تصفيتها وفق قيم أعمدة group-by في الصف والنطاق الزمني المحدد. وهذا ما يحدث عند عدم ضبط إجراء مخصص.
- Search: يرسل النقر إلى صفحة Search لمصدر تختاره.
- Dashboard: يرسل النقر إلى لوحة معلومات أخرى يملكها فريقك.
بالنسبة إلى Search وDashboard، تختار الوجهة التي سينتقل إليها النقر وتُعدّ القوالب الخاصة بعوامل التصفية التي ستُنقل معه:
- Destination: اختر مصدرًا أو لوحة معلومات محددة، أو اختر Template وأدخل قالب Handlebars يُطابَق بالاسم مع مصدر أو لوحة معلومات متاحة. يؤدّي اختيار هدف محدد إلى تثبيته بالمعرّف. ويُفضَّل ذلك عند استخدام وجهة ثابتة واحدة، إذ يظل صالحًا بعد إعادة التسمية وتصدير لوحة المعلومات واستيرادها، كما يملأ مسبقًا — في حالة لوحة المعلومات — عوامل التصفية المعلنة في الوجهة. استخدم Template عندما ينبغي أن تختلف الوجهة حسب الصف، بالإشارة إلى عمود من الصف لاختيارها (مثل
Errors-{{ServiceName}}). - Filters: انقر Add filter وقدّم Expression (عمودًا أو تعبيرًا في الوجهة، مثل
ServiceName) وTemplate لقيمته (مثل{{ServiceName}}). تشير القوالب إلى أعمدة الصف المنقور باستخدام{{columnName}}(راجع الملاحظة أدناه لمعرفة الأعمدة المتاحة). يُحوَّل كل عامل تصفية إلى شرطexpression IN (value)في الوجهة، وتُدمج عوامل التصفية التي تشترك في التعبير نفسه. وعندما تكون الوجهة لوحة معلومات، يملأ الدرج مسبقًا عامل تصفية فارغًا واحدًا لكل عامل تصفية كانت لوحة المعلومات تلك قد أعلنته بالفعل، بحيث لا يتبقى عليك سوى تعبئة القوالب. - WHERE (اختياري): قالب Handlebars يُعرَض داخل عامل التصفية العام للوجهة، بالإضافة إلى شروط عوامل التصفية لكل عنصر أعلاه. اضبط لغة الاستعلام الخاصة به على SQL أو Lucene لكي تتمكن الوجهة من تفسيره. على سبيل المثال، يقيّد قالب SQL
ServiceName = '{{ServiceName}}'الوجهة بخدمة الصف المنقور.
انقر Apply للتحقق من صحة القوالب (ويبلّغ ClickStack عن أي قالب ذي صياغة غير صالحة)، ثم احفظ لوحة المعلومات للاحتفاظ بالإجراء.
كيفية حلّ الوجهة وعوامل التصفية
عندما ينقر مستخدم بصلاحية Viewer على صف، يحدِّد ClickStack الإجراء استنادًا إلى ذلك الصف:
- الوجهة. يؤدي اختيار source أو dashboard معيَّنَين إلى تثبيتهما بحسب المعرّف. أمّا هدف Template فيُعرَض استنادًا إلى الصف الذي تم النقر عليه، ثم تُجرى مطابقته بالاسم مع مصادر فريقك أو لوحات المعلومات لديه. ويجب أن يكون الاسم فريدًا حتى يمكن حلّه: فإذا اشترك مصدران أو لوحتا معلومات في الاسم المعروض نفسه، فلن يتمكّن الرابط من الحل إلى أحدهما. كما يفشل الحل أيضًا إذا كان الاسم المعروض فارغًا أو إذا لم توجد له أي مطابقة.
- عوامل التصفية. يُعرَض كل قالب تصفية استنادًا إلى الصف، ثم يتحوّل إلى شرط
expression IN (value)في الوجهة. يفتح إجراءSearchالمسار/searchضمن نطاق المصدر المختار، بينما يفتح إجراءDashboardلوحة المعلومات تلك. وفي كلتا الحالتين، يُنقَل النطاق الزمني للصف الذي تم النقر عليه.
التحقّق والقيود
- بطاقات الجدول فقط. يظهر زر إجراء النقر على الصف في بطاقات الجدول فقط، سواء في جدول أداة إنشاء المخططات أو جدول مستند إلى SQL. أما أنواع البطاقات الأخرى، فلا تتضمن إجراءً للنقر على الصف.
- يجب أن تكون أهداف Search مصادر سجلات أو تتبّع. لا تُعرض مصادر المقاييس والجلسات، إذ لا يمكن عرضها في صفحة Search.
- يجب أن تكون أسماء القوالب فريدة. يُحدَّد هدف القالب بالاسم، لذلك لا يمكن استخدام مصدرين أو لوحتي معلومات بالاسم نفسه كهدف للقالب.
- تحتاج أهداف لوحة المعلومات إلى مرشّح مُعلن مطابق لكي تسري القيمة المنقولة (راجع الملاحظة أعلاه).
- تحتاج أعمدة group-by في التعبيرات إلى alias. يؤدّي إجراء group-by على تعبير، مثل سمة map
SpanAttributes['http.route']، إلى إنشاء عمود ناتج يكون اسمه هو التعبير الخام نفسه، وهو اسم غير عملي عند الإشارة إليه في قالب. امنح العمود alias في أداة إنشاء المخططات: أضفAS <alias>بعد التعبير في حقل الإدخال Group By (على سبيل المثالSpanAttributes['http.route'] AS Route)، ثم استخدم{{Route}}في القالب. وبالمثل، تأخذ السلاسل المجمّعة alias من حقل Alias الخاص بها. أما group-by على column عادي مثلServiceName، فلديه اسم واضح أصلًا ولا يحتاج إلى alias.