Skip to main content
تمنح جلسة الدعم ClickHouse وصولًا مؤقتًا لأغراض التشخيص عبر ClickHouse Connector. تغطي هذه الصفحة ماهية الجلسة، وكيفية تفعيلها وإيقافها، وما يمكن لمهندسي دعم ClickHouse فعله أثناءها، وكيفية تدقيقها.

ما هي جلسة الدعم

جلسة الدعم هي نافذة زمنية محددة المدة يقبل فيها مستكشف الأخطاء ومصلحها الأوامر من مهندسي دعم ClickHouse. أما خارج الجلسة فيرفض كل أمر، حتى مع بقاء اتصال WebSocket الصادر الخاص به قائماً. ولا يوجد أي مسار تنفيذ آخر، ولا تستطيع ClickHouse فتح جلسة نيابةً عنك. كما أن ClickHouse Cloud لا تتصل إطلاقاً ببيئتك من الخارج؛ فهي لا تتلقى سوى ما يرسله مستكشف الأخطاء ومصلحها عبر قناته الصادرة. تحكم الجلسات عمليات التشخيص فقط. أما أوامر دورة الحياة للخدمات في الوضع Managed فتنتقل عبر القناة المنفصلة الخاصة بالمنفّذ، وهي قناة لا تفتحها جلسة الدعم ولا تتحكم بها؛ راجع الخدمات المُدارة. يمكنك التحكم بالجلسات عبر واجهتين:
  • بوابة الجلسة (session gateway)، وهي واجهة برمجة تطبيقات مُوثَّقة الهوية ومدمجة في مستكشف الأخطاء ومصلحها، وتوفّر POST /v1/clctl/session/enable وPOST /v1/clctl/session/disable وGET /v1/clctl/session/status. ويتطلب كل استدعاء رمز هوية OIDC قصير الأجل يكون بريده الإلكتروني مُدرجاً في قائمة السماح الخاصة بالمشغّلين لديك.
  • ملف الجلسة المحلي في عمليات التثبيت على جهاز افتراضي يعمل بنظام Linux، ويُكتب على المضيف بصلاحيات الجذر.
يعتمد أسلوب نقل البوابة على الهدف. فبوابة الجهاز الافتراضي توفّر TLS موقّعة ذاتياً يثبّت كل مشغّل بصمتها. أما بوابة Kubernetes فتستمع محلياً داخل الـ pod عبر HTTP؛ ويمكنك الوصول إليها عبر kubectl port-forward (حيث ينتقل النفق عبر TLS الخاص بخادم API) أو عبر Ingress ينهي TLS بشهادة صادرة عن CA. وتختار وضعية الجلسة لديك، بما في ذلك قائمة السماح الخاصة بالمشغّلين، أثناء تنفيذ clicklink clctl init.

تمكين الجلسات وتعطيلها

تستمع البوابة على المنفذ 8443 في حاوية pod الخاصة بـ مستكشف الأخطاء ومصلحها. مع وجود وصول إلى العنقود، فصِل إليها عبر إعادة توجيه المنفذ:
بعد ذلك، في طرفية أخرى، فعّل جلسة:
تحقّق من حالتها أو أنهِها بالطريقة نفسها:
يجب أن تكون هوية OIDC الخاصة بالمستدعي ضمن قائمة السماح للمشغّل. يتلقى المستدعون غير المصادَق عليهم أو غير المدرجين استجابة 401 أو 403، وتسجّل البوابة المحاولة. للسماح للمشغّلين بالعمل دون بيانات اعتماد العنقود، أتِح البوابة عبر Ingress الاختياري الخاص بـ chart، والذي ينهي TLS باستخدام شهادة صادرة عن CA؛ راجع تهيئة.

انتهاء صلاحية الجلسة

