排查合成监控工具和拨测问题

本文档介绍了如何查找日志数据,以及如何排查合成监控工具和拨测失败问题:

查找日志

本部分介绍了如何查找合成监控工具和拨测的日志:

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

    前往 Logs Explorer

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

  2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
  3. 执行以下任意操作:

    • 如需查找与合成监控工具或拨测相关联的所有日志,请按资源类型进行查询。您可以使用资源菜单,也可以输入查询内容。

      对于拨测,请在资源菜单中选择拨测网址,或在查询编辑器中输入以下查询,然后点击运行查询

      resource.type="uptime_url"
      

      对于合成监控工具,请在资源菜单中选择 Cloud Run 修订版本,或在查询编辑器中输入以下查询,然后点击运行查询

      resource.type="cloud_run_revision"
      
    • 如需查找包含有关在执行合成监控工具或拨测期间收到的响应的信息的日志,请执行以下任一操作:

      • 如需使用合成监控工具或拨测的 ID 进行查询,请在查询编辑器中输入 ID 时使用以下格式,然后点击运行查询

        labels.check_id="my-check-id"
        
      • 如需查询包含由合成监控器和拨测发出的请求的响应数据的日志,请在查询编辑器中输入以下查询,然后点击运行查询

        "UptimeCheckResult"
        

        上述查询会匹配包含字符串 "UptimeCheckResult" 的所有日志条目。

      这些日志包括以下内容:

      • 合成监控工具或拨测的 ID,存储在 labels.check_id 字段中。

      • 对于合成监控工具,这是 Cloud Run 函数的名称,存储在 resource.labels.service_name 字段中。

      • 收集跟踪记录数据时,相关联的跟踪记录的 ID,存储在 trace 字段中。

    • 如需验证您的服务是否收到了来自 Google Cloud 服务器的请求,请将以下查询复制到查询编辑器中,然后点击运行查询

      "GoogleStackdriverMonitoring-UptimeChecks"
      

      protoPayload.ip 字段包含拨测服务器使用的一个地址。如需了解如何列出所有 IP 地址,请参阅列出 IP 地址

排查通知相关问题

本部分介绍您在配置提醒政策时可能遇到的一些错误,并提供了解决这些错误的相关信息。

一个检查器失败,但其他检查器未失败

您正在查看拨测指标,发现一个检查器报告了失败,而所有其他检查器都报告了成功。

您无需采取任何行动来解决此情况。

如果只有一个检查工具报告失败,则该失败可能是由于网络问题导致检查工具的命令超时所致。也就是说,命令不会失败,但不会在指定的超时时间内完成。

使用默认配置的提醒政策需要至少两个检查工具失败,然后才会创建突发事件并发送通知。单个检查器报告的失败不会导致通知。

您收到了通知,并想调试失败问题

  1. 如需确定失败的开始时间,请执行以下任一操作:

    • 对于拨测,如需确定失败的时间,请查看正常运行时间详情页面:

      1. 在 Google Cloud 控制台中,前往  拨测页面:

        前往拨测

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

      2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
      3. 找到并选择拨测。

        通过的检查图表会显示检查历史记录。 如需确定拨测首次失败的时间,您可能需要修改图表的时间范围。时间范围选择器位于正常运行时间详情页面的工具栏中。

    • 对于合成监控工具,如需确定失败的时间,请查看正常运行时间详情页面:

      1. 在 Google Cloud 控制台中,前往 合成监控页面:

        前往合成监控

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

      2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
      3. 找到并选择合成监控工具。
  2. 如需了解如何查找关联的日志数据,请参阅本页中标题为查找日志的部分。

您未收到有关拨测失败的通知

您已配置拨测,并且正在查看该拨测的正常运行时间详情页面。您会注意到,通过的检查图表显示至少有一个检查器失败。不过,您未收到通知。

默认情况下,提醒政策配置为在至少两个区域中的检查器未能收到拨测的响应时创建突发事件并发送通知。这些失败现象必须同时发生。

