503 服务不可用 - NoActiveTarget

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
info

视频

如需详细了解 503 错误,请观看以下视频:

视频 说明
排查并解决 503 服务不可用 - NoActiveTargets 问题 了解以下内容:
  • 目标服务器和健康状况监控器的重要性
  • 排查并解决实时 503 服务不可用 - NoActiveTargets 错误

问题

对于 API 代理请求,客户端应用会收到 HTTP 响应状态代码 503,并显示 消息 Service Unavailable 和错误代码 NoActiveTargets

出错提示

您会看到以下错误响应:

HTTP/1.1 503 Service Unavailable
  

您会在 HTTP 响应中看到以下错误消息:

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.NoActiveTargets"
       }
    }
}
  

可能的原因

当您在 API 代理的目标端点配置中使用一个或多个目标服务器时,通常会观察到 HTTP 响应 503 Service Unavailable,并显示错误代码 NoActiveTargets

下表列出了导致 503 Service Unavailable 响应(显示错误代码 NoActiveTargets )的可能原因:

原因 说明 谁可以执行问题排查步骤
目标服务器已停用 目标端点配置中指定的目标服务器已停用。 Edge Public 和 Private Cloud 用户
因 DNS 解析不正确而导致的连接错误 目标服务器的 DNS 解析导致 IP 地址错误,进而导致连接错误。 Edge Private Cloud 用户
连接错误 网络或连接问题导致客户端无法连接到服务器。 Edge Private Cloud 用户
目标主机别名不正确 指定的目标服务器主机不正确或包含不需要的字符(例如空格)。 Edge Public 和 Private Cloud 用户
SSL 握手失败 客户端与服务器之间的 TLS/SSL 握手失败。 Edge Public 和 Private Cloud 用户
健康检查失败 配置为检查目标服务器健康状况的健康检查可能会因某些原因而失败。 Edge Private Cloud 用户

原因:目标服务器已停用

如果目标端点配置中指定的所有目标服务器都已停用,您将收到 503 Service Unavailable 响应,并显示错误代码 NoActiveTargets.

诊断

  1. 使用以下方法之一确定失败的 API 代理的特定目标端点 配置中使用的目标服务器的名称:
    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 界面或 Edge API 调用获取目标端点中使用的每个目标服务器的定义。

    Edge 界面

    如需使用 Edge 界面获取定义,请执行以下操作:

    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 代理的目标端点配置中使用的特定目标服务器始终处于启用状态。

Edge 界面

  1. 前往管理 > 环境 > 目标服务器
  2. 选择您看到失败的特定环境。
  3. 搜索特定目标服务器名称以获取其定义。
  4. 选择特定目标服务器,然后点击修改
  5. 选中已启用 复选框。
  6. 点击更新

Edge API

使用 Update a Target Server 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 Monitoring 诊断问题

API Monitoring 借助 API Monitoring,您可以快速找出问题区域,以诊断错误、性能和延迟时间问题及其来源,例如开发者应用、API 代理、后端目标或 API 平台。

逐步了解一个示例场景 该场景演示了如何使用 API Monitoring 排查 API 的 5xx 问题。例如, 您可能需要设置提醒,以便在 messaging.adaptors.http.flow.NoActiveTargets 故障数超过特定阈值时收到通知。

必须收集的诊断信息

如果按照上述说明操作后问题仍然存在,请收集以下 诊断信息。与 Apigee 支持团队联系并分享这些信息:

  1. 如果您是 Public Cloud 用户,请提供以下信息:
    1. 组织名称
    2. 环境名称
    3. API 代理名称
    4. 用于重现错误的完整 curl 命令
    5. 包含 503 服务不可用(显示错误代码 NoActiveTargets)的请求的跟踪文件
  2. 如果您是 Private Cloud 用户,请提供以下信息:
    1. 观察到的完整出错提示
    2. 环境名称
    3. API 代理软件包
    4. 包含 503 服务不可用(显示错误代码 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)