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

本文档介绍了如何查找日志数据以及如何排查合成监控器和正常运行时间检查失败问题:

查找日志

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

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

    前往 Logs Explorer

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

  2. 执行以下任意操作:

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

      对于拨测,请在 Resource 菜单中选择 Uptime Check 网址,或在查询编辑器中输入以下查询,然后点击 Run query

      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. 找到并选择“正常运行情况检查”。

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

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

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

        前往合成监控

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

      2. 找到并选择合成监控工具。
  2. 如需了解如何查找关联的日志数据,请参阅本页面中标题为查找日志的部分。

您未收到有关正常运行时间检查失败的通知

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

默认情况下,将提醒政策配置为至少 2 个区域的检查工具未收到正常运行时间检查的响应时创建突发事件并发送通知。这些失败必须同时发生。

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

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

  1. 在 Google Cloud 控制台中,转到 提醒页面:

    进入提醒

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

  2. 点击政策窗格中的查看所有政策
  3. 找到要查看或修改的政策,然后点击该政策的名称。

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

排查公开拨测问题

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

您的公开拨测会失败

您配置了公开正常运行时间检查,但在执行验证步骤时收到错误。

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

  • 连接错误 - 拒绝 (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 根据正常运行时间发布数据计算得出

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

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

没有显示数据

如果正常运行时间检查所在的 Google Cloud 项目与 Service Directory 服务所在的项目不同,您在正常运行时间检查信息中心内不会看到任何数据。

确保包含正常运行时间检查的 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 提供的角色授权
  3. 如果您的合成监控器使用的服务账号未列出,或者未被授予包含 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 控制台中,前往  Synthetic Monitoring 页面:

    前往合成监控

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

  2. 找到要修改的合成监控器,点击 更多选项,然后选择修改
  3. 点击修改函数
  4. 修改 index.js 文件中的 options 对象,然后点击应用函数

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

  5. 点击保存

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

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

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

如需解决这些失败问题,请尝试执行以下操作:

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

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

  • 验证相应 Cloud Run 函数中使用的服务账号是否具有 Identity and Access Management 角色,以便其创建、访问和写入 Cloud Storage 存储分区。