故障的金丝雀故障排除 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障的金丝雀故障排除

如果 Canary 失败,请检查以下内容以进行故障排除。

一般 排查

  • 使用金丝雀详细信息页面查找更多信息。在 CloudWatch 控制台中,依次选择Canary,然后选择 Canary 的名称以打开 Canary 详细信息页面。在可用性选项卡上,选中SuccessPercent度量来查看问题是常量还是间歇性问题。

    虽然仍在可用性选项卡上,选择失败的数据点以查看该失败运行的屏幕截图、日志和步骤报告(如果可用)。

    如果步骤报告可用,因为步骤是脚本的一部分,请检查哪个步骤失败,并查看相关的屏幕截图以查看客户看到的问题。

    您还可以检查 HAR 文件以查看一个或多个请求是否失败。您可以通过使用日志对失败的请求和错误进行深入挖掘。最后,您可以将这些工件与成功的金丝雀运行中的工艺品进行比较,以确定问题。

    默认情况下,CloudWatch Synthetics 会捕获 UI 金丝雀中每个步骤的屏幕截图。但是,您的脚本可能被配置为禁用屏幕截图。在调试期间,您可能需要再次启用屏幕截图。同样,对于 API 金丝雀,您可能希望在调试过程中查看 HTTP 请求和响应标头和正文。有关如何在报表中包含此数据的信息,请参阅执行 HttpStep(stepName 称、请求选项、[回调]、[步骤配置])

  • 如果您对应用程序进行了最近的部署,请回滚它,然后稍后进行调试。

  • 手动 Connect 到终端节点,查看是否可以重现相同的问题。

金丝雀运行时版本升级和降级问题

如果您最近从运行时版本升级了金丝雀syn-1.0到更高版本,则可能是跨源请求共享 (CORS) 问题。有关更多信息,请参阅跨源请求共享 (CORS) 问题

如果您最近将金丝雀降级为较旧的运行时版本,请检查以确保您正在使用的 CloudWatch Synthetics 函数在您降级到的旧运行时版本中可用。例如,executeHttpStep函数可用于运行时版本syn-nodejs-2.2和更高版本. 要检查函数的可用性,请参阅编写 Canary 脚本

注意

当您计划升级或降级金丝雀的运行时版本时,我们建议您首先克隆金丝雀并更新克隆金丝雀中的运行时版本。验证具有新运行时版本的克隆工作后,您可以更新原始金丝雀的运行时版本并删除克隆。

等待元素出现

分析日志和屏幕截图后,如果您发现脚本正在等待某个元素出现在屏幕上并超时,请检查相关的屏幕截图以查看该元素是否出现在页面上。验证xpath以确保它是正确的。

对于木偶操作者相关的问题,请选中木偶演员的 GitHub 页面或互联网论坛.

节点要么不可见,要么不是页面的 HTML 元素。单击 ()

如果节点不可见或不是HTMLElement对于 来说为page.click(),请首先验证xpath,用于单击元素。此外,如果您的元素位于屏幕底部,请调整您的视区。默认情况下,CloudWatch Synthetics 器使用 1920 年 * 1080 的视口。您可以在启动浏览器时或使用 Puppeteer 函数设置不同的视口page.setViewport

无法将对象上传到 S3,异常:无法获取 S3 存储桶位置:拒绝访问

这意味着由于权限问题,CloudWatch Synthetics 无法上传屏幕截图、日志或为金丝雀创建的报告。确保金丝雀角色具有必要的权限。有关更多信息,请参阅CloudWatch 金丝雀所需的角色和权限

注意

您的 CloudWatch 指标可能会将数据点显示为Passed即使金丝雀已经失败了这个错误。这是因为 CloudWatch Synthetics 发布了SuccessPercent指标为Passed如果您的脚本已通过。

上传工件失败并不表示脚本出现任何问题。因此,这些错误失败的金丝雀,但不会触发任何警报配置在你的金丝雀.

您可以通过 CloudWatch Synthetics CloudWatch Synthetics CloudWatch CaddExecutionErrorfunction. 如果错误对于指示脚本的成功或失败并不重要,则只应将其作为执行错误跟踪。有关此函数的更多信息,请参阅添加错误(错 errorMessage,ex);

Error: 协议错误(运行时间。调用函数):目标已关闭。

如果页面或浏览器关闭后有一些网络请求,则会出现此错误。您可能忘记了等待异步操作。执行脚本后,CloudWatch Synthetics 器将关闭浏览器。关闭浏览器后执行任何异步操作可能会导致target closed error

Canary (正在启动)。Error: 无数据点-金丝雀显示超时错误

这意味着你的金丝雀跑步超过了超时。在 CloudWatch Synthetics 元件发布成功百分比 CloudWatch 指标或更新哈尔文件、日志和屏幕截图等工件之前,金丝雀执行停止。如果超时太低,您可以增加它。

默认情况下,金丝雀超时值等于其频率。您可以手动将超时值调整为小于或等于 Canary 频率。如果您的金丝雀频率较低,则必须增加频率以增加超时。您可以调整频率和超时值 cSchedule当您使用 CloudWatch Synthetics 控制台创建或更新金丝雀时。

当发生此错误时,在 CloudWatch Synthetics 控制台中不可查看金丝雀工件。您可以使用 CloudWatch Logs 来查看 Canary 的日志。

使用 CloudWatch Logs 查看金丝雀的日志

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在左侧导航窗格中,依次选择日志组

  3. 通过在筛选器框中键入金丝雀名称来查找日志组。金丝雀的日志组具有名称/aws/lambda/Cwsyn-After加拿大名称-随机标识

尝试访问内部终端节点

如果您希望您的金丝雀访问内部网络上的终端节点,我们建议您将 CloudWatch Synthetics 设置为使用 VPC。有关更多信息,请参阅在 VPC 上运行 Canary

跨源请求共享 (CORS) 问题

在 UI 金丝雀中,如果某些网络请求失败403或者net::ERR_FAILED,检查金丝雀是否启用了活动跟踪,还使用木偶函数page.setExtraHTTPHeaders添加标题。如果是这样,则网络请求失败可能是由跨源请求共享 (CORS) 限制引起的。您可以通过禁用活动跟踪或删除额外的 HTTP 标头来确认是否属于这种情况。

为什么会发生这种情况?

使用活动跟踪时,会向所有传出请求添加一个额外的标头以跟踪呼叫。通过添加跟踪标头或使用 Puppeteer 的page.setExtraHTTPHeaders会导致 CORS 检查 XMLHTTPREQuest (XHR) 请求。

如果您不想禁用活动跟踪或删除额外的标头,则可以更新 Web 应用程序以允许跨域访问,也可以使用disable-web-security标志,当您在脚本中启动 Chrome 浏览器时。

您可以覆盖 CloudWatch Synthetics 元件使用的启动参数,并传递其他disable-web-security标记参数,通过使用 CloudWatch Synthetics 启动功能。有关更多信息,请参阅可用于 Node.js 金丝雀脚本的库函数

注意

当您使用运行时版本时,您可以覆盖 CloudWatch Synthetics 元件使用的启动参数syn-nodejs-2.1或更高版本.