使用 监控 Canary 事件 Amazon EventBridge - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 监控 Canary 事件 Amazon EventBridge

Amazon EventBridge 事件规则可以在 Canary 更改状态或完成运行时通知您。 EventBridge 提供近乎实时的系统事件流以描述 AWS 资源的变化。 CloudWatchSynthetics EventBridge会尽最大努力将这些事件发送到 。最大努力交付意味着 CloudWatch Synthetics 尝试将所有事件发送到 EventBridge,但在极少数情况下,可能不会传送事件。 会至少EventBridge处理一次收到的所有事件。此外,您的事件侦听器可能不会按照事件发生的顺序接收事件。

注意

Amazon EventBridge 是一项事件总线服务,可用于将应用程序与来自各种来源的数据连接起来。有关更多信息,请参阅 Amazon EventBridge 用户指南 中的什么是 Amazon EventBridge.

CloudWatch 当 Canary 更改状态或完成运行时,Synthetics 将发出事件。您可以创建包含事件模式的 EventBridge 规则,以匹配从 CloudWatch Synthetics 发送的所有事件类型,或者仅匹配特定事件类型。当 Canary 触发规则时, EventBridge 会调用规则中定义的目标操作。这允许您发送通知、捕获事件信息并采取纠正措施以响应 Canary 状态更改或 Canary 运行完成。例如,您可以为以下使用案例创建规则:

  • 在 Canary 运行失败时进行调查

  • 调查 Canary 何时进入 ERROR 状态

  • 跟踪 Canary 的生命周期

  • 在工作流程中监控 Canary 运行成功或失败

来自 CloudWatch Synthetics 的示例事件

本部分列出了 CloudWatch Synthetics 中的示例事件。有关事件格式的更多信息,请参阅 中的EventBridge事件和事件模式

Canary 状态更改

在此事件类型中, current-state 和 的值previous-state可以如下所示:

CREATING | READY | STARTING | RUNNING | UPDATING | STOPPING | STOPPED | ERROR

{ "version": "0", "id": "8a99ca10-1e97-2302-2d64-316c5dedfd61", "detail-type": "Synthetics Canary Status Change", "source": "aws.synthetics", "account": "123456789012", "time": "2021-02-09T22:19:43Z", "region": "us-east-1", "resources": [], "detail": { "account-id": "123456789012", "canary-id": "EXAMPLE-dc5a-4f5f-96d1-989b75a94226", "canary-name": "events-bb-1", "current-state": "STOPPED", "previous-state": "UPDATING", "source-location": "NULL", "updated-on": 1612909161.767, "changed-config": { "executionArn": { "previous-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1", "current-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2" }, "vpcId": { "current-value": "NULL" }, "testCodeLayerVersionArn": { "previous-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1", "current-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2" } }, "message": "Canary status has changed" } }

成功完成 Canary 运行

{ "version": "0", "id": "989EXAMPLE-f4a5-57a7-1a8f-d9cc768a1375", "detail-type": "Synthetics Canary TestRun Successful", "source": "aws.synthetics", "account": "123456789012", "time": "2021-02-09T22:24:01Z", "region": "us-east-1", "resources": [], "detail": { "account-id": "123456789012", "canary-id": "989EXAMPLE-dc5a-4f5f-96d1-989b75a94226", "canary-name": "events-bb-1", "canary-run-id": "c6c39152-8f4a-471c-9810-989EXAMPLE", "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-28ddbe266797/2021/02/09/22/23-41-200", "test-run-status": "PASSED", "state-reason": "null", "canary-run-timeline": { "started": 1612909421, "completed": 1612909441 }, "message": "Test run result is generated successfully" } }

Canary 运行失败已完成

{ "version": "0", "id": "2644b18f-3e67-5ebf-cdfd-bf9f91392f41", "detail-type": "Synthetics Canary TestRun Failure", "source": "aws.synthetics", "account": "123456789012", "time": "2021-02-09T22:24:27Z", "region": "us-east-1", "resources": [], "detail": { "account-id": "123456789012", "canary-id": "af3e3a05-dc5a-4f5f-96d1-9989EXAMPLE", "canary-name": "events-bb-1", "canary-run-id": "0df3823e-7e33-4da1-8194-b04e4d4a2bf6", "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-989EXAMPLE/2021/02/09/22/24-21-275", "test-run-status": "FAILED", "state-reason": "\"Error: net::ERR_NAME_NOT_RESOLVED \"" "canary-run-timeline": { "started": 1612909461, "completed": 1612909467 }, "message": "Test run result is generated successfully" } }

可能是事件重复或者顺序颠倒。要确定事件的顺序,请使用 time 属性。

创建 EventBridge 规则的先决条件

在为 EventBridge Synthetics 创建 CloudWatch 规则之前,您应执行以下操作:

  • 熟悉 中的事件、规则和目标。EventBridge.

  • 创建和配置由 EventBridge 规则调用的目标。规则可以调用多种类型的目标,包括:

    • Amazon SNS 主题

    • AWS Lambda 函数

    • Kinesis 流

    • Amazon SQS 队列

有关更多信息,请参阅 Amazon EventBridge 中的什么是 Amazon EventBridge ?Amazon EventBridge 用户指南和 入门。

创建 EventBridge 规则 (CLI)

以下示例中的步骤创建一个 EventBridge 规则,以便在 Amazon SNS 中名为 的 Canary my-canary-name 完成运行或更改状态时发布 us-east-1 主题。

  1. 创建 规则。

    aws events put-rule \ --name TestRule \ --region us-east-1 \ --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"

    您从模式中省略的任何属性都将被忽略。

  2. 将主题添加为规则目标。

    • Replace topic-arn 替换为Amazon SNS主题的 Amazon 资源名称 (ARN)。

    aws events put-targets \ --rule TestRule \ --targets "Id"="1","Arn"="topic-arn"
    注意

    要允许 Amazon EventBridge 调用您的目标主题,您必须将基于资源的策略添加到您的主题中。有关更多信息,请参阅 中的 Amazon SNS Amazon EventBridge 用户指南权限

有关更多信息,请参阅 EventBridge 中的 中的事件和事件模式Amazon EventBridge 用户指南