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

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

影片

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

影片 說明
503 Service Unavailable Error from Backend Server 瞭解下列資訊:
  • Apigee Edge 的 503 Service Unavailable 錯誤簡介
  • 排解後端伺服器無法即時提供的 503 服務問題

問題

用戶端應用程式會收到 HTTP 回應狀態 503,在 API Proxy 呼叫之後,系統會顯示 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 Public and Private Cloud 使用者
伺服器正在維護中 後端伺服器可能暫時無法使用。 邊緣公開與私有雲使用者

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

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

  • 後端伺服器超載/忙碌中,無法處理任何新要求。
  • 後端伺服器因維護而暫停使用。

診斷

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

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

如要瞭解各種方法,請點選下方分頁標籤。

追蹤工具

  1. 啟用追蹤工作階段,然後發出 API 呼叫來重現問題 - 503 Service Unavailable。
  2. 請選取其中一個失敗的要求,然後檢查追蹤記錄。
  3. 瀏覽追蹤記錄的各個階段,找出發生錯誤的位置。
  4. 如果您發現目標伺服器傳回了 503 錯誤,表示 503 錯誤為目標伺服器。

    以下是追蹤記錄範例,顯示目標伺服器收到的 503 Service Unavailable 回應:

  5. 按一下「收到的回應來自目標伺服器的回應」階段,然後查看「回應標頭和回應內容」部分,看看這些資訊是否提供任何實用資訊:
    • 回應標頭可能包含伺服器標頭,指出錯誤回應的傳送來源。
    • 「回應內容」可能包含目標伺服器傳送 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」按鈕,然後決定目標伺服器主機別名。
    2. 如果目標伺服器主機別名指向虛擬主機別名,就表示其為 Proxy 鏈結。在這種情況下,您必須針對鏈結 Proxy 重複執行上述所有步驟,直到找出導致 503 Service Unavailable 錯誤的實際原因。 在這類情況下,503 Service Unavailable (服務無法使用) 在其他階段也可能出現在其他鏈結的 Proxy 中,如有需要,也可以使用這份應對手冊進行診斷。
    3. 如果目標伺服器主機別名指向後端伺服器,請前往「Resolution」

NGINX 存取記錄檔

您也可以參考 NGINX 額外的記錄檔,判斷後端伺服器是否已傳送 503 狀態碼。如果問題過去發生,或是問題間歇性,導致您無法在 UI 中擷取追蹤記錄,這個方法就特別實用。請按照下列步驟,從 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 Service Unavailable 錯誤的原因為止。在這類情況下,其他階段的 Proxy 可能會發生 503 Service Unavailable 服務,您可以使用這份應對手冊進行診斷。
  5. 如果您確認並未使用 Proxy 鏈結,且 503 錯誤來自後端伺服器,請前往「Resolution」

呼叫後端伺服器

您可以直接呼叫後端伺服器,驗證透過 Apigee Edge 傳送要求時,收到的「 503 Service Unavailable」(服務無法使用) 回應相同。

  1. 確認您擁有所有必要標頭、查詢參數和憑證,在要求中必須傳遞至後端伺服器。
  2. 如果後端服務可公開存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。
  3. 如果只有訊息處理器可以存取後端伺服器,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。
  4. 確認後端服務確實傳回 503 Service Unavailable 錯誤。

解析度

如果您確定 503 錯誤來自後端伺服器,則可按照下列步驟解決問題:

  • 如果是因後端伺服器已關閉進行維護而引發問題,您可以在維護期間結束後讓後端伺服器上線。
  • 如果問題是因為後端伺服器超載所致,請在可以存取後端伺服器時修正問題。否則,您可能需要請後端伺服器團隊解決問題。

使用 API 監控功能診斷問題

API Monitoring 可讓您快速隔離問題區域,以診斷錯誤、效能與延遲問題及其來源 (例如開發人員應用程式、API Proxy、後端目標或 API 平台)。

逐步操作範例情境,示範如何使用 API Monitoring 排解 API 的 5xx 問題。例如,建議您設定快訊,讓系統在 message.adaptors.http.flow.ErrorResponseCode 錯誤數量超過特定門檻時通知您。

必須收集診斷資訊

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

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

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

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

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