503 服务不可用 - 后端服务器

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

视频

观看以下视频,详细了解如何解决 503 服务不可用错误。

视频 说明
后端服务器返回 503 服务不可用错误 了解以下内容:
  • Apigee Edge 中的 503 服务不可用错误简介
  • 排查和解决后端服务器中发生实时 503 Service 不可用问题

问题

客户端应用在 API 代理调用后收到 HTTP 响应状态 503 及消息服务不可用

错误消息

您会看到以下错误消息之一:

HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable: Back-end server is at capacity

您可能还会在 HTTP 响应中看到如下所示的错误消息:

The server is temporarily unable to service your request due to
maintenance downtime or capacity problems. Please try again later.

注意:上面的响应代码和错误消息只是示例。 在某些情况下,您可能只会收到错误响应代码,而不包含任何错误消息。错误响应代码和错误消息的格式和内容可能会因后端服务器实现而异。

原因

HTTP 状态代码 503 表示服务器目前无法处理传入请求。出现此错误的原因通常是服务器太忙或暂时关闭进行维护。

导致 503 Service Available 响应的可能原因包括:

原因 说明 谁可以执行问题排查步骤
过载服务器 后端服务器过载或超出其容量,无法处理任何新的传入客户端请求。 Edge 公有云和私有云用户
服务器正在维护 后端服务器可能正在临时维护。 Edge 公有云和私有云用户

原因:服务器/服务器过载且正在进行维护

在 Apigee Edge 中,在以下任一情况下,系统可能会从后端服务器返回 503 服务不可用错误:

  • 后端服务器过载/繁忙,无法处理任何新请求。
  • 由于维护,后端服务器暂时关闭。

诊断

您可以使用以下三种方法中的任意一种来诊断错误:

  • 跟踪工具
  • NGINX 访问日志
  • 直接调用后端服务器

点击下面的标签页即可了解每种方法。

跟踪工具

  1. 启用跟踪会话,并进行 API 调用以重现问题 - 503 Service Available。
  2. 选择其中一个失败的请求并检查跟踪记录。
  3. 浏览跟踪记录的各个阶段,并找到失败的位置。
  4. 如果您发现目标服务器返回了 503 错误作为响应,那么 503 错误的原因就是目标服务器。

    以下是一个跟踪记录屏幕截图示例,其中显示了从目标服务器收到的 503 服务不可用响应:

  5. 点击从目标服务器收到的响应阶段并浏览“响应标头”和“响应内容”部分,查看其中是否有任何实用信息:
    • 响应标头可能包含服务器标头,指示错误响应的来源。
    • 响应内容可能包含有关目标服务器发送 503 响应代码的原因的其他信息。
  6. 使用以下步骤检查跟踪记录中 AX(已记录 Analytics 数据)阶段中的 X-Apigee-fault-sourceX-Apigee-fault-code 的值,以确认 503 错误来自目标服务器:
    1. 点击 AX(Google Analytics(分析)记录的数据)阶段,如以下屏幕截图所示:
    2. 将“Phase Details”向下滚动到“Response Headers”部分,并确定 X-Apigee-fault-codeX-Apigee-fault-source 的值,如下所示:
    3. 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值与下表中显示的值匹配,您可以确认 503 错误来自目标服务器:
      响应标头
      X-Apigee-fault-source 目标
      X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  7. 检查您是否在使用代理链接,即目标服务器/目标端点是否正在调用 Apigee 中的其他代理。如需确定这一点,请执行以下操作:
    1. 返回到请求发送到目标服务器阶段,然后点击显示 Curl 按钮并确定目标服务器主机别名。
    2. 如果目标服务器主机别名指向虚拟主机别名,则它是代理链。在这种情况下,您需要对链式代理重复上述所有步骤,直到确定导致 503 Service Available 错误的实际原因。在这些情况下,其他阶段的其他链式代理中也可能会发生 503 Service Available 错误,您可以使用本指南进行诊断。
    3. 如果目标服务器主机别名指向您的后端服务器,请转到解决

NGINX 访问日志

您还可以参考 NGINX 访问权限日志来确定后端服务器是否发送了 503 状态代码。如果问题是过去发生的,或者问题是间歇性的,并且您无法在界面中捕获跟踪记录,这种方法特别有用。 若要通过 NGINX 访问日志确定此信息,请按以下步骤操作:

  1. 查看 NGINX 访问日志。
    /opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
  2. 搜索特定 API 代理在特定持续时间(如果问题在过去发生过)内的任何 503 错误,或搜索仍然失败并显示 503 的任何请求的任何 503 错误。
  3. 如果发生任何 503 错误,请检查错误是否来自后端服务器。 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值与下表中显示的值匹配,则 503 错误来自后端服务器:
    响应标头
    X-Apigee-fault-source 目标
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode

    以下示例条目展示了目标服务器导致的 503 错误:

  4. 查看具体的 API 代理,确保您使用的是代理链,即如果目标服务器/目标端点未在 Apigee 中调用其他代理,则会发生该错误。如果您使用的是代理链,则需要对链式代理重复上述所有步骤,直到确定导致 503 Service Available 错误的实际原因。在这些情况下,其他阶段的其他链式代理中也可能会发生 503 Service Available 错误,您可以使用本手册进行诊断。
  5. 如果您确认您没有使用代理链接,并且 503 错误来自后端服务器,请转到解决

对后端服务器的调用

您可以直接调用后端服务器,并验证您得到的 503 Service Available 响应与通过 Apigee Edge 发出请求时收到的响应相同。

  1. 确保您具有所有必需的标头、查询参数以及需要作为请求的一部分传递给后端服务器的所有凭据。
  2. 如果后端服务可公开访问,您可以使用 curl 命令、Postman 或任何其他 REST 客户端直接调用后端服务器 API。
  3. 如果只能从消息处理器访问后端服务器,您可以使用 curl 命令、Postman 或任何其他 REST 客户端,并直接从消息处理器调用后端服务器 API。
  4. 验证后端服务是否确实返回了 503 服务不可用错误。

分辨率

如果您确定 503 错误来自后端服务器,则可以执行以下操作来解决问题:

  • 如果问题是由后端服务器停机维护造成的,您可以在维护期结束后将后端服务器置于在线状态。
  • 如果问题是由后端服务器过载导致的,请在您可以访问后端服务器时解决该问题。否则,您可能需要与您的后端服务器团队合作来解决此问题。

使用 API Monitoring 诊断问题

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

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

必须收集的诊断信息

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

如果您是公有云用户,请提供以下信息:

  • 组织名称
  • 环境名称
  • API 代理名称
  • 完成 curl 命令以重现 503 错误
  • 包含具有 503 服务不可用错误的请求的跟踪文件
  • 如果 503 错误目前没有发生,请提供过去发生 503 错误时的时区信息对应的时间段。

如果您是私有云用户,请提供以下信息:

  • 观察到失败请求的完整错误消息。
  • 您观察到 503 错误的组织、环境名称和 API 代理名称。
  • API 代理软件包。
  • 包含具有 503 服务不可用错误的请求的跟踪文件。
  • NGINX 访问日志。
    /opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
  • 消息处理器日志。
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 发生 503 错误时包含时区信息的时间段。