排查响应错误

本页介绍如何排查 API 请求响应中返回的错误。

Upstream backend unavailable

如果您收到错误代码 14 和消息 upstream backend unavailable,这表示 Extensible Service Proxy (ESP) 无法访问服务的后端。请检查以下各项:

  • 确保后端服务正在运行。具体的操作方法取决于后端。

  • 已为后端服务指定正确的 IP 地址端口:
    • 对于 GKE,检查部署清单文件(通常称为 deployment.yaml)中的 ESP --backend 标志值(短选项为 -a)。
    • 对于 Compute Engine,检查 docker run 命令中的 ESP --backend 标志值(短选项为 -a)。

API is not enabled for the project

如果您在请求中发送了 API 密钥,但收到类似“没有为项目启用 API my-api.endpoints.example-project-12345.cloud.goog”的错误消息,则表示 API 密钥是在与 API 不同的 Google Cloud 项目中创建的。要解决此问题,您可以在与 API 关联的同一 Google Cloud 项目中创建 API 密钥,也可以在创建了 API 的 Google Cloud 项目中启用 API

Service control request failed with HTTP response code 403

如果您收到错误代码 14 和消息 Service control request failed with HTTP response code 403,这表示该项目未启用 Service Control API (servicecontrol.googleapis.com)。

  1. 请参阅检查所需服务,确保在项目中启用了 Endpoints 和 ESP 所需的所有服务。

  2. 请参阅检查所需权限,以确保与运行 ESP 的实例关联的服务帐号所需的所有权限。

Method doesn't allow unregistered callers

如果您在 gRPC API 配置文件中指定了 allow_unregistered_calls: false,但是向 API 发送的请求中未包含分配给名为 key 的查询参数的 API 密钥,则 ESP 会返回错误 Method doesn't allow unregistered callers 作为响应。

如果您需要生成 API 密钥以调用 API,请参阅创建 API 密钥

Method does not exist

响应 Method does not exist 意味着在指定网址路径上找不到 HTTP 方法(GETPOST 或其他)。如需排查此问题,请比较已部署的服务配置,确保方法名称与您在请求中发送的网址路径匹配:

  1. 在 Cloud Console 中,转到项目的 Endpoints 服务页面。

    转到“Endpoints 服务”页面

  2. 如果您有多个 API,请选择您向其发送了请求的 API。

  3. 点击部署记录标签。

  4. 选择最新的部署以查看服务配置。

Transport is closing

如果您收到错误代码 13 和消息 transport is closing,这表示 ESP 无法访问。

检查 ESP 错误日志。具体的操作方法取决于后端。 如需了解详情,请参阅以下内容:

异常响应

如果 HTTP 响应看起来是二进制内容,这可能表明该请求正使用 HTTP2 端口调用 API,而您打算使用的是 HTTP1 端口。

检查 ESP 的端口配置选项。因为短式标志 -p(对于 HTTP1)和 -P(对于 HTTP2)看起来类似,我们建议您改用长式标志:对 HTTP1 使用 --http_port,对 HTTP2 使用 --http2_port

ESP 后端配置错误也可能导致响应异常。确保将后端标志(-a--backend)设置为 gRPC 网址,例如 --backend=grpc://127.0.0.1:8081

如需详细了解 ESP 标志,请参阅 ESP 启动选项

检查 Cloud Logging 日志

如需借助 Cloud 日志来排查响应错误,请执行以下操作:

  1. 在 Cloud Console 中,转到日志记录页面。

    转到“日志查看器”页面

  2. 在页面顶部,选择 Google Cloud 项目。

  3. 使用左侧下拉菜单,选择 Produced API > [YOUR_SERVICE_NAME]

  4. 调整时间范围,直到出现显示相关响应错误的行。

  5. 展开 JSON 载荷并查找 error_cause

    • 如果 error_cause 设置为 application,这表示代码中存在问题。

    • 如果 error cause 为其他内容,并且您无法解决问题,请导出日志并将其附在您与 Google 的通信中。

如需了解详情,请参阅以下内容: