503 服务不可用 - NoActiveTarget

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

视频

有关 503 错误的详细信息,请观看以下视频:

视频 说明
<ph type="x-smartling-placeholder"></ph> 排查并解决 503 Service Unavailable - NoActiveTargets 问题 了解以下内容: <ph type="x-smartling-placeholder">
    </ph>
  • 目标服务器和健康监视器的重要性
  • 排查和解决实时“503 Service Unavailable - NoActiveTargets”错误

问题

客户端应用收到 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"
       }
    }
}
  

可能的原因

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

下表列出了导致出现 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 代理:
    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。 然而,目标服务器本身处于已停用 状态,这由已启用元素显示为灰色。

    边缘 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 输出显示目标服务器 demo-target停用。 因为 IsEnabled 元素设为了 false。

    由于目标服务器已停用,因此消息处理器将发送 503 Service 不可用且错误代码为 NoActiveTargets 发送响应

分辨率

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

Edge 界面

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

Edge API

使用 更新 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 监控来诊断问题

API 监控可帮助您找出问题所在 快速诊断错误、性能和延迟问题及其来源, API 代理、后端目标或 API 平台。

逐步了解示例场景 ,演示了如何使用 API 监控来排查 API 的 5xx 问题。例如: 您可能需要设置提醒,以便在messaging.adaptors.http.flow.NoActiveTargets 超过特定阈值的故障数量。

必须收集的诊断信息

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

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