AWS

10 mar, 2016

Novo CloudWatch Events – monitore e responda às mudanças dos seus recursos da AWS

Publicidade

Quando você olhar por trás das cortinas das aplicações que funcionam com recursos da AWS, você verá muita coisa acontecendo nos bastidores. Instâncias EC2 são lançadas e terminadas por políticas do Auto Scaling em resposta a mudanças na carga do sistema, tabelas do Amazon DynamoDB, tópicos do Amazon SNS e filas do Amazon SQS são criados e excluídos e os atributos de recursos existentes são alterados no AWS Management Console, por APIs da AWS ou na AWS Command Line Interface (CLI).

Muitos dos nossos clientes criam suas próprias ferramentas de alto nível para acompanhar, monitorar e controlar o estado geral dos seus ambientes AWS. Até agora, essas ferramentas têm trabalhado na forma de polling. Em outras palavras, eles chamam periodicamente funções da AWS, como DescribeInstancesDescribeVolumes e ListQueues, para listar os recursos da AWS de vários tipos (instâncias EC2, volumes EBS e filas SQS) e monitorar seu estado. Uma vez que tem estas listas, eles precisam chamar outras APIs para obter informações adicionais de estado para cada recurso, compará-los com dados históricos para detectar alterações e, em seguida, tomar as medidas necessárias. Conforme seus sistemas se tornem maiores e mais complexos, tudo neste polling e monitoramento de estados pode tornar-se bastante oneroso.

Novo CloudWatch Events

A fim de permitir o controle de alterações em seus recursos da AWS com menos sobrecarga e maior eficiência, estamos introduzindo o CloudWatch Events.

O CloudWatch Events proporciona um fluxo quase em tempo real de eventos do sistema que descrevem as mudanças nos recursos da AWS. Usando regras simples que você pode configurar em alguns minutos, você pode facilmente rotear cada tipo de evento para um ou mais destinos: funções do AWS Lambda, streams do Amazon Kinesis, tópicos do Amazon SNS e metas internas.

Você pode pensar no CloudWatch Events como o sistema nervoso central do seu ambiente AWS. Ele é conectado com todos os serviços suportados e fica ciente das mudanças operacionais à medida que elas acontecem. Então, impulsionado por suas regras, ele ativa funções e envia mensagens (ativando músculos, se preferir) para responder ao ambiente, fazendo alterações, capturando informações de estado ou tomar uma ação corretiva.

Estamos lançando o CloudWatch Events com um conjunto inicial de serviços e eventos da AWS e um plano para suportar muitos mais ao longo do próximo ano.

Aprofundando no CloudWatch Events

Os três componentes principais que você precisa saber sobre são: eventos, regras e metas.

  • Eventos (representados como pequenas bolhas de JSON) são gerados de quatro formas. Primeiro, eles surgem de dentro da AWS quando os recursos mudam de estado. Por exemplo, um evento é gerado quando o estado de uma instância EC2 muda de pendente para executando ou quando o Auto Scaling lança uma instância. Segundo, os eventos são gerados por chamadas de API e do sign-ins do console, que são entregues ao Amazon CloudWatch Events pelo CloudTrail. Terceiro, o seu próprio código pode gerar eventos no nível do aplicativo e publicá-los para processamento no Amazon CloudWatch Events. Quarto, eles podem ser emitidos de forma programada, com opções para periodicidade ou agendamento no estilo Cron.
  • Regras combinam eventos de entrada com uma ou mais metas para processamento. As regras não são processadas em qualquer ordem particular; todas as regras que correspondem a um evento serão processadas (isto permite que diferentes partes de uma única organização olhem de forma independente para eventos e processos que são de interesse).
  • Metas processam eventos e são especificadas dentro das regras. Existem quatro tipos de destino iniciais: built-in, funções lambda, streams Kinesis e tópicos do SNS, com mais tipos na prancheta. Uma única regra pode especificar vários destinos. Cada evento é transmitido para cada alvo no formato JSON. Cada regra tem a possibilidade de personalizar o JSON que flui para a meta. Eles podem optar por passar o evento como-é, passar somente algumas chaves (e os valores associados) para o alvo, ou para passar uma string (literal) constante.

CloudWatch Events em ação

Vamos em frente e definir uma regra ou duas! Vou usar uma função Lambda simples chamada SomethingHappened. Ela simplesmente irá registrar o conteúdo do evento:

aws01

Em seguida, eu mudo para o novo Console do CloudWatch Events, clico em Create rule e escolho uma fonte de evento (aqui está o menu com todas as opções):

aws02

Apenas uma nota rápida antes de seguir: alguns dos serviços da AWS disparam eventos diretamente. Outros são disparados com base nos eventos registrados no CloudTrail – que você precisa ativar para o(s) serviço(s) desejado(s), afim de recebê-los.

