使用 Canary 蓝图 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Canary 蓝图

本节提供有关每种 Canary 蓝图的详细信息以及每种蓝图最适合的任务。为以下 Canary 类型提供了蓝图:

  • 检测信号监控器

  • API Canary

  • 无效链接检查器

  • 可视化监控

  • Canary 记录器

  • GUI 工作流程

当您使用蓝图创建 Canary 时,在填写 CloudWatch 控制台中的字段时,页面的 Script editor(脚本编辑器)区域会将您正在创建的 Canary 显示为 Node.js 脚本。您还可以在此区域编辑 Canary 以进一步定制。

检测信号监控

检测信号脚本加载指定的 URL,并存储页面的屏幕截图和 HTTP 归档文件(HAR 文件)。它们还存储已访问 URL 的日志。

您可以使用 HAR 文件查看有关网页性能的详细数据。您可以分析 Web 请求列表并捕获性能问题,例如某个项的加载时间。

如果您的 canary 使用 syn-nodejs-puppeteer-3.1 或更高版本的运行时,您可以使用检测信号监控蓝图,以监控多个 URL 并查看状态、持续时间、关联的屏幕截图和 canary 运行报告的步骤摘要中各个 URL 的故障原因。

API Canary

API Canary 可以测试 REST API 的基本读写函数。REST 指表述性状态转移,是开发人员在创建 API 时需要遵循的一组规则。其中一条规则规定,指向特定 URL 的链接应返回一段数据。

Canary 可与任何 API 结合使用并测试所有类型的功能。每个 Canary 都可以做出多个 API 调用。

在使用 syn-nodejs-2.2 或更高版本运行时的 Canary 中,API Canary 蓝图支持将 API 作为 HTTP 步骤进行监控的多步骤 Canary。您可以在单个 Canary 中测试多个 API。每个步骤都是一个单独的请求,可以访问不同的 URL、使用不同的标头以及对是否捕获标题和响应正文使用不同的规则。通过不捕获标头和响应正文,可以防止敏感数据被记录下来。

API Canary 中的每个请求均包含以下信息:

  • 终端节点,即您请求的 URL。

  • 方法,它是发送到服务器的请求类型。REST API 支持 GET(读取)、POST(写入)、PUT(更新)、PATCH(更新)和 DELETE(删除)操作。

  • 标头,用于向客户端和服务器提供信息。它们用于身份验证和提供有关正文内容的信息。有关有效标头的列表,请参阅 HTTP 标头

  • 数据(或正文),其中包含要发送到服务器的信息。这仅用于 POST、PUT、PATCH 或 DELETE 请求。

  • 您请求的 URL。

API Canary 蓝图支持 GET 和 POST 方法。使用此蓝图时,您必须指定标头。例如,您可以指定 Authorization 作为 Key (键),并指定必要的授权数据作为该键的 Value (值)

如果您在测试 POST 请求,还可以在 Data (数据) 字段中指定要发布的内容。

与 API Gateway 的集成

API 蓝图与 Amazon API Gateway 集成。因此,您能够从与该 Canary 所在的同一个 Amazon 账户和区域选择一个 API Gateway API 和阶段,或上载 API Gateway 中的 Swagger 模板以进行跨账户和跨区域 API 监控。然后,您可以在控制台中选择其余详细信息来创建 Canary,而不是从 Scratch 输入这些详细信息。有关 API Gateway 的更多信息,请参阅什么是 Amazon API Gateway?

使用私有 API

您可以在 Amazon API Gateway 中创建使用私有 API 的 Canary。有关更多信息,请参阅 在 Amazon API Gateway 中创建私有 API?

无效链接检查器通过使用 document.getElementsByTagName('a') 收集您正在测试的 URL 内的所有链接。它仅测试您指定数量的链接,而且 URL 本身计为第一个链接。例如,如果要检查包含五个链接的页面上的所有链接,则必须指定 Canary 跟踪六个链接。

使用 syn-nodejs-2.0-beta 或更高版本运行时创建的无效链接检查器 Canary 支持以下额外功能:

  • 提供包含所检查链接、状态代码、故障原因(如有)以及源页面和目标页面屏幕截图的报告。

  • 查看 Canary 结果时,您可以筛选以仅查看无效链接,然后根据故障原因修复链接。

  • 此版本会捕获每个链接的带注释源页面屏幕截图,并突出显示链接所在的锚点。不会对隐藏组件添加注释。

  • 您可以将此版本配置为捕获源页面和目标页面的屏幕截图、仅捕获源页面或仅捕获目标页面的屏幕截图。

  • 此版本修复了早期版本中的一个问题,在早期版本中,即使从第一页抓取了更多链接,Canary 脚本也会在第一个无效链接后停止。

如果您希望使用 syn-1.0 来更新现有 Canary 以使用新的运行时,则必须删除并重新创建 Canary。这些功能并不会随着将现有 Canary 更新到新运行时而变得可用。

无效链接检查器 Canary 可检测以下类型的链接错误:

  • 404 未找到页面

  • 主机名无效

  • 错误的 URL。例如,URL 缺少括号、包含多余的斜线,或者协议错误。

  • 无效的 HTTP 响应代码。

  • 主机服务器返回没有内容和没有响应代码的空响应。

  • HTTP 请求在 Canary 运行期间持续超时。

  • 主机持续丢弃连接,因为它配置错误或太忙。

