<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
视频
请观看以下视频,详细了解如何解决 503 服务不可用错误。
视频 | 说明 |
---|---|
<ph type="x-smartling-placeholder"></ph> 后端服务器发出的 503 服务不可用错误 | 了解以下内容:
<ph type="x-smartling-placeholder">
|
问题
客户端应用收到 HTTP 响应状态 503,后跟 Service Unavailable 消息 API 代理调用。
错误消息
您会看到以下某条错误消息:
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 Unavailable 响应的可能原因包括:
原因 | 说明 | 谁可以执行问题排查步骤 |
---|---|---|
过载的服务器 | 后端服务器过载或超出其容量,无法处理任何新的 传入的客户端请求 | Edge 公有云和私有云用户 |
服务器正在维护 | 后端服务器可能暂时正在进行维护。 | Edge 公有云和私有云用户 |
原因:服务器/服务器过载,正在维护
在 Apigee Edge 中,后端服务器可能会返回 503 服务不可用错误 在以下任一情况下会发生以下情况:
- 后端服务器过载/繁忙,无法处理任何新请求。
- 后端服务器由于维护而暂时关闭。
诊断
您可以使用以下三种方法中的任何一种来诊断错误:
- 跟踪工具
- NGINX 访问日志
- 直接调用后端服务器
点击下面的标签了解每种方法。
跟踪工具
- 启用跟踪会话, 并进行 API 调用以重现问题“503 Service Unavailable”(503 服务不可用)。
- 选择其中一个失败请求并检查跟踪记录。
- 浏览跟踪记录的各个阶段,并找到失败的位置。
- 如果您发现目标服务器返回的 503 错误是响应,
导致 503 错误的原因在于目标服务器
下面是显示收到 503 服务不可用响应的跟踪记录屏幕截图示例 从目标服务器:
- 点击从目标服务器收到的响应阶段,并完成
响应标头和响应内容部分,看看其中是否包含任何有用信息:
<ph type="x-smartling-placeholder">
- </ph>
- 响应标头可能包含服务器标头, 错误响应的发送来源。
- 响应内容可能包含额外信息 目标服务器发送了 503 响应代码。
- 检查 503 错误是否来自目标服务器,确认
AX 中 X-Apigee-fault-source 和 X-Apigee-fault-code 的值
(记录的 Google Analytics 数据)按照下面给出的步骤在跟踪记录中所处的阶段:
<ph type="x-smartling-placeholder">
- </ph>
- 点击 AX(记录的 Google Analytics 数据)阶段,如以下屏幕截图所示:
- 向下滚动“阶段详情”到“响应标头”部分,并确定值 X-Apigee-fault-code 和 X-Apigee-fault-source 的部分,如下所示:
- 如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值与值一致
您可以确认 503 错误是否来自
目标服务器:
响应标头 值 X-Apigee-fault-source 目标 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
- 检查是否使用了代理链,即目标服务器/目标端点是否 在 Apigee 中调用另一个代理要确定这一点,请执行以下操作: <ph type="x-smartling-placeholder">
NGINX 访问日志
您还可以参阅 NGINX 访问日志,确定 503 状态代码是否已发送。 由后端服务器发出如果相关问题曾发生过,则此功能会特别有用 或者,问题是间歇性的,并且您无法在界面中捕获跟踪记录。 请按照以下步骤从 NGINX 访问日志中确定此信息:
- 查看 NGINX 访问日志。
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
- 搜索特定 API 代理在特定时间段内出现的任何 503 错误 (如果问题在过去发生过)或任何仍失败且返回 503 的请求。
- 如果存在任何 503 错误,请检查错误是否来自后端服务器。
如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值与
已显示的值
在下表中,503 错误来自后端服务器:
响应标头 值 X-Apigee-fault-source 目标 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode 以下条目示例显示了由目标服务器引起的 503 错误:
- 查看特定的 API 代理,确保您使用的是 代理链,即 如果 目标服务器/目标端点未在 Apigee 中调用其他代理。如果您使用的是 代理链时,您需要对链式代理重复上述所有步骤, 您可以确定导致 503 服务不可用错误的实际原因。在这些情况下 “503 Service Unavailable”(服务不可用)也可能会在其他阶段出现在其他链式代理中, 您可以使用本指南进行诊断。
- 如果您确认自己没有使用代理链接,并且 503 错误来自 然后前往解决。
调用后端服务器
您可以直接调用后端服务器,验证是否获得了相同的 通过 Apigee Edge 发出请求时收到的 503 服务不可用响应。
- 确保您拥有所有必需的标头、查询参数和 需要作为请求的一部分传递给后端服务器
- 如果后端服务可公开访问,那么您可以使用 curl 命令 Postman 或任何其他 REST 客户端,并直接调用后端服务器 API。
- 如果只能从消息处理器访问后端服务器,您可以使用 curl 命令、Postman 或任何其他 REST 客户端,并直接调用后端服务器 API 从消息处理器中移除
- 验证后端服务确实会返回 503 服务不可用错误。
分辨率
如果确定 503 错误来自后端服务器,您可以执行 以解决此问题:
- 如果问题是由于后端服务器停机维护而导致的, 你可以在维护期结束后让后端服务器联机。
- 如果问题是由后端服务器过载引起的,那么 如果您有权访问后端服务器,请解决此问题。其他情况 您可能需要与后端服务器团队合作来解决此问题。
使用 API 监控来诊断问题
API Monitoring 可帮助您将 快速诊断错误、性能 以及延迟问题及其来源,例如开发者应用、API 代理、后端目标 或 API 平台
逐步浏览示例 场景,该示例演示了如何排查 API 的 5xx 问题 使用 API 监控例如,您可以设置提醒 Messaging.adaptors.http.flow.ErrorResponseCode 错误数超过特定阈值。
必须收集的诊断信息
如果在按照上述说明操作后问题仍然存在,请收集 以下诊断信息,然后联系 Apigee 支持。
如果您是公有云用户,请提供以下信息:
- 组织名称
- 环境名称
- API 代理名称
- 完成 curl 命令以重现 503 错误
- 包含发生 503 Service Unavailable 错误的请求的跟踪文件
- 如果 503 错误目前未发生,请提供时区和时区 过去发生 503 错误的时间。
如果您是私有云用户,请提供以下信息:
- 观察到失败请求的完整错误消息。
- 您观察到 503 错误的组织、环境名称和 API 代理名称。
- API 代理软件包。
- 包含发生 503 Service Unavailable 错误的请求的跟踪文件。
- NGINX 访问日志。
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
- 消息处理器日志。
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 发生 503 错误时包含时区信息的时间段。