Muitas das coisas que eu publiquei ultimamente parecem envolver combinações interessantes de dois ou mais serviços da AWS e o artigo de hoje não é uma exceção. Antes de me aprofundar, eu gostaria de introduzir brevemente todos os serviços que serão mencionados mais adiante. Alguns serão apenas uma revisão, mas eu quero ter certeza de que cada um dos meus posts faça sentido para alguém que sabe pouco ou mesmo nada sobre a AWS.
- O Amazon Kinesis é um serviço totalmente gerenciado e baseado em nuvem para o processamento de dados em tempo real de streams de dados distribuídos de grande porte. Leia meu post Amazon Kinesis – Real-Time Processing of Streaming Big Data para saber mais.
- A biblioteca Kinesis Connector auxilia a conectar o Kinesis a outros serviços da AWS ou não.
- O AWS CloudFormation ajuda a definir, criar e gerenciar um grupo de recursos relacionados à AWS usando um modelo de exemplo.
- O CloudWatch Logs permite monitorar e solucionar problemas em seus sistemas e aplicativos usando os arquivos de log dos sistemas, dos aplicativos e personalizados existentes. Meu post, Store and Monitor OS & Application Log Files with Amazon CloudWatch, te dirá muito mais sobre este recurso.
- O AWS Lambda executa seu código (atualmente Node.js ou Java) em resposta a eventos. Ele gerencia os recursos de computação para você para que você possa se concentrar no código. Leia AWS Lambda – Run Code in the Cloud para saber mais. Muitos desenvolvedores estão usando o Lambda (muitas vezes em conjunto com o novo Amazon API Gateway) para construir microserviços altamente escaláveis que são chamados muitas vezes por segundo.
- O VPC Flow Logs possibilita acessar o tráfego de rede relacionado a um VPC, um VPC subnet, ou a uma interface de rede Elastic. Mais uma vez, eu tenho um post para isso: VPC Flow Logs – Registrar e exibir o fluxo do tráfego de redes.
- Finalmente, o AWS CloudTrail registra as chamadas de APIs da AWS para a sua conta e fornece os arquivos de log para você. Claro, eu tenho um post para isso: AWS CloudTrail – Capture AWS API Activity.
Os últimos três itens acima têm um importante atributo em comum – cada um pode criar fluxos volumosos de dados de eventos que devem ser armazenados de forma eficiente, indexados, e visualizado, para ter o seu valor.
Visualize dados de Eventos
Hoje eu gostaria de mostrar como você pode usar o Kinesis e o novo CloudWatch Logs Subscription Consumer para fazer exatamente isso. O subscription consumer é um leitor de fluxo especializado do Kinesis. Ele vem com conectores internos para o ElasticSearch e S3, e pode ser estendido para suportar outros destinos.
Nós criamos um modelo do CloudFormation que lançará um cluster do ElasticSearch no EC2 (dentro de um VPC criado pelo modelo), cria um registro do subscription consumer para encaminhar os dados do evento para o ElasticSearch, e proporciona um bom conjunto de dashboards executados pela ferramenta de exploração e visualização Kibana. Temos um conjunto de dashboards padrão para VPC Flow Logs, Lambda e CloudTrail; você pode personalizá-los conforme necessário, ou criar outros novos para seus próprios grupos de registros do CloudWatch logs.
A pilha leva cerca de 10 minutos para criar todos os recursos necessários. Quando estiver pronto, a guia Output no Console do CloudFormation irá mostrar-lhe as URLs para os dashboards e ferramentas administrativas:
A pilha inclui versões 3 e 4 do Kibana, juntamente com painéis de amostra para a versão mais antiga (se você quiser usar o Kibana 4, você precisará fazer um pouco de configuração manual).
O próximo exemplo exibe informações sobre invocações de funções Lambda, complementada por dados gerados pela própria função:
As três colunas finais foram produzidas pelo seguinte código na função Lambda. A função está processando um fluxo do Kinesis, e registra algumas informações sobre cada invocação:
exports.handler = function(event, context) { var start = new Date().getTime(); var bytesRead = 0; event.Records.forEach(function(record) { // Kinesis data is base64 encoded so decode here payload = new Buffer(record.kinesis.data, 'base64').toString('ascii'); bytesRead += payload.length; // log each record console.log(JSON.stringify(record, null, 2)); }); // collect statistics on the function's activity and performance console.log(JSON.stringify({ "recordsProcessed": event.Records.length, "processTime": new Date().getTime() - start, "bytesRead": bytesRead, }, null, 2)); context.succeed("Successfully processed " + event.Records.length + " records."); };
Há um pouco de magia acontecendo nos bastidores aqui! O subscription consumer notou que a entrada do registro foi um objeto JSON válido e instruiu o ElasticSearch a indexar cada um dos valores. Isso é legal, simples e poderoso; Eu aconselho que você tome algum tempo para estudar este padrão de projeto e ver se há maneiras de usá-lo em seus próprios sistemas.
Para mais informações sobre configuração e uso desse elegante modelo, visite a página CloudWatch Logs Subscription Consumer.
Consuma o Consumer
Você pode usar o CloudWatch Logs Subscription Consumer nos seus próprios aplicativos. Você pode estendê-lo para adicionar suporte para outros destinos, adicionando outros conectores (use os conectores ElasticSearch e S3 como exemplos e pontos de partida).