您可以修改提醒政策的条件,以便在单个区域未能收到响应时收到通知。不过,我们建议您使用默认配置,这样可以减少因暂时性失败而可能收到的通知数量。

如需查看或修改提醒政策,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往  提醒页面:

    进入提醒

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

  2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
  3. 点击政策窗格中的查看所有政策
  4. 找到要查看或修改的政策,然后点击该政策的名称。

    您可以在政策详情页面中查看和修改政策。

排查公开拨测问题

本部分介绍您在使用公开拨测时可能遇到的一些错误,并提供了解决这些错误的相关信息。

您的公开拨测失败

您配置了公开拨测,但在执行验证步骤时收到错误。

以下是导致正常运行时间检查失败的原因:

  • 连接错误 - 拒绝 (Connection Error - Refused):如果您使用的是默认的 HTTP 连接类型,请检查您是否安装了响应 HTTP 请求的网络服务器。如果您尚未安装网络服务器,则新实例可能会发生连接错误;请参阅 Compute Engine 快速入门。 如果您使用的是 HTTPS 连接类型,则可能必须执行其他配置步骤。如需了解防火墙问题,请参阅列出拨测服务器 IP 地址
  • Name or service not found:主机名可能不正确。
  • 403 Forbidden:服务向正常运行时间检查工具返回错误代码。例如,在 Amazon Linux 中,默认的 Apache 网络服务器配置会返回此代码;但在其他一些 Linux 版本中,该网络服务器配置会返回代码 200 (Success)。请参阅 Amazon Linux 的 LAMP 教程或您网络服务器的文档。
  • 404 Not found:路径可能不正确。
  • 408 Request timeout 或无响应:端口号可能不正确、服务可能未运行、服务可能无法访问或者超时值可能太小。检查您的防火墙是否允许来自正常运行服务器的流量;请参阅列出拨测服务器 IP 地址。超时限制是响应验证选项的一部分。

为帮助您排查公开拨测失败问题,您可以将拨测配置为在检查期间发送最多 3 条 ICMP ping 命令。这些 ping 命令可以帮助您区分由应用中的网络连接问题和超时等原因导致的失败。 如需了解详情,请参阅使用 ICMP ping

排查非公开拨测问题

本部分介绍您在使用非公开拨测时可能遇到的一些错误,并提供了解决这些错误的相关信息。

创建拨测失败

您的 Google Cloud 项目设置可能禁止修改分配给服务账号的角色,而拨测正是使用该服务账号来管理与 Service Directory 服务的互动。 在这种情况下,拨测创建会失败。

本部分介绍如何授予服务账号所需的角色:

Google Cloud 控制台

当您使用 Google Cloud 控制台创建非公开拨测时, Google Cloud 控制台会发出命令,以向服务账号授予 Service Directory 角色。

如需了解如何向服务账号授予角色,请参阅为服务账号授权

API:确定项目范围

首次在单个 Google Cloud 项目中为 Service Directory 服务和私有资源创建非公开拨测时,请求可能会成功或失败。结果取决于您是否在项目中停用了为服务账号自动授予角色功能:

  • 如果您的项目允许为服务账号自动授予角色,则首次创建拨测会成功。系统会为您创建服务账号并授予必要的角色。

  • 如果您的项目不允许向服务账号授予自动角色授予,则首次正常运行时间检查创建会失败。系统会创建服务账号,但不会授予任何角色。

如果创建拨测失败,请执行以下操作:

  1. 向服务账号授权
  2. 请等待几分钟让系统传播授权。
  3. 尝试再次创建非公开拨测。

API:受监控的项目

首次创建以受监控的项目中的 Service Directory 服务或不同 Google Cloud 项目中的私有资源为目标的非公开拨测时,请求会失败并会创建 Monitoring 服务账号。

