查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
影片
如要進一步瞭解 503 錯誤,請觀看以下影片:
影片 | 說明 |
---|---|
疑難排解並解決 503 Service Unavailable - NoActiveTargets | 請參閱下列文章:
|
問題
用戶端應用程式收到 HTTP 回應狀態碼 503, Service Unavailable 訊息和錯誤代碼 NoActiveTargets API Proxy 要求
錯誤訊息
系統會顯示以下錯誤回應:
HTTP/1.1 503 Service Unavailable
您會在 HTTP 回應中看到下列錯誤訊息:
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.NoActiveTargets" } } }
可能原因
系統通常會觀察到 HTTP 回應 503 Service Unavailable 及錯誤代碼 NoActiveTargets 您在 API Proxy 目標端點設定中使用一或多個目標伺服器時。
下表列出 503 Service Unavailable 與錯誤代碼 NoActiveTargets 回應的可能原因:
原因 | 說明 | 誰可以執行疑難排解步驟 |
---|---|---|
目標伺服器已停用 | 目標端點設定中指定的目標伺服器已停用。 | 邊緣公有雲和私有雲使用者 |
DNS 解析有誤導致連線錯誤 | 目標伺服器的 DNS 解析導致 IP 位址無效,進而導致連線錯誤。 | Edge Private Cloud 使用者 |
連線錯誤 | 網路或連線問題導致用戶端無法連線至伺服器。 | Edge Private Cloud 使用者 |
目標主機別名有誤 | 指定的目標伺服器主機不正確或含有不需要的字元 (例如空格)。 | 邊緣公有雲和私有雲使用者 |
SSL 握手失敗 | 用戶端和伺服器之間的 TLS/SSL 握手失敗。 | 邊緣公有雲和私有雲使用者 |
健康狀態檢查失敗 | 基於某些原因,設定檢查目標伺服器健康狀態的健康狀態檢查可能會失敗。 | Edge Private Cloud 使用者 |
原因:目標伺服器已停用
如果目標端點設定中指定的所有目標伺服器已停用,您 會收到 503 Service Unavailable 回應,並傳回錯誤代碼 NoActiveTargets。
診斷
- 確定特定目標端點中使用的目標伺服器名稱 請使用下列其中一種方式設定失敗的 API Proxy:
- 如果只有一個目標端點,請檢查該特定目標端點。
- 如果有多個目標端點,且不確定哪個端點已停用目標伺服器,請按照下列步驟操作:
- 啟用追蹤工作階段、發出 API 呼叫,並重現問題:503 服務無法使用。
- 從追蹤記錄中前往「Target Request Flow Started」,然後判斷目標端點的名稱,如下所示:
- 找到目標端點後,請從目標端點設定取得所用的目標伺服器名稱,如以下範例所示:
<TargetEndpoint name="default">> <HTTPTargetConnection> <LoadBalancer> <Server name="demo-target" /> </LoadBalancer> <Path>/test</Path> </HTTPTargetConnection> </TargetEndpoint>
在上述範例中,有一個名為 demo-target 的目標伺服器。
- 透過 Edge UI 或 Edge API 呼叫,取得目標端點所用每個目標伺服器的定義。
Edge UI
如何使用 Edge UI 取得定義:
- 前往「管理」>「管理員」環境 >目標伺服器:
- 請選取顯示失敗的特定環境。
- 搜尋特定的目標伺服器名稱,取得目標伺服器定義。
例如,輸入目標伺服器名稱
demo-target
,您會看到如下的定義:請注意,目標伺服器 demo-target 已啟用主機別名、通訊埠 # 和 SSL。 但目標伺服器本身為「已停用」 ,表示元素 ENABLED 顯示為灰色。
Edge API
如何使用 Edge API 取得定義:
使用 取得 TargetServer API 以取得目標伺服器定義。
目標伺服器定義輸出內容
<TargetServer name="demo-target"> <Host>demo-target.apigee.net</Host> <Port>443</Port> <IsEnabled>false</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>
Apigee API 輸出內容顯示目標伺服器客層目標已已停用 因為元素 IsEnabled 設為 false。
由於目標伺服器已停用,訊息處理器會傳送 503 Service 無法使用並以錯誤代碼 NoActiveTargets,立即做為 傳回給用戶端。
解析度
確保 API 目標端點設定中使用的特定目標伺服器 Proxy 一律啟用。
Edge UI
- 前往「管理」>「管理員」環境 >目標伺服器:
- 請選取顯示失敗的特定環境。
- 搜尋特定的目標伺服器名稱即可取得定義。
- 選取特定的目標伺服器,然後按一下「Edit」。
- 勾選「已啟用」核取方塊。
- 按一下「更新」。
Edge API
使用 更新目標伺服器 API,以更新目標伺服器定義,並確保 API 要求酬載中的 IsEnabled 設為 true,如下所示:
<TargetServer name="demo-target"> <Host>demo-target.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>
如果問題仍未解決,請前往 Must Gather Diagnostic Information,
使用 API 監控功能診斷問題
API Monitoring 可讓您找出問題所在 迅速診斷錯誤、效能和延遲問題及其來源,例如開發人員 應用程式、API Proxy、後端目標或 API 平台
逐步完成範例情境
,示範如何使用 API Monitoring 排解 API 的 5xx 問題。例如:
建議您設定快訊,讓系統在messaging.adaptors.http.flow.NoActiveTargets
數量達到特定數量時通知您
錯誤數超過特定門檻
必須收集診斷資訊
如果按照上述說明操作後仍無法解決問題,請收集下列資訊 取得診斷資訊請與 Apigee 支援團隊聯絡並分享以下資訊:
- 如果您是公用雲端的使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 完成 curl 指令即可重現錯誤
- 追蹤檔含有 503 Service Unavailable 要求 (錯誤代碼為 NoActiveTargets) 的要求
- 如果您是 Private Cloud 使用者,請提供以下資訊:
- 觀察到完整的錯誤訊息
- 環境名稱
- API Proxy 套裝組合
- 追蹤檔含有 503 Service Unavailable 要求 (錯誤代碼為 NoActiveTargets) 的要求
- NGINX 存取記錄
(
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
) - 訊息處理器記錄
(
/opt/apigee/var/log/edge-message-processor/logs/system.log
)