排查 Cloud Scheduler 问题

本页面介绍如何解决 Cloud Scheduler 的问题。

Cloud Scheduler 会在每次作业执行开始时和结束时发布日志。您可以检索、查看和分析特定作业的日志,包括 Cloud Scheduler 的审核日志。如需了解详情,请参阅查看日志

默认情况下,如果 Cloud Scheduler 作业未收到来自其目标服务(即作业请求处理程序)的确认,则该作业会被视为失败。Cloud Scheduler 将根据您配置的指数退避算法重试该作业。

如需了解影响 Google Cloud 服务的突发事件,请参阅 Google Cloud Service Health 信息中心为 Cloud Scheduler 报告的所有突发事件

作业因下游服务问题而失败

作业失败可能是由于 Cloud Scheduler 所针对的下游服务(例如 Cloud Run)出现问题,而不是 Cloud Scheduler 本身出现问题。如果符合以下条件,您可以怀疑存在下游服务问题:

  • Cloud Scheduler 的权限已正确设置。
  • Cloud Scheduler 可以成功访问目标服务。
  • Cloud Scheduler 执行日志中的错误消息源自下游服务。

如需解决此问题,请完成以下步骤:

  1. 直接调用下游服务:验证下游服务是否可以在没有 Cloud Scheduler 的情况下成功调用。如果调用成功,则表明问题很可能是由 Cloud Scheduler 引起的;如果调用失败,则需要进一步调试下游服务。
  2. 检查目标服务日志:检查目标服务的日志,确定输出的错误,并相应地对这些错误进行问题排查。
  3. 查找长时间运行的操作:如果 Cloud Scheduler 针对长时间运行的操作(超过 30 分钟)返回 HTTP 504 错误,请检查目标服务日志,了解执行是成功还是失败,因为目标服务可能具有更长的请求超时时间。在这种情况下,Cloud Scheduler 会超时,但目标服务不会。

作业失败并显示权限错误

权限控制哪些主账号可以访问资源以及允许执行哪些操作。配置有误的权限可能会中断作业执行,并导致权限遭拒错误。审核日志会详细记录所有权限更改,以便您确定这些问题的来源。

如果 Cloud Scheduler 作业因权限错误而失败,执行日志可能会显示类似于 "debugInfo":"URL_ERROR-ERROR_OTHER. Original HTTP response code number = 403" 的消息。

如需解决此问题,请完成以下一项或多项验证:

  • 验证授予服务代理的 IAM 角色:Cloud Scheduler 服务代理需要 Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent) 角色。如果没有此角色,Cloud Scheduler 作业会失败。您可以手动向 Cloud Scheduler 服务代理授予该角色。当您在 2019 年 3 月 19 日之前启用 Cloud Scheduler API 或移除了 Cloud Scheduler 服务代理角色时,才需要手动授予此角色。 如需了解详情,请参阅授予 Cloud Scheduler 服务代理角色

  • 验证您的服务账号权限:确保附加到作业的服务账号具有调用目标服务的正确权限和范围。这包括目标位于其他项目中的情形,或者目标是中间服务的最终目标的情形。如果目标位于 Google Cloud内,请确认您已向服务账号授予必要的角色。 Google Cloud 中的每项服务都需要特定角色,并且接收服务会自动验证生成的令牌。例如,对于 Cloud Run 和 Cloud Run functions,您必须授予 Cloud Run Invoker 角色。当目标位于 Google Cloud之外时,接收服务必须手动验证令牌。如需了解详情,请参阅向 Cloud Scheduler 进行身份验证对 HTTP 目标使用身份验证

  • 验证是否存在任何 VPC Service Controls 违规行为VPC Service Controls 是一项 Google Cloud功能,可让您设置安全的边界以防数据渗漏。如需确定错误是否与 VPC Service Controls 相关,请检查您是否已启用 VPC Service Controls 并且是否将其应用于您尝试使用的项目和服务。如需验证项目和服务是否受 VPC Service Controls 保护,请检查资源层次结构中相应级别的 VPC Service Controls 政策。

    如需了解问题的范围,您可以从审核日志中检索 VPC Service Controls 错误

    1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面:

      前往 Logs Explorer

      如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

    2. 根据以下条件查询审核日志:

      severity="ERROR" AND protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"

      具体而言,错误消息可能包含以下文本:

      • Request is prohibited by organization's policy
      • Request violates VPC Service Controls

    如需详细了解在配置 VPC Service Controls 时可能会遇到的问题,请参阅排查常见问题

  • 验证所有专用端点:Cloud Scheduler 只能在 VPC Service Controls 边界内调用某些专用端点,例如 Cloud Run、Cloud Run functions 和 Google Cloud API。检查目标服务的入站流量设置(例如,请参阅限制 Cloud Run 的网络入站流量)以及所附加服务账号的权限。您可能会收到 URL_ERROR-ERROR_DNS 错误消息。如需了解详情,请参阅本文档中的作业因目标位置无法访问而失败