您授权服务账号的方式取决于您使用的Google Cloud 项目的数量及其关系。您可能最多会涉及四个项目:

  • 定义了非公开拨测的项目。
  • 您在其中配置了 Service Directory 服务的受监控项目。
  • 您在其中配置了 VPC 网络的项目。
  • 配置了虚拟机或负载均衡器等网络资源的项目。此项目在本文讨论的服务账号授权中不扮演任何角色。

如果首次创建拨测失败,请执行以下操作:

  1. 向服务账号授权
  2. 请等待几分钟让系统传播授权。
  3. 尝试再次创建非公开拨测。

访问被拒绝

您的拨测会失败并显示 VPC_ACCESS_DENIED 结果。此结果意味着网络配置或服务账号授权的某些方面不正确。

请按创建拨测失败中所述,检查您的服务账号授权以使用范围限定项目或受监控项目。

如需详细了解如何访问专用网络,请参阅配置网络项目

非公开拨测的异常结果

您有一个包含多个虚拟机的 Service Directory 服务,并且您的服务配置包含多个端点。当您关闭其中一个虚拟机时,拨测仍会显示成功。

如果您的服务配置包含多个端点,系统会随机选择一个。如果与所选端点关联的虚拟机正在运行,即使其中一个虚拟机已关闭,拨测也会成功。

默认标头

您的正常运行时间检查返回错误或意外结果。如果您替换了默认标头值,则可能会发生这种情况。

在向目标端点发送针对非公开拨测的请求时,该请求会包括以下标头和值:

标题
HTTP_USER_AGENT GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)
HTTP_CONNECTION keep-alive
HTTP_HOST Service Directory 端点的 IP
HTTP_ACCEPT_ENCODING gzipdeflatebr
CONTENT_LENGTH 根据正常运行时间发布数据计算得出

如果您尝试替换这些值,则可能会发生以下情况:

  • 拨测会报告错误
  • 替换值会被丢弃,并替换为表中的值

未显示任何数据

当您的拨测与 Service Directory 服务位于不同的 Google Cloud 项目中时,您不会在拨测信息中心内看到任何数据。

确保包含拨测的 Google Cloud 项目监控包含 Service Directory 服务的 Google Cloud 项目。

如需详细了解如何列出受监控的项目并添加其他项目,请参阅为多个项目配置指标范围

排查合成监控工具问题

本部分提供的信息可帮助您排查合成监控工具的问题。

启用 API 后出现的错误消息

您打开了合成监控工具的创建流程,系统会提示您启用至少一个 API。启用这些 API 后,系统会显示类似于以下内容的消息:

An error occurred during fetching available regions: Cloud Functions API has
not been used in project PROJECT_ID before or it is disabled.

错误消息建议您验证 API 是否已启用,然后建议您等待并重试该操作。

如需验证 API 是否已启用,请前往您的项目的 API 和服务页面:

转到“API 和服务”

验证 API 是否已启用后,您可以继续执行创建流程。当 API 启用状态通过后端传播后,此情况会自动解决。

出站 HTTP 请求未被跟踪

您可以将合成监控工具配置为收集输出 HTTP 请求的跟踪记录数据。跟踪记录数据仅显示一个 span,类似于以下屏幕截图:

Cloud Trace 仅显示一条跟踪记录。

如需解决此情况,请确保您的服务账号已被授予 Cloud Trace Agent 角色 (roles/cloudtrace.agent)。Editor 角色 (roles/editor) 也足以解决此问题。

如需查看向您的服务账号授予的角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 IAM 页面:

    前往 IAM

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

  2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
  3. 选择包括 Google 提供的角色授权
  4. 如果合成监控工具使用的服务账号未列出,或者未被授予可提供 Cloud Trace Agent 角色 (roles/cloudtrace.agent) 具有的权限的角色,请向服务账号授予此角色。

    如果您不知道服务账号的名称,请在导航菜单中选择服务账号

“进行中”状态

