对合成监控和拨测进行问题排查

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

查找日志

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

  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 Function 的名称,它存储在 resource.labels.service_name 字段中。

      • 收集轨迹数据时,关联轨迹的 ID,存储在 trace 字段中。

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

      "GoogleStackdriverMonitoring-UptimeChecks"
      

      protoPayload.ip 字段包含正常运行时间检查服务器使用的一个地址。如需了解如何列出所有 IP 地址,请参阅列出 IP 地址

排查通知问题

本部分介绍配置提醒政策时可能会遇到的一些错误,并提供有关如何解决这些问题的信息。

您收到了一条通知,希望对失败情况进行调试

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

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

      1. 在 Google Cloud 控制台中,转到  拨测页面:

        前往拨测

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

      2. 查找并选择拨测。

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

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

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

        转到合成监控

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

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

系统不会通知您拨测失败

您配置了正常运行时间检查,并且正在查看该检查的正常运行时间详情页面。您会注意到,已通过的检查图表显示至少有一个检查工具未通过。但是,您并未收到任何通知。

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

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

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

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

    进入提醒

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

  2. 点击 Policies 窗格中的 See all policies
  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 根据正常运行时间发布数据计算得出

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

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

不显示任何数据

如果您的正常运行时间检查位于与 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 提供的角色授权
  3. 如果您的合成监控工具使用的服务帐号未列出,或者尚未被授予包含 Cloud Trace Agent (roles/cloudtrace.agent) 角色权限的角色,请将此角色授予您的服务帐号。

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

“处理中”状态

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

如需确定函数是否部署失败,请尝试以下操作:

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

  • 打开合成监控工具的合成监控工具详情页面。

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

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

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

  • 打开函数的 Cloud 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 Function 可能内存不足。如需解决此故障,请修改 Cloud Function,将内存增加到至少 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. 找到您要修改的合成监控工具,点击 更多选项,然后选择修改
  3. 点击修改函数
  4. index.js 文件中修改 options 对象,然后点击 Apply function

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

  5. 点击保存

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

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

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

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

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

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

  • 验证相应 Cloud Functions 函数中使用的服务帐号是否具有 Identity and Access Management 角色,该角色允许创建、访问 Cloud Storage 存储分区以及向 Cloud Storage 存储分区写入数据。