503 Service 無法使用 - 後端伺服器

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

影片

請觀看下列影片,進一步瞭解如何解決 503 服務無法使用錯誤。

影片 說明
後端伺服器傳回「503 Service Unavailable」錯誤 瞭解以下內容:
  • Apigee Edge 中的「503 Service Unavailable」錯誤簡介
  • 排解及解決後端伺服器即時傳回的 503 Service Unavailable 錯誤

問題

用戶端應用程式在 API Proxy 呼叫後,收到 HTTP 回應狀態 503 和「Service Unavailable」訊息。

錯誤訊息

您可能會看到下列其中一則錯誤訊息:

HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable: Back-end server is at capacity

您也可能會在 HTTP 回應中看到類似下列內容的錯誤訊息:

The server is temporarily unable to service your request due to
maintenance downtime or capacity problems. Please try again later.

注意:上述回應代碼和錯誤訊息僅為示例。 在某些情況下,您可能只會收到錯誤回應代碼,而不會收到任何錯誤訊息。 錯誤回應代碼和錯誤訊息的格式和內容,可能會因後端伺服器實作方式而異。

原因

HTTP 狀態碼 503 表示伺服器目前無法處理傳入的要求。通常是因為伺服器過於忙碌,或是暫時停止運作進行維護。

503 Service Unavailable 回應的可能原因如下:

原因 說明 誰可以執行疑難排解步驟
伺服器超載 後端伺服器過載或超出容量,無法處理任何新的傳入用戶端要求。 Edge 公有和私有雲使用者
伺服器維護中 後端伺服器可能暫時處於維護狀態。 Edge 公有和私有雲使用者

原因:伺服器超載/伺服器維護中

在 Apigee Edge 中,後端伺服器可能會在下列任一情況下傳回 503 服務無法使用錯誤:

  • 後端伺服器負載過重/忙碌,無法處理任何新要求。
  • 後端伺服器正在維護,暫時無法使用。

診斷

如要診斷錯誤,可以使用下列任三種方法:

  • 追蹤工具
  • NGINX 存取記錄
  • 直接呼叫後端伺服器

點選下方分頁標籤,即可瞭解各個方法。

追蹤工具

  1. 啟用追蹤工作階段,然後發出 API 呼叫來重現問題 - 503 服務無法使用。
  2. 選取其中一個失敗的要求,然後檢查追蹤記錄。
  3. 瀏覽追蹤記錄的各個階段,找出發生失敗的位置。
  4. 如果發現目標伺服器傳回 503 錯誤做為回應,503 錯誤的原因就是目標伺服器。

    以下是追蹤記錄的螢幕截圖範例,顯示目標伺服器傳回的 503 Service Unavailable 回應:

  5. 按一下「Response received from target server」(從目標伺服器收到回應) 階段,然後查看「Response Headers」(回應標頭) 和「Response Content」(回應內容) 區段,確認是否有任何實用資訊:
    • 回應標頭可能包含伺服器標頭,指出錯誤回應的傳送來源。
    • 「回應內容」可能包含目標伺服器傳送 503 回應代碼的其他相關資訊。
  6. 請按照下列步驟,在追蹤記錄的 AX (記錄的 Analytics 資料) 階段中,檢查 X-Apigee-fault-sourceX-Apigee-fault-code 的值,確認 503 錯誤來自目標伺服器:
    1. 點選「AX」(記錄的 Analytics 資料) 階段,如下方螢幕截圖所示:
    2. 向下捲動「階段詳細資料」至「回應標頭」部分,然後判斷 X-Apigee-fault-codeX-Apigee-fault-source 的值,如下所示:
    3. 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值與下表顯示的值相符,則可確認 503 錯誤來自目標伺服器:
      回應標頭
      X-Apigee-fault-source 目標
      X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  7. 檢查您是否使用 Proxy 鏈結,也就是目標伺服器/目標端點是否在 Apigee 中叫用另一個 Proxy。如要判斷是否為這種情況,請按照下列步驟操作:
    1. 返回「Request sent to target server」(要求已傳送至目標伺服器) 階段,然後按一下「Show Curl」(顯示 Curl) 按鈕,判斷目標伺服器主機別名。
    2. 如果目標伺服器主機別名指向虛擬主機別名,則為 Proxy 鏈結。在這種情況下,您需要針對鏈結的 Proxy 重複上述所有步驟,直到找出實際導致 503 服務無法使用錯誤的原因為止。在這些情況下,其他鏈結的 Proxy 也可能在其他階段發生 503 服務無法使用的錯誤,您可以使用這份劇本診斷問題。
    3. 如果目標伺服器主機別名指向後端伺服器,請前往「解決方法」。

