您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
影片
如要進一步瞭解 503 錯誤,請觀看以下影片:
影片 | 說明 |
---|---|
疑難排解並解決 503 服務無法使用 - NoActiveTargets | 瞭解下列資訊:
|
問題
用戶端應用程式收到 HTTP 回應狀態碼 503,訊息中會顯示「Service Unavailable」訊息,以及 API Proxy 要求的錯誤代碼 NoActiveTargets。
錯誤訊息
系統會顯示以下錯誤回應:
HTTP/1.1 503 Service Unavailable
HTTP 回應中會顯示以下錯誤訊息:
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.NoActiveTargets" } } }
可能原因
當您在 API Proxy 的目標端點設定中使用一或多個目標伺服器時,系統通常會觀察到 HTTP 回應 503 Service Unavailable 和錯誤代碼 NoActiveTargets。
下表列出出現 503 Service Unavailable 且錯誤代碼 NoActiveTargets 回應的可能原因:
原因 | 說明 | 誰可以執行疑難排解步驟 |
---|---|---|
目標伺服器已停用 | 目標端點設定中指定的目標伺服器已停用。 | Edge Public and Private Cloud 使用者 |
DNS 解析有誤導致連線錯誤 | 目標伺服器的 DNS 解析導致 IP 位址錯誤,進而造成連線錯誤。 | Edge Private Cloud 使用者 |
連線錯誤 | 網路或連線問題會導致用戶端無法連線至伺服器。 | Edge Private Cloud 使用者 |
目標主機別名不正確 | 指定的目標伺服器主機不正確或含有不需要的字元 (例如空格)。 | 邊緣公開與私有雲使用者 |
SSL 握手失敗 | 用戶端和伺服器之間的 TLS/SSL 握手失敗。 | Edge Public and Private Cloud 使用者 |
健康狀態檢查失敗 | 如果健康狀態檢查設定為檢查目標伺服器健康狀態,可能會因為一些原因而失敗。 | Edge Private Cloud 使用者 |
原因:目標伺服器已停用
如果目標端點設定中指定的所有目標伺服器都已停用,您會收到 503 Service Unavailable 回應,並包含錯誤代碼 NoActiveTargets。
診斷
- 請透過下列其中一種方式,確定在失敗的 API Proxy 的特定目標端點設定中,要使用的目標伺服器名稱:
- 如果只有一個目標端點,請檢查該特定的目標端點。
- 如果有多個目標端點,且您不確定是哪個端點已停用目標伺服器,請按照下列步驟操作:
- 啟用追蹤工作階段,發出 API 呼叫並重現問題 - 503 Service Unavailable。
- 從追蹤記錄中前往「已開始目標要求流程」,然後確定目標端點的名稱,如下所示:
- 找出目標端點後,請從目標端點設定取得所使用的目標伺服器名稱,如以下範例所示:
<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 取得定義:
使用 Get 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,目標伺服器 demo-target 已遭停用。
由於目標伺服器已停用,訊息處理器會立即傳送 503 Service Unavailable 且錯誤代碼 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>
如果問題仍未解決,請參閱「收集診斷資訊」一節。
使用 API 監控功能診斷問題
API 監控功能可讓您快速隔離問題區域,以診斷錯誤、效能與延遲問題及其來源 (例如開發人員應用程式、API Proxy、後端目標或 API 平台)。
逐步操作範例情境,示範如何使用 API Monitoring 排解 API 的 5xx 問題。例如,您可以設定快訊,讓系統在 messaging.adaptors.http.flow.NoActiveTargets
錯誤數量超過特定門檻時收到通知。
必須收集診斷資訊
按照上述操作說明操作後,如果問題仍未解決,請收集下列診斷資訊。請與 Apigee 支援團隊聯絡並分享資料:
- 如果您是公有雲使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 完成 curl 指令即可重現錯誤
- 包含 503 Service Unavailable 與錯誤代碼 NoActiveTargets 相關要求的追蹤檔
- 如果您是私有雲使用者,請提供下列資訊:
- 發現完整錯誤訊息
- 環境名稱
- 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
)