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

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

使用 Amazon EventBridge 监控 Canary 事件

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

注意

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

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

  • 调查金丝雀跑失败的时间

  • 调查什么时候一个金丝雀已经进入ERRORstate

  • 跟踪金丝雀的生命周期

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

来自 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" } }

成功完成金丝雀跑步

{ "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 事件桥入门中的Amazon EventBridge 用户指南

创建 EventBridge 规则 (CLI)

以下示例中的步骤创建一个 EventBridge 规则 Amazon SNS 该规则在名为my-canary-nameus-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主题 ARN与 Amazon SNS 主题的 Amazon SNS 资源名称 (ARN) 一起使用。

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

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

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