可用于 Canary 脚本的库函数 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

可用于 Canary 脚本的库函数

CloudWatch Synthetics 中包含多个内置函数,您在编写用作 Canary 的 Node.js 脚本时可以调用这些函数。

某些函数适用于 UI 和 API Canary。其他函数仅适用于 UI Canary。UI Canary 是使用 getPage() 函数,并使用 Puppeteer 作为 Web 驱动程序进行导航和与网页交互的 Canary。

适用于所有 Canary 的库函数

以下 CloudWatch Synthetics 库函数适用于所有 Canary。

getLogLevel();

检索 Synthetics 库的当前日志级别。可能的值包括:

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

例如:

let logLevel = synthetics.getLogLevel();

setLogLevel();

设置 Synthetics 库的日志级别。可能的值包括:

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

例如:

synthetics.setLogLevel(0);

Synthetics Logger

SyntheticsLogger 将日志写入控制台和同一日志级别的本地日志文件。仅当日志级别与所调用的日志函数所需的日志记录级别相同或比其级别低时,此日志文件才会写入到这两个位置。

本地日志文件中的日志记录语句前面加上“DEBUG:”、“INFO:”等,以便与所调用的函数的日志级别相匹配。

如果您希望在与 Synthetics Canary 日志记录相同的日志级别运行 Synethetics 库,可以使用 SyntheticsLogger。

如果要创建上传到 S3 结果位置的日志文件,不需要使用 SyntheticsLogger。您可以在 /tmp 文件夹中创建不同的日志文件。在 /tmp 文件夹下创建的任何文件都会作为构件上传到 S3 中的结果位置。

要使用 Synthetics 库日志记录程序,请执行以下操作:

const log = require('SyntheticsLogger');

有用的函数定义:

log.debug(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.debug("Starting step - login.");

log.error(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

try { await login(); catch (ex) { log.error("Error encountered in step - login.", ex); }

log.info(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.info("Successfully completed step - login.");

log.log(message, ex);

这是 log.info 的一个别名。

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.log("Successfully completed step - login.");

log.warn(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);

仅适用于 UI Canary 的库函数

以下 CloudWatch Synthetics 库函数仅适用于 UI Canary。

async addUserAgent(page, userAgentString);

此函数可将 userAgentString 附加到指定页面的 User-Agent 标头。

例如:

await synthetics.addUserAgent(page, "MyApp-1.0");

结果是页面的 User-Agent 标头被设置为 browsers-user-agent-header-valueMyApp-1.0

async executeStep(stepName = null, functionToExecute);

执行提供的步骤,并使用开始/通过/失败日志记录、开始/通过/失败屏幕截图,以及通过/失败和持续时间指标对其进行包装。它还执行以下操作:

  • 记录步骤开始。

  • 获取名为 <stepName>-starting 的屏幕截图。

  • 启动计时器。

  • 执行提供的函数。

  • 如果函数正常返回,则计为通过。如果函数引发异常,则计为失败。

  • 结束计时器。

  • 记录步骤是通过还是失败

  • 获取名为 <stepName>-succeeded<stepName>-failed 的屏幕截图。

  • 发出 stepName SuccessPercent 指标,100 表示通过,0 表示失败。

  • 发出 stepName Duration 指标,指标的值基于步骤开始和结束时间。

  • 最后,返回 functionToExecute 返回的内容或重新抛出 functionToExecute 抛出的内容。

例如:

await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) { await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});

响应:

返回 functionToExecute 返回的内容。

getPage();

返回当前打开的页面作为 Puppeteer 对象。有关更多信息,请参阅 Puppeteer API v1.14.0

例如:

let page = synthetics.getPage();

响应:

在当前浏览器会话中打开的页面(Puppeteer 对象)。

getRequestResponseLogHelper();

将此函数用作生成器模式,用于调整请求和响应日志记录标记。

例如:

synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;

响应:

{RequestResponseLogHelper}

RequestResponseLogHelper 类

处理精细配置,以及创建请求和响应负载的字符串表示。

class RequestResponseLogHelper { constructor () { this.request = {url: true, resourceType: false, method: false, headers: false, postData: false}; this.response = {status: true, statusText: true, url: true, remoteAddress: false, headers: false}; } withLogRequestUrl(logRequestUrl); withLogRequestResourceType(logRequestResourceType); withLogRequestMethod(logRequestMethod); withLogRequestHeaders(logRequestHeaders); withLogRequestPostData(logRequestPostData); withLogResponseStatus(logResponseStatus); withLogResponseStatusText(logResponseStatusText); withLogResponseUrl(logResponseUrl); withLogResponseRemoteAddress(logResponseRemoteAddress); withLogResponseHeaders(logResponseHeaders);

例如:

synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper() .withLogRequestPostData(true) .withLogRequestHeaders(true) .withLogResponseHeaders(true));

响应:

{RequestResponseLogHelper}

setRequestResponseLogHelper();

将此函数用作成生器模式,用于设置请求和响应日志记录标记。

例如:

synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);

响应:

{RequestResponseLogHelper}