排查集成错误

云到云    诉讼或调查

Google Cloud 为您提供了一些工具,以便您使用 Google Cloud Monitoring 监控项目可靠性,以及使用 Google Cloud Logging 错误日志调试问题。每当执行用户 intent 失败时,Google Home Analytics 流水线都会将该失败情况记录在您的指标中,并在您的项目日志中发布错误日志。

若要对错误进行问题排查,需要执行两个步骤:

  1. 使用智能家居指标监控项目的状态。
  2. 通过查看错误日志中的详细错误说明来调查问题。

该过程与使用 Local Home SDK 进行本地集成类似。掌握问题排查流程后,您可以轻松地在指标和日志之间来回切换,从而深入了解错误。

监控错误

您可以使用 Google Cloud Monitoring dashboard 访问项目指标。以下是一些对监控质量和调试特别有用的关键图表:

  • 当您监控项目可靠性时,首先应关注成功率图表。如果此图表中的指标下降,可能表示用户群中的部分用户或所有用户遇到了服务中断。我们建议您在每次项目更改或更新后密切监控此图表是否存在任何异常情况。
  • 第 95 百分位延迟时间图表是一项重要指标,用于衡量智能家居 Action 对用户的表现。如果此图表中突然出现波动,则可能表示您的系统可能无法跟上请求的速度。建议您定期查看此图表,看看是否存在任何意外行为。
  • 在排查集成问题时,错误细分图表最为有用。对于成功百分比图表中突出显示的每个错误,错误明细中都会显示一个错误代码。下表列出了 Google Home platform 标记的错误以及如何排查这些错误。

平台错误代码

以下是您可能会在项目日志中看到的一些常见错误代码,可用于识别 Google Home platform 捕获的问题。如需了解问题排查信息,请参阅下表。

错误代码 说明
BACKEND_FAILURE_URL_ERROR Google 从您的服务收到 HTTP 4xx 错误代码(不是 401)。

在 GCP Logging 中使用 requestId,以查看智能家居服务日志。
BACKEND_FAILURE_URL_TIMEOUT Google 尝试访问您的服务时,请求超时。

验证您的服务是否处于在线状态、正在接受连接,并且未超出容量限制。此外,请确认目标设备已开机、处于在线状态且已同步。
BACKEND_FAILURE_URL_UNREACHABLE Google 从您的服务收到 HTTP 5xx 错误代码。

在 GCP Logging 中使用 requestId,以查看智能家居服务日志。
DEVICE_NOT_FOUND 设备在合作伙伴服务端不存在。

这通常表示数据同步失败或竞态条件失败。
GAL_BAD_3P_RESPONSE 由于载荷中的格式或值无效,Google 无法解析来自账号关联服务的响应。

在 GCP Logging 中使用 requestId,以查看帐号关联服务中的错误日志。
GAL_INTERNAL Google 尝试检索访问令牌时发生 Google 内部错误。

如果您在 GCP Logging 中看到此错误的发生率上升,请与我们联系以了解详情。
GAL_INVALID_ARGUMENT Google 尝试检索访问令牌时发生 Google 内部错误。

如果您在 GCP Logging 中看到此错误的发生率上升,请与我们联系以了解详情。
GAL_NOT_FOUND 存储在 Google 中的用户访问令牌和刷新令牌已失效,无法再刷新。用户需要重新关联其帐号,才能继续使用您的服务。

如果您在 GCP Logging 中看到此错误的发生率上升,请与我们联系以了解详情。
GAL_PERMISSION_DENIED 未授权令牌共享时发生 Google 内部错误。

如果您在 GCP Logging 中看到此错误的发生率上升,请与我们联系以了解详情。
GAL_REFRESH_IN_PROGRESS 用户的访问令牌已过期,而系统已经在同时尝试刷新该令牌。

这不是问题,无需执行任何操作。
INVALID_AUTH_TOKEN Google 从您的服务收到 HTTP 401 错误代码。

访问令牌未过期,但您的服务已使其失效。 在 GCP Logging 中使用 requestId,以查看智能家居服务日志。
INVALID_JSON 无法解析或理解 JSON 响应。

检查 JSON 响应的结构,看看是否存在语法无效的问题,例如括号不匹配、缺少逗号、字符无效。
OPEN_AUTH_FAILURE 用户的访问令牌已过期,Google 无法刷新该令牌,或者 Google 从您的服务收到了 HTTP 401 错误代码。