合成监控工具页面会列出状态为 In progress 的合成监控工具。状态为 In progress 表示合成监控工具是最近创建的,并且没有任何要显示的数据,或者函数部署失败。

如需确定函数是否未能成功部署,请尝试执行以下操作:

  • 确保 Cloud Run 函数的名称不包含下划线。如果存在下划线,请移除下划线并重新部署 Cloud Run 函数。

  • 打开合成监控工具的合成监控工具详细信息页面。

    如果您看到以下消息,请删除合成监控工具。

    Cloud Function not found for this Synthetic monitor. Please confirm it exists or delete this monitor.
    

    此错误消息表明该函数已被删除,因此合成监控工具无法执行该函数。

  • 打开相应函数的 Cloud Run functions 页面。如需从合成监控工具详细信息页面打开此页面,请点击代码,然后点击函数名称。

    如果您看到类似于以下内容的消息,则表示该函数部署失败。

    This function has failed to deploy and will not work correctly. Please edit and redeploy
    

    如需解决此失败问题,请查看函数代码并更正阻止函数构建或部署的错误。

创建合成监控工具时,函数的部署和执行可能需要几分钟的时间。

警告状态

合成监控工具会列出状态为 Warning 的合成监控工具。如果状态为 Warning,则表示执行结果不一致。这可能表明您的测试存在设计问题,也可能表明被测对象存在不一致的行为。

“失败”状态

合成监控工具会列出状态为 Failing 的合成监控工具。如需详细了解失败原因,请查看最近的执行历史记录。

  • 如果显示错误消息 Request failed with status code 429,则表示 HTTP 请求的目标拒绝了该命令。如需解决此失败问题,您必须更改合成监控工具的目标。

    端点 https://www.google.com 会拒绝合成监控工具发出的请求。

  • 如果失败返回的执行时间为 0ms,则表示 Cloud Run 函数可能耗尽内存。如需解决此失败问题,请修改 Cloud Run 函数,然后将内存增加到至少 2 GiB,并将 CPU 字段设置为 1

合成监控工具的删除操作失败

您使用 Cloud Monitoring API 删除合成监控工具,但该 API 调用失败,并返回类似于以下内容的响应:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Cannot delete check 1228258045726183344. One or more alerting policies is using it.Delete the alerting policy with id projects/myproject/alertPolicies/16594654141392976482 and any other policies using this uptime check and try again."
      }
    ]
  }
}

如需解决此失败问题,请删除监控合成监控工具结果的提醒政策,然后删除该合成监控工具。

无法修改损坏的链接检查工具的配置

您使用 Google Cloud 控制台创建了损坏的链接检查工具,并且想要更改测试的 HTML 元素,或者想要修改 URI 超时、重试、等待选择器和链接级选项。但是,在修改损坏的链接检查工具时, Google Cloud 控制台未显示配置字段。

如需解决此故障,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往  合成监控页面:

    前往合成监控

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

  2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
  3. 找到要修改的合成监控工具,点击 更多选项,然后选择修改
  4. 点击修改函数
  5. 修改 index.js 文件中的 options 对象,然后点击应用函数

    如需了解此对象的字段和语法,请参阅 broken-links-ok/index.js

  6. 点击保存

Google Cloud 控制台显示屏幕截图保存失败

您创建了一个损坏的链接检查工具,并将其配置为保存屏幕截图。但是, Google Cloud 控制台显示以下警告消息之一以及更详细的信息:

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

如需解决这些故障,请尝试以下操作:

  • 如果您看到 InvalidStorageLocation 消息,请验证名为 options.screenshot_options.storage_location 的字段中指定的 Cloud Storage 存储桶是否存在。

  • 查看与 Cloud Run functions 函数相关的日志。如需了解详情,请参阅查找日志

  • 验证在相应 Cloud Run functions 函数中使用的服务账号是否具有可创建、访问和写入 Cloud Storage 存储桶的 Identity and Access Management 角色。