繁體中文(香港)
  • 事後報告
  • 雲端服務
  • 事故

事後報告:Bad Gateway

2024年1月11日 Logto 服務中斷的事故報告,原因是域名續期失敗。

Gao
Gao
Founder

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
Product screenshot

摘要

在 2024 年 1 月 11 日,Logto 服務經歷了服務中斷,出現許多 502 Bad Gateway 錯誤。

  • 開始時間: 大約在 2024 年 1 月 11 日 15:28 UTC
  • 解決時間: 大約在 2024 年 1 月 12 日 00:49 UTC
  • 持續時間: 大約 9 小時
  • 受影響的服務: Logto 驗證服務,Logto 雲端服務
  • 影響程度: 嚴重
  • 根本原因: logto.app 域名到期,續期未能完成。

時間線

  • 2024 年 1 月 11 日 15:28 UTC 使用者報告在訪問 Logto 驗證服務時遇到 502 Bad Gateway 錯誤。
  • 2024 年 1 月 11 日 15:42 UTC 更多使用者報告相同問題。
  • 2024 年 1 月 11 日 15:50 UTC 我們的團隊成員開始調查問題,並致電其他團隊成員。由於對部分成員已經是深夜,普通電話未能強烈地喚醒他們。
  • 2024 年 1 月 12 日 23:54 UTC 我們發現雲端服務正在向驗證服務發送請求,但由於出現 ERR_TLS_CERT_ALTNAME_INVALID 錯誤,請求失敗。
  • 2024 年 1 月 12 日 00:36 UTC 我們清除了 DNS 緩存,希望有幫助,但沒有。
  • 2024 年 1 月 12 日 00:38 UTC 我們重新簽發了 TLS 證書,希望有幫助,但仍無效。
  • 2024 年 1 月 12 日 00:45 UTC 我們注意到 logto.app 域名可能已經到期。檢查域名註冊商後發現未成功續期,域名已過期。
  • 2024 年 1 月 12 日 00:49 UTC 域名續期完成。服務逐漸恢復正常。

事件分析

發生了什麼?

我們的域名通常通過域名註冊商自動續期。然而,此次續期過程因潛在的配置錯誤而失敗。因此,logto.app 域名過期,DNS 記錄被更新指向註冊商的停車頁面。

目前,驗證服務仍在運行,但大多數請求無法到達。惟一例外的是綁定到 auth.logto.io 域名的 Logto 管理租戶,不受過期影響。

除了驗證服務,我們還有一個協調 Logto 租戶和提供 Logto 雲端控制台(前端應用程式)的雲端服務。

當使用者操作雲端控制台時,應用程式不直接調用驗證服務,而是調用雲端服務進行所有管理操作。

為了對應 Logto 管理 API,我們設計了一個 "管理 API 代理" 端點來轉發請求到驗證服務。整個流程如下:

由於 *.logto.app 域名存在證書不匹配問題,雲端服務(Node.js)拒絕請求並拋出錯誤。

通常情況下,請求錯誤會被捕獲以防止整個服務崩潰。然而,由於錯誤是從代理模塊傳遞出來的,現有的錯誤處理邏輯未能捕獲,導致服務崩潰。

儘管每個 Logto 服務至少有三個副本,所有副本因雲端控制台的幾乎每個請求都會發生錯誤而輕易崩潰。自動恢復機制需要一些時間來生效,導致服務在一段時間內無法使用。

這就是為什麼使用者看到 502 Bad Gateway 錯誤的原因(所有副本崩潰)。一旦雲端服務恢復,上新的及重試的雲端控制台請求進來,崩潰循環繼續。

當雲端服務中斷時,它也影響驗證服務的某些端點,主要是 /api/.well-known/sign-in-exp。這個端點用於獲取包含連接器信息的登錄體驗配置,需要從雲端服務獲取。

解決方案

  • 手動續期域名。

經驗教訓

  • 始終設置域名到期監控或長時間購買。
  • 注意時區差異可能導致事件響應延遲。
  • 確保監控涵蓋所有域名。
  • 在與可拋出模塊交互時需謹慎,確保能捕獲並妥善處理錯誤。

糾正和預防措施

  • ✅ 添加每月域名到期的監控,無論是否啟用自動續期。
  • ✅ 添加對 logto.app 的監控。
  • ✅ 更新雲端服務的錯誤處理邏輯,妥善捕獲和處理代理錯誤。
  • ✅ 實施更強的警報機制,以在有全時區覆蓋的 SRE 團隊出現之前喚醒團隊面對事故。