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

使用 Amazon EventBridge 监控金丝雀事件

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

注意

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

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

  • 在金丝雀运行失败时执行调查

  • 在金丝雀变为 ERROR 状态时执行调查

  • 跟踪金丝雀的生命周期

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

CloudWatch Synthetics 发送的事件示例

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

金丝雀状况更改

在此事件类型中,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" } }

已完成的成功金丝雀运行

{ "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" } }

已完成的失败金丝雀运行

{ "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 的金丝雀完成一次运行或更改状态时发布 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 中的事件和事件模式