如果您发现此代码的出现频率有所上升,请检查与智能家居 intent 或刷新令牌请求相关的错误率是否也有所上升。
PARTNER_RESPONSE_INVALID_ERROR_CODE 响应表示无法识别的错误代码。

如果您的请求响应表明存在错误,请务必使用我们 支持的错误代码中提供的某个代码。
PARTNER_RESPONSE_INVALID_PAYLOAD 响应的“payload”字段无法解析为 JSON 对象。

检查请求响应中的载荷字段是否包含匹配的括号以及是否已正确构造为 JSON 字段。
PARTNER_RESPONSE_INVALID_STATUS 响应不指示状态,或指示的状态不正确。

对 intent 执行请求的响应应该使用 SUCCESS, OFFLINE, ERROR, EXCEPTIONS 中的任一来指示状态。您还可以详细了解如何 处理错误和异常
PARTNER_RESPONSE_MISSING_COMMANDS_AND_DEVICES 请求中存在的一个或多个 intent 在响应中缺失。

确认您的 执行响应的结构是否正确,响应中是否有与请求的所有 intent 对应的结果。
PARTNER_RESPONSE_MISSING_DEVICE 请求中存在的一个或多个设备在响应中缺失。

确认您的 执行响应的结构是否正确,响应中是否有请求中的所有设备 ID。
PARTNER_RESPONSE_MISSING_PAYLOAD 响应不包含 payload 字段。

确保在请求响应中添加载荷字段。您可以详细了解如何正确构建 执行响应
PARTNER_RESPONSE_NOT_OBJECT 响应无法解析为 JSON 对象。

检查请求响应中的所有字段,看看是否有非预期的字符、括号不匹配或格式错误。系统可能不支持某些 Unicode 字符。此外,请确保您的响应采用了 JSON 对象的正确结构。
PROTOCOL_ERROR 无法处理请求。

在 Google Cloud Logging 中使用 requestId 来查看智能家居服务日志。
RESPONSE_TIMEOUT 请求在等待响应时超时。

发送响应的超时期限为自发出请求之时起 9 秒。请务必在此时间段内发送响应。
RESPONSE_UNAVAILABLE 未收到响应,或者响应不指示状态。

对 intent 执行请求的响应应该根据 智能家居文档进行结构化设计并指示状态。
TRANSIENT_ERROR 暂时性错误是指可以自行解决的错误。

这些错误通常表现为与设备或服务的连接断开。此外,在无法打开到服务器的新连接时。

搜索日志

当您能够熟练地使用指标监控集成后,下一步就是使用 Cloud Logging 排查特定错误。错误日志是一个类似于 JSON 的条目,其字段包含各种实用信息,例如时间、错误代码以及有关原始智能家居 intent 的详细信息。

Google Cloud 中有多个系统始终会向您的项目发送日志。您需要编写用于过滤日志的查询,以查找所需的日志。查询可以基于时间范围资源、日志严重性或自定义条目。

查询 Cloud 日志

您可以使用查询按钮构建自定义过滤条件。

构建云日志查询

如需指定时间范围,请点击时间范围选择按钮 ,然后从提供的选项中选择一个。这将过滤日志,并显示所选时间范围内的日志。

如需指定资源,请点击资源下拉菜单,然后选择 Google 助理 Action 项目这会在您的查询中添加过滤条件,以显示源自您的项目的日志。

使用严重性按钮,按紧急信息调试和其他严重性日志级别进行过滤。

您还可以使用 Logs Explorer 中的“查询”字段输入自定义条目。此字段使用的查询引擎支持字符串匹配等基本查询,以及比较运算符 (<, >=, !=) 和布尔运算符 (AND, OR, NOT) 等更高级类型的查询。

例如,以下自定义条目将返回源自 LIGHT 设备类型的错误:

resource.type = "assistant_action_project" AND severity = ERROR AND jsonPayload.executionLog.executionResults.actionResults.device.deviceType = "LIGHT"

您可以访问查询库,查找更多有效查询日志的示例。

测试修正效果

在发现错误并应用更新以修复错误后,我们建议您使用 Google Home Test Suite 对修复进行全面测试。我们提供了有关如何使用 Test Suite 的用户指南,该指南将指导您有效地测试更改。

学习资源

本文档介绍了对智能家居 Action 中的错误进行问题排查的步骤。您也可以查看我们的 Codelab,详细了解调试: