AWS CloudWatch com EventBridge
1. Pré-requisitos
- Conta AWS com acesso aos serviços CloudWatch e EventBridge.
- Endpoint de Webhook AIOPs público HTTPS para receber as notificações.
- Permissões IAM adequadas para criar regras e destinos no EventBridge.
2. Visão Geral
Automatizar o envio de notificações para um webhook externo sempre que um alarme do CloudWatch for disparado, utilizando o EventBridge para rotear e transformar o evento em um formato JSON específico.
3. Passo a passo
3.1. Criar um Alarme no CloudWatch
- Acesse o Console do CloudWatch.
- Na seção “Alarmes”, clique em “Criar alarme”.
- Selecione a métrica desejada (exemplo: CPUUtilization de uma instância EC2).
- Defina as condições para disparo do alarme.
- Nomeie o alarme e clique em “Criar alarme”.
Mais detalhes sobre como criar um alerta no CloudWatch podem ser vistos na https://docs.aws.amazon.com/pt_br/AmazonCloudWatch/latest/monitoring/Alarm-On-Metrics.htmldocumentação oficial da AWS.
3.2. Criar uma Regra no EventBridge
- Acesse o Console do EventBridge.
- No painel de navegação, clique em “Regras” e depois em “Criar regra”.
- Defina um nome e uma descrição para a regra.
- Selecione o event bus padrão (“AWS default event bus”).
- Escolha “Rule with an event pattern”.
- Configure o padrão de eventos para capturar alarmes do CloudWatch:
{
"source": ["aws.cloudwatch"],
"detail-type": ["CloudWatch Alarm State Change"]
}(Opcional: adicione filtros para recursos ou estados específicos.)
Mais detalhes sobre como criar uma Regra no EventBridge podem ser vistos na https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-get-started.html#eb-gs-create-ruledocumentação oficial da AWS.
3.3. Configurar o Destino (Webhook via API Destination)
- Crie uma conexão de API Destination:
- Em “API destinations”, clique em “Connections”.
- Clique em “Create connection”.
- Defina nome, tipo de autenticação e credenciais (API key, OAuth, basic auth).
- Crie o API Destination:
- Em “API destinations”, clique em “Create API destination”.
- Defina nome, endpoint HTTPS do webhook, método HTTP (ex: POST).
- O endpoint deverá ser:
- https://<DOMINIO_AIOPS>/services/collector/event
- Gere uma API Key e adicione à configuração.
- Associe a conexão criada anteriormente.
- Defina o limite de taxa de invocação (ex: 10 eventos por segundo).
- Associe o destino à regra:
- Na criação da regra, em “Select targets”, escolha “API destination”.
- Selecione o destino criado.
3.4. Configurar o Input Transformer (Formatação do JSON)
- Defina o Input Path para mapear variáveis do evento CloudWatch para o formato desejado:
{
"adapter_kind": "$.source",
"alert_criticality": "$.detail.state.value",
"alert_definition": "$.detail.state.reason",
"alert_id": "$.id",
"alert_impact": "$.detail.state.value",
"alert_recommendations": "$.detail.state.reason",
"alert_status": "$.detail.state.value",
"alert_subtype": "$.detail.state.value",
"alert_type": "$.detail-type",
"cancel_time": "$.detail.state.timestamp",
"create_time": "$.time",
"link_to_alert": "$.resources[0]",
"object_efficiency_state": "$.detail.state.value",
"object_health_state": "$.detail.state.value",
"object_risk_state": "$.detail.state.value",
"resource_id": "$.detail.alarmName",
"resource_kind": "$.detail.configuration.metrics[0].metricStat.metric.namespace",
"resource_name": "$.detail.configuration.metrics[0].metricStat.metric.dimensions.InstanceId",
"update_time": "$.detail.state.timestamp"
}- Defina o Input Template para gerar o JSON personalizado:
{
"start_date": "<create_time>",
"update_date": "<update_time>",
"cancel_date": "<cancel_time>",
"device_id": "<resource_id>",
"adapter_type": "<adapter_kind>",
"device_type": "<resource_kind>",
"device_name": "<resource_name>",
"health": "<object_health_state>",
"risk": "<object_risk_state>",
"efficiency": "<object_efficiency_state>",
"impact": "<alert_impact>",
"criticality": "<alert_criticality>",
"check": "<alert_definition>",
"type": "<alert_type>",
"sub_type": "<alert_subtype>",
"alert_id": "<alert_id>",
"status": "<alert_status>",
"recommendations": "<alert_recommendations>",
"alert_url": "<link_to_alert>"
}3.5. Configurar Dead Letter Queue (Opcional, para tratamento de falhas)
- Crie uma fila SQS para DLQ.
- Associe a DLQ ao destino da regra para capturar eventos que não puderam ser entregues.
3.6. Testar a Integração
- Disparar o alarme manualmente (por exemplo, simulando alta utilização de CPU na EC2).
- Monitorar o disparo via CloudWatch Metrics e Logs.
- Verificar o recebimento da notificação no endpoint do webhook.
3.7. Monitoramento e Manutenção
- Acompanhe métricas no CloudWatch (FailedInvocations, Invocations).
- Analise logs e mensagens da DLQ em caso de falhas.
- Ajuste permissões e configurações conforme necessário.
4. Resumo dos Recursos Utilizados
Serviço | Função Principal |
|---|---|
CloudWatch | Monitoramento e disparo de alarmes |
EventBridge | Roteamento e transformação de eventos |
API Destination | Entrega de eventos para webhook externo |
SQS (DLQ) | Tratamento de eventos não entregues (opcional) |
5. Considerações Finais
- Sempre valide o formato do JSON enviado ao webhook.
- Teste diferentes cenários de falha para garantir robustez.
- Documente as permissões IAM necessárias para cada etapa.