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

使用 Amazon EventBridge 监控 Canary 事件

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

注意

Amazon EventBridge 是一种事件总线服务,您可以用其轻松地将应用程序与来自各种来源的数据相连接。有关更多信息,请参阅 Amazon EventBridge 用户指南中的什么是 Amazon EventBridge?

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

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

  • 在 Canary 变为 ERROR 状态时执行调查

  • 跟踪 Canary 的生命周期

  • 作为工作流程的一部分监控 Canary 运行成功或故障

CloudWatch Synthetics 发送的事件示例

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

Canary 状况更改

在此事件类型中,current-stateprevious-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 规则的先决条件

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

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

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

    • Amazon SNS 主题

    • Amazon Lambda 函数

    • Kinesis Streams

    • Amazon SQS 队列

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

创建 EventBridge 规则 (CLI)

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

  1. 创建规则。

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

    模式中省略的属性都将会被忽略。

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

    • topic-arn 替换为 Amazon SNS 主题的 Amazon Resource Name (ARN)。

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

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

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