تنتهي صلاحية الجلسات تلقائيًا. المدة الافتراضية هي 4 ساعات؛ ويقبل الأمر session enable --duration مدة تصل إلى 24 ساعة. عند انتهاء الصلاحية أو فور تشغيل session disable، تتوقف أداة مستكشف الأخطاء ومصلحها عن قبول الأوامر. يؤدي التعطيل إلى إلغاء الوصول فورًا: لا إعادة تشغيل، ولا تنسيق مع ClickHouse.

قائمة السماح بالمشغّلين

يُصرَّح بكل استدعاء للبوابة بناءً على قائمة سماح بعناوين البريد الإلكتروني للمشغّلين. وتستخدم المطابقة عنوان البريد الإلكتروني المثبت في رمز OIDC الذي تم التحقق من صحته، وليس أي قيمة يوفرها العميل.
  • Kubernetes: اضبط clctl.gateway.allowedOperators في طبقة values الخاصة بك. يُضمِّن المخطط القائمة في ConfigMap، لذا يؤدي تغيير values وتشغيل helm upgrade إلى تدوير قائمة السماح دون إعادة تشغيل pod.
  • Linux VM: توجد قائمة السماح في /etc/clicklink/allowed-operators.txt، ويكتبها clicklink clctl init باستخدام عناوين البريد الإلكتروني للمشغّلين التي توفرها.
وفي كلا الهدفين تعيد البوابة قراءة الملف عند الطلب التالي بعد مرور 30 ثانية على آخر قراءة. وتدخل التعديلات حيز التنفيذ دون إعادة تشغيل.

ما الذي يمكن للمشغّلين فعله أثناء الجلسة

ما دامت الجلسة نشطة، يمكن لمهندسي دعم ClickHouse تنفيذ نوعين من الأوامر. عبارات SQL للقراءة فقط تُنفَّذ على عناقيدك بصفة المستخدم pcm_troubleshooter، الذي تقتصر أذوناته على قائمة الجداول المسموح بها في الجلسة. كما يرفض مستكشف الأخطاء ومصلحها أي عبارة لا تبدأ بـ SELECT أو WITH أو SHOW أو DESCRIBE أو EXPLAIN. ويملك هذا المستخدم أذونات SELECT على مستوى كل جدول فقط، دون أي امتيازات كتابة أو DDL أو إدارة. تشمل قائمة السماح الافتراضية جداول system مثل system.parts وsystem.merges وsystem.replicas وsystem.metrics وsystem.settings. أما system.query_log وsystem.text_log فلا يمكن إضافتهما إليها: إذ يرفض برنامج خفي أي تهيئة تدرجهما، ومن ثم لا يُجهَّز أي إذن عليهما إطلاقًا. وتتضمن قائمة السماح الافتراضية system.processes، الذي يعرض عمود query فيه نص العبارات الجاري تنفيذها. فاحذفه من troubleshooter.allowedTables (طبقة Helm) أو troubleshooter.allowed_tables (ملف تهيئة الجهاز الافتراضي) إذا كان يجب ألا يظهر نص الاستعلامات الحيّة في أي جلسة. عروض Kubernetes للقراءة فقط هي get وlist وwatch على الحاويات (pods) وحالتها وسجلاتها، والخدمات، وconfigmaps، والأحداث، وPersistentVolumeClaims، وعمليات النشر، وstatefulsets، وreplicasets ضمن مساحات الأسماء الممنوحة. وتُربط حزم الوصول بحسابات خدمة Kubernetes (ServiceAccounts) في هدفَي التثبيت كليهما. وما لم تكن هناك حزمة مُجهَّزة، يرفض مستكشف الأخطاء ومصلحها أوامر kubectl رفضًا تامًا. ويجهّز المنفّذ أداة الجمع للخدمة المُدارة دون مستكشف الأخطاء ومصلحها؛ راجع جلسات الدعم للخدمة المُدارة. لا تتضمن قواعد RBAC الخاصة بمستكشف الأخطاء ومصلحها أي إذن exec أو delete أو patch، لذا لا يستطيع المشغّلون فتح shell داخل حاوياتك أو تغيير أي شيء عبر الجلسة. وتجد القائمة الكاملة للأذونات وقواعد RBAC في مرجع نموذج الامتيازات.

