503 服務無法使用 - NoActiveTargets

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

影片

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

影片 說明
疑難排解並解決 503 服務無法使用 - 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 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

診斷

  1. 請透過下列其中一種方式,確定在失敗的 API Proxy 的特定目標端點設定中,要使用的目標伺服器名稱:
    1. 如果只有一個目標端點,請檢查該特定的目標端點。
    2. 如果有多個目標端點,且您不確定是哪個端點已停用目標伺服器,請按照下列步驟操作:
      1. 啟用追蹤工作階段,發出 API 呼叫並重現問題 - 503 Service Unavailable。
      2. 從追蹤記錄中前往「已開始目標要求流程」,然後確定目標端點的名稱,如下所示:
      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 輸出內容顯示,由於元素 IsEnabled 設為 false,目標伺服器 demo-target 已遭停用

    由於目標伺服器已停用,訊息處理器會立即傳送 503 Service Unavailable 且錯誤代碼 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>
        

如果問題仍未解決,請參閱「收集診斷資訊」一節。

使用 API 監控功能診斷問題

API 監控功能可讓您快速隔離問題區域,以診斷錯誤、效能與延遲問題及其來源 (例如開發人員應用程式、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. 如果您是私有雲使用者,請提供下列資訊:
    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)