Quero manter o controle sobre as minhas instâncias do EC2, então eu escolhi EC2 a partir do menu. Posso optar por criar uma regra que dispara em qualquer transição de estado ou em uma transição para um ou mais estados que são de interesse:

aws03

Quero saber sobre as instâncias recém-lançadas, então eu vou escolher Running. Posso fazer a regra responder a qualquer uma das minhas instâncias na região, ou a instâncias específicas. Eu vou com a primeira opção; aqui está o meu padrão:

aws04

Agora eu preciso fazer algo acontecer. Faço isso escolhendo uma meta. Mais uma vez, aqui estão as minhas opções:

aws05

Eu escolho Lambda e escolho minha função:

aws06

Eu estou quase lá! Eu só preciso nomear e descrever a minha regra e, em seguida, clique em Create rule:

aws07

Ao clicar em Create rule, a regra já está pronta:

aws08

Agora eu posso testá-la com o lançamento de uma instância EC2. Na verdade, eu vou lançar cinco delas apenas para exercitar o meu código. Depois de esperar um minuto ou mais para as instâncias serem lançadas e inicializadas, posso checar minhas métricas do Lambda para verificar se a minha função foi invocada:

aws09

Me parece bom (as invocações anteriores foram para teste). Então eu posso visitar os logs do CloudWatch para ver a saída da minha função:

aws10

Como você pode ver, o evento contém informações essenciais sobre as instâncias recém-lançadas. Seu código pode chamar funções da AWS, a fim de aprender mais sobre o que está acontecendo. Por exemplo, você poderia chamar a DescribeInstances para acessar mais informações sobre as instâncias recém-lançadas.

É claro que uma função “real” faria algo muito mais interessante. Poderia adicionar algumas tags obrigatórias para a instância, atualizar uma visualização dinâmica ou enviar uma mensagem de texto via SNS. Se você quiser fazer qualquer uma (ou todas essas coisas), você precisaria ter uma função IAM mais permissiva para a função, é claro. Eu poderia fazer a regra mais geral (ou criar outra) caso eu queira capturar algumas das outras transições de estado.

Execução programada de regras

Eu também posso configurar uma regra que dispara periodicamente ou de acordo com um padrão descrito em uma expressão Cron. Veja como eu faria isso:

aws11

Você pode achar interessante saber que este é o mecanismo subjacente usado para configurar tarefas agendadas do Lambda, conforme anunciado na AWS re:Invent.

Acesso via API

Como a maioria dos serviços da AWS, você pode acessar o CloudWatch Events através de uma API. Aqui estão algumas das principais funções:

  • PutRule para criar uma nova regra.
  • PutTargets e RemoveTargets para conectar e desconectar metas às regras.
  • ListRules, ListTargetsByRule e DescribeRule para saber mais sobre as regras existentes.
  • PutEvents para enviar um conjunto de eventos para o CloudWatch events. Você pode usar esta função (ou o equivalente na CLI) para enviar os eventos do nível de aplicativos.

Métricas para os eventos

O CloudWatch Events relata uma série de métricas para o CloudWatch, tudo dentro do AWS/Events namespace. Você pode usar essas métricas para verificar se as regras estão disparando como esperado e para controlar o nível geral de atividades da sua coleção de regras.

As seguintes métricas são relatadas para o serviço como um todo:

  • InvocationsO número de vezes que a meta tenha sido invocada.
  • FailedInvocations – O número de vezes que uma chamada de uma meta falhou.
  • MatchedEvents – O número de eventos que corresponde a uma ou mais regras.
  • TriggeredRules – O número de regras que tenham sido acionadas.

As seguintes métricas são relatadas para cada regra:

  • Invocations – O número de vezes que as metas das regras foram invocadas.
  • TriggeredRules – O número de vezes que a regra foi acionada.

aws12

Em obras

Como muitos serviços emergentes da AWS, estamos lançando o CloudWatch Events com um conjunto inicial de recursos (e um monte de infraestrutura nos bastidores) e alguns, realmente grandes, planos – incluindo suporte para o AWS CloudFormation. Vamos ajustar nossos planos com base no seu feedback, mas você pode esperar a cobertura de muitos outros serviços da AWS e acesso às metas adicionais ao longo do tempo. Eu vou fazer o meu melhor para mantê-lo informado.

Comece a usar

Estamos lançando o CloudWatch Events nas regiões Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda) e Ásia-Pacífico (Tóquio). Ele está já disponível e você já pode começar a usá-lo!

Deixe suas dúvidas e/ou comentários ou escreva diretamente para o autor, Jeff Barr (em inglês).