您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
影片
請觀看以下影片,進一步瞭解如何解決 503 服務無法使用錯誤。
影片 | 說明 |
---|---|
503 Service Unavailable Error from Backend Server | 瞭解下列資訊:
|
問題
用戶端應用程式會收到 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 存取記錄檔
- 直接呼叫後端伺服器
如要瞭解各種方法,請點選下方分頁標籤。
追蹤工具
- 啟用追蹤工作階段,然後發出 API 呼叫來重現問題 - 503 Service Unavailable。
- 請選取其中一個失敗的要求,然後檢查追蹤記錄。
- 瀏覽追蹤記錄的各個階段,找出發生錯誤的位置。
- 如果您發現目標伺服器傳回了 503 錯誤,表示 503 錯誤為目標伺服器。
以下是追蹤記錄範例,顯示目標伺服器收到的 503 Service Unavailable 回應:
- 按一下「收到的回應來自目標伺服器的回應」階段,然後查看「回應標頭和回應內容」部分,看看這些資訊是否提供任何實用資訊:
- 回應標頭可能包含伺服器標頭,指出錯誤回應的傳送來源。
- 「回應內容」可能包含目標伺服器傳送 503 回應代碼的其他資訊。
- 按照以下步驟,在追蹤記錄中檢查 AX (Analytics (分析) 資料記錄) 階段中的 X-Apigee-fault-source 和 X-Apigee-fault-code 值,確認 503 錯誤來自目標伺服器:
- 按一下「AX」(Analytics (分析) 資料已記錄) 階段,如以下螢幕截圖所示:
- 將「階段詳細資料」向下捲動至「回應標頭」部分,確定 X-Apigee-fault-code 和 X-Apigee-fault-source 的值,如下所示:
- 如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值與下表顯示的值相符,您可以確認 503 錯誤是否來自目標伺服器:
回應標頭 值 X-Apigee-fault-source 目標 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
- 按一下「AX」(Analytics (分析) 資料已記錄) 階段,如以下螢幕截圖所示:
- 檢查您是否正在使用 Proxy 鏈結,例如目標伺服器/目標端點是否在 Apigee 中叫用其他 Proxy。判斷方法如下:
- 返回「Request sent to target server」階段,按一下「Show Curl」按鈕,然後決定目標伺服器主機別名。
- 如果目標伺服器主機別名指向虛擬主機別名,就表示其為 Proxy 鏈結。在這種情況下,您必須針對鏈結 Proxy 重複執行上述所有步驟,直到找出導致 503 Service Unavailable 錯誤的實際原因。 在這類情況下,503 Service Unavailable (服務無法使用) 在其他階段也可能出現在其他鏈結的 Proxy 中,如有需要,也可以使用這份應對手冊進行診斷。
- 如果目標伺服器主機別名指向後端伺服器,請前往「Resolution」。
NGINX 存取記錄檔
您也可以參考 NGINX 額外的記錄檔,判斷後端伺服器是否已傳送 503 狀態碼。如果問題過去發生,或是問題間歇性,導致您無法在 UI 中擷取追蹤記錄,這個方法就特別實用。請按照下列步驟,從 NGINX 存取記錄確認這項資訊:
- 查看 NGINX 存取記錄檔。
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
- 搜尋特定 API Proxy 在特定時間範圍內 (如果問題在過去) 是否發生 503 錯誤,或搜尋仍失敗並顯示 503 的要求。
- 如果發生任何 503 錯誤,請檢查錯誤是否來自後端伺服器。如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值與下表顯示的值相符,即表示 503 錯誤來自後端伺服器:
回應標頭 值 X-Apigee-fault-source 目標 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode 以下範例項目顯示目標伺服器造成的 503 錯誤:
- 請查看特定 API Proxy,並確保您使用的是 Proxy 鏈結。即表示目標伺服器/目標端點未在 Apigee 中叫用其他 Proxy。如果您使用 Proxy 鏈結,就需要為鏈結 Proxy 重複上述所有步驟,直到找出實際導致 503 Service Unavailable 錯誤的原因為止。在這類情況下,其他階段的 Proxy 可能會發生 503 Service Unavailable 服務,您可以使用這份應對手冊進行診斷。
- 如果您確認並未使用 Proxy 鏈結,且 503 錯誤來自後端伺服器,請前往「Resolution」。
呼叫後端伺服器
您可以直接呼叫後端伺服器,驗證透過 Apigee Edge 傳送要求時,收到的「 503 Service Unavailable」(服務無法使用) 回應相同。
- 確認您擁有所有必要標頭、查詢參數和憑證,在要求中必須傳遞至後端伺服器。
- 如果後端服務可公開存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。
- 如果只有訊息處理器可以存取後端伺服器,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。
- 確認後端服務確實傳回 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 錯誤時,包含時區資訊的時間範圍。