503 服務無法使用 - NoActiveTargets

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

影片

如要進一步瞭解 503 錯誤,請觀看下列影片:

影片 說明
排解及解決「503 Service Unavailable - NoActiveTargets」問題 瞭解以下內容:
  • 目標伺服器和健康狀態監控的重要性
  • 排解並解決即時 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 公有和私有雲使用者
因 DNS 解析錯誤而導致連線錯誤 目標伺服器的 DNS 解析產生錯誤的 IP 位址,導致連線錯誤。 Edge Private Cloud 使用者
連線錯誤 網路或連線問題導致用戶端無法連線至伺服器。 Edge Private Cloud 使用者
目標主機別名不正確 指定目標伺服器主機時發生錯誤,或含有不必要的字元 (例如空格)。 Edge 公有和私有雲使用者
SSL 握手失敗 用戶端與伺服器之間的 TLS/SSL 握手失敗。 Edge 公有和私有雲使用者
健康檢查失敗 設定用來檢查目標伺服器健康狀態的健康狀態檢查,可能會因某些原因而失敗。 Edge Private Cloud 使用者

原因:目標伺服器已停用

如果目標端點設定中指定的所有目標伺服器都已停用,您會收到 503 Service Unavailable 回應,並顯示錯誤代碼 NoActiveTargets

診斷

  1. 使用下列其中一種方式,找出失敗 API Proxy 的特定目標端點設定中使用的目標伺服器名稱:
    1. 如果只有一個目標端點,請檢查該端點。
    2. 如果有多個目標端點,且不確定哪個端點已停用目標伺服器,請按照下列步驟操作:
      1. 啟用追蹤工作階段、發出 API 呼叫,並重現問題 - 503 服務無法使用。
      2. 從追蹤記錄中,前往「Target Request Flow Started」,然後判斷目標端點的名稱,如下所示:
      3. 從追蹤記錄判斷目標端點名稱

  2. 找出目標端點後,請從目標端點設定取得所用的目標伺服器名稱,如下例所示:
    <TargetEndpoint name="default">>
      <HTTPTargetConnection>
        <LoadBalancer>
          <Server name="demo-target" />
        </LoadBalancer>
        <Path>/test</Path>
      </HTTPTargetConnection>
    </TargetEndpoint>
          

    在上述範例中,只有一個名為「demo-target」的目標伺服器。

  3. 使用 Edge UI 或 Edge API 呼叫,取得目標端點中使用的每個目標伺服器定義。

    Edge UI

    如要使用 Edge UI 取得定義,請按照下列步驟操作:

    1. 依序前往「管理」>「環境」>「目標伺服器」
    2. 選取發生失敗的特定環境。
    3. 搜尋特定目標伺服器名稱,取得目標伺服器定義。

      舉例來說,輸入目標伺服器名稱 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 輸出內容顯示目標伺服器「demo-target」停用,因為「IsEnabled」元素設為 false。

    由於目標伺服器已停用,訊息處理器會立即傳送 503 Service Unavailable,並將錯誤代碼 NoActiveTargets 做為用戶端的回應。

解析度

請確保 API Proxy 目標端點設定中使用的特定目標伺服器一律處於啟用狀態。

Edge UI

  1. 依序前往「管理」>「環境」>「目標伺服器」
  2. 選取發生失敗的特定環境。
  3. 搜尋特定目標伺服器名稱,即可取得定義。
  4. 選取特定目標伺服器,然後按一下「編輯」
  5. 勾選「已啟用」核取方塊。
  6. 按一下「更新」

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 監控功能排解 API 的 5xx 問題。舉例來說,您可能想設定快訊,在messaging.adaptors.http.flow.NoActiveTargets故障次數超過特定門檻時收到通知。

必須收集診斷資訊

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

  1. 如果您是公有雲使用者,請提供下列資訊:
    1. 機構名稱
    2. 環境名稱
    3. API Proxy 名稱
    4. 完成 curl 指令,重現錯誤
    5. 包含要求 (503 Service Unavailable) 的追蹤記錄檔,錯誤代碼為 NoActiveTargets
  2. 如果您是 Private Cloud 使用者,請提供下列資訊:
    1. 出現的完整錯誤訊息
    2. 環境名稱
    3. API Proxy 套裝組合
    4. 包含要求 (503 Service Unavailable) 的追蹤記錄檔,錯誤代碼為 NoActiveTargets
    5. NGINX 存取記錄

      (/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log)

    6. 訊息處理器記錄

      (/opt/apigee/var/log/edge-message-processor/logs/system.log)