作业因无法访问目标而失败

如果 Cloud Scheduler 作业因目标不可达而失败,则会出现此问题。执行日志会显示以 URL_ERRORURL_UNREACHABLE 开头的错误。

如需解决此问题,请根据收到的错误消息完成以下某项检查:

  • URL_ERROR-ERROR_AUTHENTICATION:返回 HTTP 401 (Unauthorized) 或 HTTP 407 (Proxy Authentication Required) 错误。目标需要身份验证;但是,Cloud Scheduler 请求不包含有效的身份验证令牌,例如,请求缺少授权标头或凭据无效。检查作业的身份验证设置。如需了解详情,请参阅向 Cloud Scheduler 进行身份验证对 HTTP 目标使用身份验证

  • URL_ERROR-ERROR_DNS:表示网址提取失败,因为无法使用域名系统 (DNS) 解析主机名,例如,主机名不存在或没有关联的 IP 地址。错误消息可能包含文本 Original HTTP response code number = 0。检查主机名的有效性,并在调用专用端点时确保该端点受 Cloud Scheduler 支持,并检查其入站设置。

  • URL_ERROR-ERROR_NOT_FOUND:Web 服务器返回 HTTP 404 Not Found 错误。检查目标网址是否正确,以及资源是否存在。

  • URL_ERROR-ERROR_OTHER:这指的是之前未详细说明的通用 HTTP 4xx 错误。检查日志以检索原始 HTTP 响应代码。 如果您收到 HTTP 403 错误,请参阅本文档中的作业因权限错误而失败

  • URL_UNREACHABLE-UNREACHABLE_5xx:目标返回 HTTP 5xx429 错误。这可能是暂时性状况,例如服务器过载。检查目标目标的日志,以调试问题。

  • URL_UNREACHABLE-UNREACHABLE_CONNECTION_RESET:连接被对等方重置。检查外部服务器端是否存在问题。

  • URL_UNREACHABLE-UNREACHABLE_ERROR:表示网络错误。检查目标网址是否正确,以及是否存在任何阻止访问的防火墙规则。

作业执行问题

Cloud Scheduler 作业会在规定的时间或按固定时间间隔执行。作业执行期间可能会出现以下问题。

之前可正常运行的作业停止执行

如果之前成功运行的 Cloud Scheduler 作业因 Cloud Scheduler API 被停用而停止执行,就会出现此问题。您可以查询符合以下条件的审核日志,以确认 API 停用的时间:

resource.type="audited_resource" AND
protoPayload.serviceName="cloudscheduler.googleapis.com" AND
operation.producer="serviceusage.googleapis.com" AND
protoPayload.authorizationInfo.permission="serviceusage.services.disable"

如需解决此问题,请启用 Cloud Scheduler API

由于夏令时,作业的执行变得不规律

使用 Google Cloud 控制台创建 Cloud Scheduler 作业时,您必须指定时区。使用 Google Cloud CLI 时,您可以选择使用 --time-zone 标志指定时区;否则,系统会使用协调世界时 (UTC) 或 UTC 作为默认时区。

如果作业配置了非 UTC 时区,并且其执行因夏令时 (DST) 更改而变得不规律,就会出现此问题。这是预期行为。

如果您的作业需要非常精确的节奏,则应选择不采用夏令时的时区。具体来说,为完全避免该问题,请将作业时间表配置为使用世界协调时间 (UTC) 时区。

如需了解详情,请参阅 Cron 作业格式和时区

后续步骤

如果您在 Cloud Scheduler 文档中找不到问题的解决方案,请考虑以下选项:

如需了解详情,请参阅 Cloud Scheduler 支持