• การวิเคราะห์ปัญหา
  • บริการคลาวด์
  • เหตุการณ์

การวิเคราะห์หลังเหตุการณ์: เกตเวย์ไม่ดี

รายงานเหตุการณ์สำหรับการหยุดชะงักของบริการ Logto ในวันที่ 2024-01-11 เนื่องจากความล้มเหลวในการต่ออายุโดเมน

Gao
Gao
Founder

สรุป

ในวันที่ 2024-01-11 บริการของ Logto ประสบปัญหาการหยุดชะงักของบริการโดยมีข้อผิดพลาด 502 Bad Gateway จำนวนมาก

  • เวลาเริ่มต้น: ประมาณ 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 Bad Gateway เมื่อเข้าถึงบริการยืนยันตัวตนของ 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 admin tenant ที่ผูกกับโดเมน auth.logto.io และไม่ได้รับผลกระทบจากการหมดอายุ

นอกจากบริการยืนยันตัวตนแล้ว เรายังมีบริการคลาวด์ที่จัดการกับ Logto tenants และให้บริการ Logto Cloud Console (แอปหน้าฟร้อนต์)

เมื่อผู้ใช้ใช้งาน Cloud Console แอปจะไม่เรียกใช้บริการยืนยันตัวตนโดยตรง แต่จะเรียกใช้บริการคลาวด์สำหรับการจัดการทั้งหมด

เพื่อให้สอดคล้องกับ Logto Management API เราได้ออกแบบปลายทาง "Management API proxy" เพื่อส่งต่อคำขอไปยังบริการยืนยันตัวตน กระบวนการทั้งหมดมีลักษณะดังนี้:

เนื่องจากโดเมน *.logto.app มีปัญหาความไม่ตรงกันของใบรับรอง บริการคลาวด์ (Node.js) ปฏิเสธคำร้องและโยนข้อผิดพลาดออกมา

ปกติแล้วข้อผิดพลาดในการขอจะถูกจับเพื่อป้องกันไม่ให้บริการทั้งระบบล่ม อย่างไรก็ตาม เนื่องจากข้อผิดพลาดถูกแพร่กระจายมาจากโมดูลพร็อกซี ท่ามกลางตรรกะการจัดการข้อผิดพลาดที่มีอยู่จึงไม่สามารถจับได้ ทำให้บริการล่ม

แม้ว่าแต่ละบริการของ Logto จะมีอย่างน้อยสามเครื่องสำรอง ทุกเครื่องเกิดการล่มได้ง่ายจากข้อผิดพลาดที่เกิดขึ้นในแทบทุกคำขอจาก Cloud Console ใช้เวลาให้กลไกการกู้คืนอัตโนมัติเริ่มทำงาน ทำให้บริการไม่สามารถใช้งานได้สักระยะ

นี่คือเหตุผลที่ผู้ใช้เห็น 502 Bad Gateway เมื่อ Cloud service กลับมาใช้งานได้ คำขอใหม่และคำขอ retry ของ Cloud Console จะไหลเข้ามา และทำให้วงจรการล่มดำเนินต่อไป

เมื่อบริการคลาวด์ดาวน์ มันจะส่งผลกระทบต่อบริการยืนยันตัวตนสำหรับปลายทางบางอย่าง ส่วนมากคือ /api/.well-known/sign-in-exp ซึ่งปลายทางนี้ใช้ดึงการกำหนดค่า sign-in experience ซึ่งรวมถึงข้อมูลตัวเชื่อมต่อที่ต้องดึงจากบริการคลาวด์

การแก้ไข

  • ต่ออายุโดเมนด้วยตนเอง

บทเรียนที่ได้รับ

  • ตั้งค่าการตรวจสอบการหมดอายุของโดเมนหรือซื้อให้นานขึ้นเสมอ
  • คำนึงถึงความแตกต่างของโซนเวลาที่อาจทำให้การตอบสนองเหตุการณ์ล่าช้า
  • ตรวจสอบให้ครอบคลุมทุกโดเมน
  • ใช้ความระมัดระวังเมื่อทำงานกับโมดูลที่สามารถโยนข้อผิดพลาดให้แน่ใจว่าปัญหาสามารถถูกจับและจัดการได้อย่างเหมาะสม

มาตรการแก้ไขและป้องกัน

  • ✅ เพิ่มการตรวจสอบรายเดือนสำหรับการหมดอายุของโดเมนไม่ว่าจะตั้งค่าอัตโนมัติหรือไม่
  • ✅ เพิ่มการตรวจสอบสำหรับ logto.app
  • ✅ ปรับปรุงตรรกะการจัดการข้อผิดพลาดของบริการคลาวด์ให้สามารถจับและจัดการข้อผิดพลาดพร็อกซีได้อย่างเหมาะสม
  • ✅ ใช้การแจ้งเตือนที่แรงขึ้นที่สามารถปลุกทีมสำหรับเหตุการณ์ต่าง ๆ ก่อนที่จะมีทีม SRE ที่ครอบคลุมทุกโซนเวลา