使用 Amazon EventBridge 監控 Canary 事件 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon EventBridge 監控 Canary 事件

當 Canary 變更狀態或完成執行時,Amazon EventBridge 事件規則可以通知您。EventBridge 提供near-real-time的系統事件串流,說明 AWS 資源的變更。CloudWatch Synthetics 會全力將這些事件傳送至 Eventbridge。全力傳遞意味著 CloudWatch Synthetics 會嘗試將所有事件傳送至 EventBridge,但在某些罕見的情況下,事件可能無法傳遞。EventBridge 至少會處理一次接收的所有事件。此外,您的事件接聽程式可能不會依事件發生順序接收事件。

注意

Amazon EventBridge 是匯流排服務,可讓您用於將應用程式與來自各種來源的資料互相連線。如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的什麼是 Amazon EventBridge?

當 Canary 變更狀態或完成執行時,CloudWatch Synthetics 會發出事件。您可以建立包含事件模式的 EventBridge 規則,以符合從 CloudWatch Synthetics 傳送的所有事件類型,或只符合特定事件類型。當 Canary 觸發規則時,Eventbridge 會叫用該規則已定義的目標動作。這可讓您傳送通知、擷取事件資訊、採取修正動作、回應 Canary 狀態變更或完成 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 主題

    • AWS Lambda 函數

    • Kinesis 串流

    • 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. 新增主題作為規則目標。

    • 使用 Amazon SNS 主題的 Amazon Resource Name (ARN) 取代為 topic-arn

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

    若要讓 Amazon EventBridge 呼叫您的目標主題,您必須將以資源為基礎的政策新增到您的主題。如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的 Amazon SNS 許可

如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的 EventBridge 中的事件和事件模式