

# Monitorar eventos do canário com o Amazon EventBridge
<a name="monitoring-events-eventbridge"></a>

As regras de evento do Amazon EventBridge podem notificar você quando os canaries alterarem o status ou concluírem execuções. O Eventbridge oferece um fluxo quase em tempo real dos eventos do sistema que descrevem as alterações nos recursos da AWS. O CloudWatch Synthetics envia esses eventos ao EventBridge na base do *melhor esforço*. A entrega do melhor esforço significa que o CloudWatch Synthetics tenta enviar todos os eventos ao EventBridge, mas, em alguns casos raros, o evento poderá não ser entregue. O EventBridge processa, pelo menos uma vez,todos os eventos recebidos. Além disso, os listeners do evento poderão não receber os eventos na ordem em que estes ocorreram.

**nota**  
O Amazon EventBridge é um serviço de barramento de eventos que você pode usar para facilitar a conexão de aplicações a dados de diversas origens. Para obter mais informações, consulte [O que é o Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) no *Manual do usuário do Amazon EventBridge*.

O CloudWatch Synthetics emite um evento quando um canário altera o estado ou conclui uma execução. É possível criar uma regra EventBridge que inclua um padrão de evento para corresponder a todos os tipos de eventos enviados do CloudWatch Synthetics ou que corresponda apenas a tipos de eventos específicos. Quando um canário aciona uma regra, o EventBridge invoca as ações de destino definidas na regra. Isso permite enviar notificações, capturar informações de eventos e executar ações corretivas em resposta a uma alteração de estado ou a conclusão de uma execução do canário. Por exemplo, você pode criar regras para os seguintes casos de uso:
+ Investigar quando uma execução do canário falha
+ Investigar quando um canário passou para o estado o `ERROR`
+ Rastrear o ciclo de vida de um canário
+ Monitorar o sucesso ou falha de execução do canário como parte de um fluxo de trabalho

## Exemplos de eventos do CloudWatch Synthetics
<a name="synthetics-event-examples"></a>

Esta seção lista exemplos de eventos do CloudWatch Synthetics. Para obter mais informações sobre formato de eventos, consulte [Eventos e padrões de eventos no EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html). 

 **Alteração do estado do canário** 

Neste tipo de evento, os valores de `current-state` e `previous-state` podem ser:

`CREATING` \$1 `READY` \$1 `STARTING` \$1 `RUNNING` \$1 `UPDATING` \$1 `STOPPING` \$1 `STOPPED` \$1 `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"
                }
}
```

 **Execução do canário concluída com êxito** 

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

 **Execução do canário concluída com falha** 

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

É possível que os eventos estejam duplicados ou fora de ordem. Para determinar a ordem dos eventos, use a propriedade `time`.

## Pré-requisitos para criar regras do EventBridge
<a name="create-events-rule-prereqs"></a>

Antes de criar uma regra do EventBridge para o CloudWatch Synthetics, é necessário:
+ Familiarize-se com os eventos, regras e destinos no EventBridge.
+ Crie e configure os destinos invocados por suas regras do EventBridge. As regras podem invocar muitos tipos de destinos, incluindo:
  + Tópicos do Amazon SNS
  + Funções do AWS Lambda
  + Streams do Kinesis
  + Filas do Amazon SQS

Para obter mais informações, consulte [O que é o Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) e [Começar a usar o Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) no *Manual do usuário do Amazon EventBridge*.

## Criar uma regra do EventBridge (CLI)
<a name="create-events-rule-cli"></a>

As etapas no exemplo a seguir criam uma regra EventBridge que publica um tópico do Amazon SNS quando o canário chamado `my-canary-name` em `us-east-1` conclui uma execução ou altera o estado.

1. Crie a regra.

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

   As propriedades que você omitir do padrão serão ignoradas.

1. Adicione o tópico como um destino de regra.
   + Substitua *topic-arn* pelo nome do recurso da Amazon (ARN) do tópico do Amazon SNS.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**nota**  
Para permitir que o Amazon EventBridge chame o tópico de destino, você deve adicionar uma política baseada em recursos ao tópico. Para obter mais informações, consulte [Permissões do Amazon SNS](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) no *Manual do usuário do Amazon EventBridge*.

Para obter mais informações, consulte [Eventos e padrões de eventos no EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) no *Manual do usuário do Amazon EventBridge*.