NGINX 存取記錄

您也可以參閱 NGINX 存取記錄,判斷後端伺服器是否傳送 503 狀態碼。如果問題過去曾發生,或是問題間歇性發生,且您無法在使用者介面中擷取追蹤記錄,這個方法就特別實用。請按照下列步驟,從 NGINX 存取記錄檔判斷這項資訊:

  1. 檢查 NGINX 存取記錄。
    /opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
  2. 在特定時間內搜尋特定 API Proxy 的任何 503 錯誤 (如果問題發生在過去),或搜尋仍因 503 錯誤而失敗的任何要求。
  3. 如有任何 503 錯誤,請檢查錯誤是否來自後端伺服器。 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值與下表顯示的值相符,則 503 錯誤來自後端伺服器:
    回應標頭
    X-Apigee-fault-source 目標
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode

    以下是顯示目標伺服器導致 503 錯誤的範例項目:

  4. 檢查特定 API Proxy,確認您使用的是Proxy 鏈結,也就是如果目標伺服器/目標端點未在 Apigee 中叫用其他 Proxy,如果您使用 Proxy 鏈結,請針對鏈結的 Proxy 重複上述所有步驟,直到找出導致 503 服務無法使用錯誤的實際原因為止。在這些情況下,其他階段的其他鏈結代理伺服器也可能發生 503 服務無法使用的情況,您可以使用這本劇本診斷問題。
  5. 如果確認未使用 Proxy 鏈結,且 503 錯誤來自後端伺服器,請前往「解決方法」。

呼叫後端伺服器

您可以直接呼叫後端伺服器,確認您收到的 503 Service Unavailable 回應與透過 Apigee Edge 發出要求時收到的相同。

  1. 確認您已備妥所有必要標頭、查詢參數,以及需要做為要求的一部分傳遞至後端伺服器的任何憑證。
  2. 如果後端服務可公開存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。
  3. 如果後端伺服器只能從訊息處理器存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。
  4. 確認後端服務確實傳回 503 服務無法使用錯誤。

解析度

如果確定 503 錯誤來自後端伺服器,請採取下列行動來解決問題:

  • 如果問題是因為後端伺服器正在維護而停機所致,您可以在維護期結束後將後端伺服器上線。
  • 如果問題是後端伺服器超載所致,請修正問題 (如果您有權存取後端伺服器)。否則,您可能需要與後端伺服器團隊合作修正問題。

使用 API 監控功能診斷問題

API 監控功能可協助您快速找出問題領域,診斷錯誤、效能和延遲問題,以及問題來源 (例如開發人員應用程式、API Proxy、後端目標或 API 平台)。

逐步瞭解範例情境,瞭解如何使用 API 監控功能排解 API 的 5xx 問題。舉例來說,您可能想設定快訊,在 messaging.adaptors.http.flow.ErrorResponseCode 錯誤數超過特定門檻時收到通知。

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Apigee 支援團隊聯絡。

如果您是公有雲使用者,請提供下列資訊:

  • 機構名稱
  • 環境名稱
  • API Proxy 名稱
  • 重現 503 錯誤的完整 curl 指令
  • 包含 503 Service Unavailable 錯誤要求的追蹤記錄檔
  • 如果目前沒有發生 503 錯誤,請提供過去發生 503 錯誤的時間範圍和時區資訊。

如果您是私有雲使用者,請提供下列資訊:

  • 失敗要求顯示的完整錯誤訊息。
  • 您觀察到 503 錯誤的機構、環境名稱和 API Proxy 名稱。
  • API Proxy 套裝組合。
  • 包含要求 (發生 503 服務無法使用錯誤) 的追蹤記錄檔。
  • NGINX 存取記錄檔。
    /opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
  • 訊息處理器記錄。
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 發生 503 錯誤的時間範圍,以及時區資訊。