503 服務無法使用 - NoActiveTargets

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

影片

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

影片 說明
疑難排解並解決 503 Service Unavailable - NoActiveTargets 請參閱下列文章:
  • 目標伺服器和健康監控器的重要性
  • 即時疑難排解並解決即時 503 Service Unavailable - NoActiveTargets 錯誤

問題

用戶端應用程式收到 HTTP 回應狀態碼 503Service 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

診斷

  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 取得定義:

    使用 取得 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

  1. 前往「管理」>「管理員」環境 >目標伺服器
  2. 請選取顯示失敗的特定環境。
  3. 搜尋特定的目標伺服器名稱即可取得定義。
  4. 選取特定的目標伺服器,然後按一下「Edit」
  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>
        

如果問題仍未解決,請前往 Must Gather Diagnostic Information

使用 API 監控功能診斷問題

API Monitoring 可讓您找出問題所在 迅速診斷錯誤、效能和延遲問題及其來源,例如開發人員 應用程式、API Proxy、後端目標或 API 平台

逐步完成範例情境 ,示範如何使用 API Monitoring 排解 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)