لماذا يفشل فحص صحة الحاوية بينما يظل التطبيق يفتح؟

إيفا وونغ هي كاتبة تقنية و ومهندسة هاوية في ZimaSpace. مهووسة بالتكنولوجيا مدى الحياة ولديها شغف بالمختبرات المنزلية والبرمجيات مفتوحة المصدر، تتخصص في تبسيط المفاهيم التقنية المعقدة إلى أدلة عملية وسهلة الفهم. تؤمن إيفا بأن الاستضافة الذاتية يجب أن تكون ممتعة وليست مخيفة. من خلال دروسها، تمكّن المجتمع من تبسيط إعدادات الأجهزة، بدءًا من بناء أول نظام تخزين شبكي NAS وحتى إتقان حاويات Docker.

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

على خادم منزلي، قد يفتح التطبيق عبر وكيل عكسي، بينما يشغّل Docker أمر فحص الحالة داخل الحاوي باستخدام localhost أو أداة مفقودة أو منفذ خاطئ أو تبعية غير متاحة مؤقتًا. ابدأ بإعادة تنفيذ الفحص نفسه داخل الحاوي، ثم قارن هدفه ونتيجته المتوقعة بمسار المستخدم الفعلي قبل زيادة عدد المحاولات أو تعطيل فحص الحالة.

قارن ما يختبره المتصفح بما يختبره فحص الحالة

سجّل عنوان URL ومسار الشبكة اللذين يفتحان التطبيق بنجاح. لاحظ ما إذا كان المتصفح يصل إلى وكيل عكسي أو منفذ منشور على المضيف أو عنوان IP محلي أو الحاوي مباشرةً.

ينفّذ Docker الفحص المُعد داخل الحاوي، لذلك قد يختبر نقطة نهاية مختلفة عن تلك التي يستخدمها المتصفح. عرضت إحدى حالات مجتمع Docker فشل فحص الحالة لأن الصورة لم تتضمن أمر curl الذي يستخدمه الفحص، رغم أن عملية الخدمة نفسها كانت لا تزال قادرة على العمل.

إذا مرّ مسار المتصفح الناجح عبر وكيل أو منفذ آخر، فلا تعتبر هذه النتيجة دليلًا على صحة هدف الفحص الداخلي. دوّن المسارين وحدد أول مكوّن يختلف بينهما.

شغّل أمر فحص الحالة نفسه داخل الحاوي

انسخ أمر فحص الحالة حرفيًا، بما في ذلك صيغة الصَدَفة وعنوان URL والخيارات وبيانات الاعتماد ومتغيرات البيئة. نفّذه داخل الحاوي قيد التشغيل باستخدام المستخدم نفسه، وسجّل رمز الخروج والمخرجات.

قد يكون الحاوي مصنفًا على أنه غير سليم رغم وجود عملية قيد التشغيل، لأن حالة السلامة تعكس نتيجة الفحص، لا قدرة المستخدمين على تحميل صفحة واحدة. يميّز مسار Netdata التشخيصي بين فشل الفحص وفشل العملية قبل تغيير سلوك إعادة التشغيل.

إذا نجح الأمر يدويًا، فقارن مستخدم التنفيذ والصدفة ودليل العمل والبيئة والتوقيت الذي يستخدمه الفحص التلقائي. وإذا فشل يدويًا، فسيحدد الخطأ الآن الطبقة التالية التي يجب فحصها دون انتظار فترة فحص أخرى.

تحقق من أداة الفحص والصدفة وPATH والمستخدم

تأكد من وجود كل ملف تنفيذي في أمر فحص الحالة داخل الصورة الحالية، ومن إمكانية تشغيله بواسطة مستخدم الحاوي. قد تفتقر الصور المصغرة إلى curl أو wget أو bash أو أدوات DNS أو مخازن الشهادات.

تختلف فحوصات صيغة الصَدَفة عن فحوصات صيغة التنفيذ المباشر. إذ تتطلب علامات الاقتباس والأنابيب وتوسيع المتغيرات والأوامر المركبة صدفة متاحة، بينما يحتاج الأمر المباشر إلى المسار الكامل للملف التنفيذي عندما تكون قيمة PATH في بيئة فحص الحالة محدودة.

شغّل الأمر باستخدام مسار مطلق ومستخدم الخدمة المقصود. أصلح الصورة أو الفحص بدلًا من تثبيت الأدوات تفاعليًا، لأن التغيير اليدوي في الحاوي سيختفي بعد إعادة البناء التالية.

تحقق من العنوان والمنفذ والبروتوكول الداخلي

افحص مستمع التطبيق داخل الحاوي وقارنه بعنوان URL المستخدم في الفحص. لا يعني نشر منفذ مثل 8080:80 أن الخدمة تستمع إلى المنفذ 8080 داخل الحاوي.

ينبغي أن تختبر فحوصات الحالة حالة التطبيق التي يتحكم فيها الحاوي. يوضح الدليل العملي من Dash0 أن الفحص قد يستدعي نقطة نهاية HTTP أو يفحص عملية، لكن يجب أن تعكس نقطة النهاية حالة الجاهزية الفعلية للحاوي، لا مسارًا متاحًا عبر وكيل خارجي فقط.

اختبر 127.0.0.1 وعنوان مستمع الحاوي واسم الخدمة، كلٌّ في الموضع المناسب. وإذا كان التطبيق يرتبط بمقبس Unix فقط أو بواجهة أخرى، فغيّر الفحص ليستخدم نقطة الدخول الداخلية الفعلية.

ميّز بين بطء بدء التشغيل والفشل الدائم

قِس المدة التي يحتاجها التطبيق أو ترحيل قاعدة البيانات أو تهيئة ذاكرة التخزين المؤقت أو تحميل النموذج قبل استجابة نقطة النهاية الصحيحة. قارن هذه المدة بقيم start_period وinterval وtimeout وretries.

قد يمنع Compose تشغيل الخدمات التابعة عندما تظل التبعية مصنفة على أنها غير سليمة، رغم أن تصبح جاهزة لاحقًا. أظهر تراجع مُبلغ عنه في Compose أن خدمة أصبحت سليمة بعد أن كان فشل التبعية قد أوقف المكدس، ما كشف عن نافذة بدء تشغيل لفحص الحالة ضيقة للغاية.

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

اجعل الفحص محدودًا وتحقق من التعافي

حدد ما إذا كان فحص الحالة يجب أن يمثل حيوية العملية أو جاهزية التطبيق المحلي أو سلسلة تبعيات أعمق. لا تجعل حاويًا محليًا غير سليم لمجرد أن واجهة برمجة تطبيقات خارجية اختيارية غير متاحة.

يُعد دليل ZimaSpace حول العثور على أول تبعية فاشلة الخطوة التالية عندما يتعذر على التطبيق أن يصبح جاهزًا دون قاعدة بيانات أو ذاكرة تخزين مؤقت أو خدمة شبكة.

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

الدعم والنصائح

المزيد للقراءة

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.