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

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

查找日志

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

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

    前往 Logs Explorer

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

  2. 执行以下任意操作:

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

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

      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 字段中。

    • 验证您的服务是否收到了请求 请将以下查询复制到 然后,点击运行查询

      "GoogleStackdriverMonitoring-UptimeChecks"
      

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

排查通知问题

本部分介绍了配置服务时可能遇到的一些错误。 提醒政策,并提供用于解决相关问题的信息。

一个检查工具未通过,但其他检查工具未检查

您正在查看拨测指标 当所有其他检查工具都报告成功时,checker 报告失败。

您无需执行任何操作即可解决此问题。

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

使用默认配置的提醒政策要求以下事件发生故障: 创建事件并发送通知之前,至少要有两个检查工具。 单个检查工具报告的失败不会导致系统发送通知。

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

  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 地址。 超时限制是响应验证选项的一部分。

为帮助您对失败的公共拨测进行问题排查,您可以配置 拨测发送 检查期间的 ICMP ping。这些 ping 有助于您区分由网络连接问题和应用超时等原因导致的失败。如需了解详情,请参阅使用 ICMP ping

排查非公开拨测问题

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

拨测创建失败

您的 Google Cloud 项目设置可能会阻止修改分配给服务账号的角色,而该服务账号用于管理与服务目录服务的互动。在这种情况下,创建正常运行时间检查会失败。

本部分介绍如何向服务账号授予角色 要求:

Google Cloud 控制台

当您使用 Google Cloud 控制台创建非公开正常运行时间检查时,Google Cloud 控制台会发出命令,将 Service Directory 角色授予服务账号。

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

API:确定项目范围

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

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

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

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

  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“函数”页面。打开此页面 合成监控工具详情页面,点击代码,然后 点击函数名称。

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

    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. 找到您要修改的合成监控工具, 点击 更多选项,然后选择修改
  3. 点击修改函数
  4. 修改 index.js 文件中的 options 对象,然后点击应用函数

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

  5. 点击保存

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

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

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

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

  • 如果看到 InvalidStorageLocation 消息,请验证是否存在 存储分区的存储 Cloud Storage 存储桶的 options.screenshot_options.storage_location

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

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