سجل التدقيق

يُضاف كل أمر يُنفَّذ خلال الجلسة إلى الملف /var/log/clicklink/troubleshoot-audit.log على هيئة كائن JSON واحد في كل سطر (NDJSON). وتُسجَّل الأوامر المحظورة أيضًا، مع ذكر السبب في blocked_by (مثل session inactive). أما submitted_by فهو معرّف المؤسسة على قناة الأوامر: أي معرّف مؤسستك أنت. ويُسجَّل اسم مهندس ClickHouse المعني في جانب ClickHouse Cloud، لا في هذا الملف. وفيما يلي مثال على إدخال خاص بأمر جلسة:
يحمل status نتيجة الأمر: completed أو error أو rejected. تُسجَّل استدعاءات بوابة بشكل منفصل. فكل استدعاء، بما في ذلك الاستدعاءات المرفوضة، يُصدر كسطر clctl.gateway مهيكل ضمن سجل مستكشف الأخطاء ومصلحها نفسه: journal على الجهاز الافتراضي، وسجل الحاوية على Kubernetes. ويحمل السطر submitted_by (البريد الإلكتروني المُوثَّق عبر الرمز الذي تم التحقق منه، وليس قيمة يوفرها العميل)، وcommand_type (clctl.session.enable أو clctl.session.disable أو clctl.session.status). كما يحمل reason (قيمة --reason المُمرَّرة عند التفعيل)، وremote_addr، وstatus. وتكون قيمة status إحدى التالي: ok أو unauthorized أو forbidden أو rate_limited أو bad_request أو conflict أو error، وبذلك يظهر الوصول المرفوض في السجل أيضًا. أما تغييرات الجلسة المحلية على الجهاز الافتراضي فليست إدخالات في سجل التدقيق. إذ يُسجَّل مستخدم المضيف الذي نفّذ الأمر في الحقل enabled_by ضمن /var/lib/clicklink/session.json، ويظهر عبر session status. على الجهاز الافتراضي، اقرأ سجل التدقيق باستخدام clicklink clctl troubleshoot audit tail. أما على Kubernetes فيوجد السجل داخل pod مستكشف الأخطاء ومصلحها، ولا تتضمن صورة الحاوية أي shell، لذا استدعِ قارئ الـ binary الخاص به عبر kubectl exec:
سجل التدقيق هو ملف عادي داخل بيئتك؛ يمكنك إرساله إلى نظام SIEM الخاص بك كما تفعل مع أي سجل مضيف أو حاوية آخر.

إخفاء المعلومات الحساسة

يُخفى كل ما يعيده مستكشف الأخطاء ومصلحها قبل أن يغادر بيئتك. تغطي الأنماط المضمّنة عناوين IPv4 وIPv6، ورموز Bearer، ومفاتيح وصول AWS، وعناوين البريد الإلكتروني، ورموز JWT، والمفاتيح الخاصة لـ SSH، وبيانات الاعتماد المضمّنة في سلاسل الاتصال. يمكنك توسيع هذه الأنماط أو تجاوزها في /etc/clicklink/redaction-patterns.yaml؛ ويستبدل الإدخال الذي يحمل الاسم نفسه لنمط مضمّن ذلك النمط. يرفض البرنامج الخفي بدء التشغيل إذا كان ملف الأنماط غير صالح، ويتحقق clicklink clctl preflight منه، لذا يفشل تهيئة إخفاء المعلومات الحساسة المعطّل بشكل واضح.
  • المعمارية: جميع الاتصالات التي ينشئها الموصل وتدفق البيانات المرتبط بالجلسات.
  • التهيئة: إعدادات البوابة وقائمة السماح وإخفاء المعلومات الحساسة.
  • الأسئلة الشائعة: أسئلة موجزة حول الإلغاء والتدقيق وخروج البيانات.