AWS

11 set, 2015

CloudWatch Logs Subscription Consumer + ElasticSearch + Kibana Dashboards

Publicidade

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.

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).