العربية
  • مراجعة الحادثة
  • خدمة السحابة
  • حادثة

مراجعة الحادثة: بوابة سيئة

تقرير حادثة لانقطاع خدمة Logto في 2024-01-11 بسبب فشل تجديد النطاق.

Gao
Gao
Founder

الملخص

في 2024-01-11، تعرضت خدمات Logto لانقطاع الخدمة مع العديد من أخطاء بوابة 502 سيئة.

  • وقت البدء: حوالي 2024-01-11 الساعة 15:28 UTC
  • وقت الحل: حوالي 2024-01-12 الساعة 00:49 UTC
  • المدة: حوالي 9 ساعات
  • الخدمات المتأثرة: خدمة التوثيق Logto، خدمة Logto Cloud
  • مستوى التأثير: حرج
  • السبب الجذري: انتهت صلاحية نطاق logto.app وفشل تجديد النطاق.

الخط الزمني

  • 2024-01-11 15:28 UTC بلغ المستخدمون عن خطأ بوابة 502 سيئة عند الوصول إلى خدمة التوثيق Logto.
  • 2024-01-11 15:42 UTC المزيد من المستخدمين يبلغون عن المشكلة ذاتها.
  • 2024-01-11 15:50 UTC يبدأ أعضاء فريقنا في التحقيق في المشكلة وبدؤوا في إجراء المكالمات الهاتفية لأعضاء الفريق الآخرين. نظرًا لأن الوقت كان متأخرًا في الليل لبعض أعضاء الفريق، لم تكن المكالمات الهاتفية العادية قوية بما فيه الكفاية لإيقاظهم.
  • 2024-01-12 23:54 UTC اكتشفنا أن خدمة السحابة ترسل طلبات إلى خدمة التوثيق، ولكن فشل الطلب بسبب خطأ ERR_TLS_CERT_ALTNAME_INVALID.
  • 2024-01-12 00:36 UTC قمنا بمسح ذاكرة التخزين المؤقت لـ DNS لنرى إذا كان ذلك يساعد. ولم يفعل.
  • 2024-01-12 00:38 UTC أعدنا إصدار شهادات TLS لنرى إذا كان ذلك يساعد. ولم يفعل.
  • 2024-01-12 00:45 UTC لاحظنا أن نطاق logto.app قد يكون منتهي الصلاحية. قمنا بفحص المسجل ووجدنا أنه لم يتم تجديده بنجاح وكان النطاق منتهي الصلاحية.
  • 2024-01-12 00:49 UTC اكتمل تجديد النطاق. تستعيد الخدمات وضعها الطبيعي تدريجيًا.

تحليل الحادثة

ما الذي حدث؟

عادة ما يتم تجديد نطاقاتنا تلقائيًا من خلال المسجل الخاص بنا. ومع ذلك، في هذه الحالة، فشلت عملية التجديد بسبب احتمالية وجود خلل في الإعدادات. ونتيجة لذلك، انتهت صلاحية نطاق logto.app وتم تحديث سجلات DNS للإشارة إلى صفحة الوقوف الخاصة بالمسجل.

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

بالإضافة إلى خدمة التوثيق، لدينا أيضًا خدمة السحابة التي تنظم مستأجري Logto وتخدم واجهة Logto Cloud Console (تطبيق أمامي).

عندما يقوم المستخدم بتشغيل Cloud Console، فإن التطبيق لا يقوم بالدعوة مباشرة إلى خدمة التوثيق؛ بل يقوم بالاتصال بخدمة السحابة لجميع عمليات الإدارة.

لتتماشى مع API إدارة Logto، صممنا نقطة نهاية "وكيل API الإدارة" لتولي الطلبات إلى خدمة التوثيق. الموجة الكاملة تبدو هكذا:

بما أن نطاق *.logto.app يعاني من مشكلة عدم تطابق الشهادات، فإن خدمة السحابة (Node.js) ترفض الطلب وتُلقي خطأ.

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

على الرغم من أن كل خدمة Logto لديها على الأقل ثلاث نسخ، إلا أن جميع النسخ تعطل بسهولة نظرًا لحدوث الخطأ في كل طلب تقريبًا من Cloud Console. يستغرق الأمر وقتًا حتى تدخل آلية الاسترداد التلقائي حيز التنفيذ، مما يتسبب في عدم توفر الخدمة لفترة.

هذا هو السبب في أن المستخدمين يرون أخطاء بوابة سيئة 502 (جميع النسخ تعطل). بمجرد استعادة خدمة السحابة، تأتي الطلبات الجديدة وطلبات Cloud Console المحاولة مرة أخرى، وتستمر دورة التعطل.

عندما تكون خدمة السحابة معطلة، يؤثر ذلك أيضًا على خدمة التوثيق لنقاط نهاية معينة، معظمها /api/.well-known/sign-in-exp. تُستخدم نقطة النهاية هذه لجلب تكوين تجربة تسجيل الدخول الذي يتضمن معلومات الموصل التي تحتاج إلى استردادها من خدمة السحابة.

الحل

  • تجديد النطاق يدويًا.

الدروس المستفادة

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

إجراءات تصحيحية ووقائية

  • ✅ أضف مراقبة شهرية لانتهاء صلاحية النطاق بغض النظر عن تمكين التجديد التلقائي أم لا.
  • ✅ أضف مراقبة لـ logto.app.
  • ✅ قم بتحديث منطق معالجة أخطاء خدمة السحابة لالتقاط ومعالجة أخطاء الوكيل بشكل صحيح.
  • ✅ تنفيذ تنبيهات أقوى يمكنها إيقاظ الفريق للحوادث قبل الحصول على فريق SRE يشمل كافة المناطق الزمنية.