可视监控蓝图

可视化监控蓝图包含用以比较在 Canary 运行期间捕获的屏幕截图与在基准 Canary 运行期间捕获的屏幕截图的代码。如果两个屏幕截图之间的差异超过阈值百分比,则 Canary 将失败。运行 syn-puppeteer-node-3.2 和更高版本的 Canary 支持可视化监控。运行 Python 和 Selenium 的 Canary 中目前不支持可视化监控。

可视化监控蓝图在默认蓝图 Canary 脚本中包含以下代码行,这些代码可实现可视化监控。

syntheticsConfiguration.withVisualCompareWithBaseRun(true);

将此行添加到脚本后,Canary 首次成功运行时,它会使用在该运行期间捕获的屏幕截图作为比较基准。在 Canary 的该首次运行之后,您可以使用 CloudWatch 控制台编辑 Canary 以执行以下任一操作:

  • 将 Canary 的下一次运行设置为新基准。

  • 在当前基准屏幕截图上绘制边界,以指定在可视化比较过程中要忽略的屏幕截图区域。

  • 删除屏幕截图,使其不用于可视化监控。

有关使用 CloudWatch 控制台编辑 Canary 的更多信息,请参阅 编辑或删除 Canary

您还可以通过使用 nextrunlastrun 参数或在 UpdateCanary API 中指定 Canary 运行 ID 来更改用作基准的 Canary 运行。

使用可视化监控蓝图时,您可以输入要在其中捕获屏幕截图的 URL,并将差值阈值指定为百分比。在基准运行之后,只要在 Canary 的未来运行中检测到大于该阈值的可视化差异,便会触发 Canary 故障。在基准运行之后,您还可以编辑 Canary,以在可视化监控过程中要忽略的基准屏幕截图上“绘制”边界。

可视化监控功能由 ImageMagick 开源软件工具包提供支持。有关更多信息,请参阅 ImageMagick

Canary 记录器

使用 Canary 记录器蓝图,您可以使用 CloudWatch Synthetics Recorder 记录您的点击并在网站上键入操作,并自动生成可用于创建按相同步骤操作的 Canary 的 Node.js 脚本。CloudWatch Synthetics Recorder 是 Amazon 推出的 Google Chrome 扩展程序。

开发团队:CloudWatch Synthetics Recorder 基于无头记录器

有关更多信息,请参阅 使用面向 Google Chrome 的 CloudWatch Synthetics Recorder

GUI 工作流生成器

GUI 工作流生成器蓝图验证是否可以在您的网页上执行操作。例如,如果您有一个带有登录表单的网页,则 Canary 可以填充用户和密码字段并提交表单,以验证网页是否正常工作。

当您使用蓝图创建此类型的 Canary 时,可以指定希望 Canary 在网页上执行的操作。您可以使用的操作如下:

  • 单击 – 选择您要指定的元素,然后模拟用户单击或选择该元素的行为。

    若要在 Node.js 脚本中指定该元素,请使用 [id=]a[class=]

    若要在 Python 脚本中指定该元素,请使用 xpath //*[@id=]//*[@class=]

  • 验证选择器 – 验证网页上存在指定的元素。此测试对于验证之前的操作是否导致使用正确的元素填充页面非常有用。

    若要在 Node.js 脚本中指定待验证的元素,请使用 [id=]a[class=]

    若要在 Python 脚本中指定待验证的元素,请使用 xpath //*[@id=]//*[class=]

  • 验证文本 – 验证指定的字符串是否包含在目标元素中。此测试对于验证之前的操作是否导致显示正确的文本非常有用。

    若要在 Node.js 脚本中指定元素,请使用诸如 div[@id=]//h1 之类的格式,因为此操作使用 Puppeteer 中的 waitForXPath 函数。

    若要在 Python 脚本中指定元素,请使用 xpath 格式(例如 //*[@id=] 或 //*[@class=]),因为此操作使用 Selenium 中的 implicitly_wait 函数。

  • 输入文本 – 在目标元素中写入指定的文本。

    若要在 Node.js 脚本中指定待验证的元素,请使用 [id=]a[class=]

    若要在 Python 脚本中指定待验证的元素,请使用 xpath //*[@id=]//*[@class=]

  • 单击并导航 – 在选择指定的元素之后,等待整个页面加载。当您需要重新加载页面时,这非常有用。

    若要在 Node.js 脚本中指定该元素,请使用 [id=]a[class=]

    若要在 Python 脚本中指定该元素,请使用 xpath //*[@id=]//*[@class=]

例如,以下蓝图使用 Node.js。其会单击指定 URL 上的 firstButton,验证预期的选择器是否出现了预期文本,将名称 Test_Customer 输入到 Name(名称)字段中,单击 Login(登录)按钮,然后通过检查下一页上的 Welcome(欢迎)文本来验证登录是否成功。


              控制台中的创建 Canary 页面,其中填充了 GUI 工作流蓝图的字段。

使用以下运行时的 GUI 工作流 Canary 还提供每次 Canary 运行所执行的步骤的摘要。您可以使用与每个步骤关联的屏幕截图和错误消息来查找故障的根本原因。

  • syn-nodejs-2.0 或更高版本

  • syn-python-selenium-1.0 或更高版本