503 服务不可用 - NoActiveTarget

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

视频

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

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

问题

对于 API 代理请求,客户端应用收到 HTTP 响应状态代码 503 以及消息 Service Disabled 和错误代码 NoActiveTarget

错误消息

您将看到以下错误响应:

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 Disabled 以及错误代码 NoActiveTarget

下表列出了导致出现 503 Service Disallow 和错误代码 NoActiveTarget 响应的可能原因:

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

原因:目标服务器已停用

如果目标端点配置中指定的所有目标服务器都已停用,则您会收到 503 Service Available 响应,错误代码为 NoActiveTarget.

诊断

  1. 通过以下任一方式确定出现故障的 API 代理的特定目标端点配置中使用的目标服务器的名称:
    1. 如果只有一个目标端点,则检查该特定目标端点。
    2. 如果有多个目标端点,而您不确定哪个端点已停用目标服务器,请按照以下步骤操作:
      1. 启用跟踪会话,发出 API 调用,并重现问题 - 503 Service available(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。 不过,目标服务器本身已遭停用 已启用元素显示为灰色。

    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。

    由于目标服务器已停用,消息处理器将立即发送包含错误代码 NoActiveTarget503 Service Available 作为对客户端的响应。

分辨率

确保 API 代理的目标端点配置中使用的特定目标服务器始终处于启用状态。

Edge 界面

  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 代理、后端目标或 API 平台。

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

必须收集的诊断信息

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

  1. 如果您是公有云用户,请提供以下信息:
    1. 组织名称
    2. 环境名称
    3. API 代理名称
    4. 完成 curl 命令以重现错误
    5. 跟踪文件,包含带有 503 Service Available 且错误代码 NoActiveTarget 的请求
  2. 如果您是 Private Cloud 用户,请提供以下信息:
    1. 观察到了完整的错误消息
    2. 环境名称
    3. API 代理软件包
    4. 跟踪文件,包含带有 503 Service Available 且错误代码 NoActiveTarget 的请求
    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)