Utilizando o ELK Stack como ferramenta de Business Intelligence

Como integrar um app Ruby on Rails pelo docker com o ELK Stack

Hugo Dias
Experience Valley

--

Conheço o ELK Stack (Elasticsearch, Logstash, Kibana) a algum tempo e como desenvolvedor sempre tive a — errada — ideia que este conjunto de ferramentas fosse destinado apenas à análise de logs e acompanhamento da saúde das aplicações.

De um tempo pra cá tenho estudado Data Science e consegui entender o potencial deste stack quando o assunto é Business Intelligence.

Porém, isso não é nenhuma novidade.

Diversas empresas já utilizam o ELK (Elasticsearch, Logstash e Kibana) para BI.

A intencão do post é explicar como tudo isso funciona, além de mostrar como integrar esta stack em um app Ruby on Rails.

Para você que trabalha com Data Science e BI…

Vou mostrar o potencial do ELK Stack quando o assunto é analisar dados para a inteligência do negócio, utilizando logs de eventos da aplicação.

Para você que é desenvolvedor …

Vou ensinar como instalar e integrar o ELK Stack a um app Ruby on Rails no docker.

Mas o que é o ELK Stack?

“ELK” is the acronym for three open source projects: Elasticsearch, Logstash, and Kibana. Elasticsearch is a search and analytics engine. Logstash is a server‑side data processing pipeline that ingests data from multiple sources simultaneously, transforms it, and then sends it to a “stash” like Elasticsearch. Kibana lets users visualize data with charts and graphs in Elasticsearch.

The Elastic Stack is the next evolution of the ELK Stack.

Source: https://www.elastic.co/elk-stack

A função de cada componente do stack é bem definida:

  • O Logstash tem o trabalho de coletar e processar os logs, além de enviar para o Elasticsearch onde serão indexados;
  • O Elasticsearch tem a função de fazer busca nestes índices da melhor forma possível;
  • O Kibana monta a interface para que possamos fazer as buscas e visualizar dados em forma de lista, gráfico, etc.

O que estamos criando aqui é uma search engine poderosa.

Calma calma, não estamos criando um google, mas a intenção é que o comportamento seja parecido.

Fazemos perguntas e ele nos dá respostas.

Estas respostas podem vir em forma de listas, gráficos de linha, de barra, mapa de geolocalização, contadores, etc…

Exemplo de widgets para o dashboard do Kibana

Quanto maior a quantidade e a qualidade dos dados, mais perguntas poderão ser respondidas.

Então antes de começar é necessário que você saiba o que realmente importa para a inteligência do seu negócio, ou seja, você precisa ter as KPIs bem definidas.

Depois disso é preciso montar uma boa estrutura para os logs, afinal toda a análise de dados será feita em cima desta estrutura.

Como estamos gravando eventos, sugiro uma estrutura com pelo menos 4 chaves:

Category, Action, Label e Meta

Exemplo prático de um log de evento para um sistema que vende tickets online:

  • Category: Ticket
  • Action: Buy Ticket
  • Label: Lord of the Rings
  • Meta: user_id, user_city, ticket_price, paid_price, etc.

Nota: podemos utilizar a chave Meta para armazenar dados que façam sentido para este evento específico.

Vale lembrar que é sempre bom armazenar os dados do usuário que está realizando a ação, como idioma, localização e outras informações importantes para seu negócio.

Estrutura do log de eventos

Com um log de eventos bem definidos podemos começar a pensar em algumas perguntas que precisam de respostas.

Quero saber a quantidade de usuários que moram em belo horizonte e que compraram ao menos um ticket na última semana.

A partir disso conseguimos criar uma estrutura para responder a esta e a várias outras perguntas.

O que podemos extrair deste log?

  • Acompanhar o fluxo de compra de ticket na cidade X para o filme Y;
  • Volume de tickets para uma determinada sessão;
  • Um mapa por localização de usuários;
  • Acompanhar a venda de ingressos com desconto, etc.
Exemplo do uso de mapas por geolocalização no Kibana

"Mas eu consigo estas informações no banco de dados da aplicação!"

Sim, você tem toda a razão!

O problema é que para conseguir estas informações você precisa entender a estrutura do banco de dados que, na maioria das vezes, é gigantesca e leva um bom tempo para ser estudada, documentada e analisada.

A vantagem de utilizar logs de eventos para analisar dados de BI é que estes podem ficar armazenados de uma forma que faz sentido para o negócio, e não apenas para a aplicação.

Se sua empresa vende carros pela internet, a troca de mensagens entre comprador e consumidor, veículos mais buscados e o horário da compra de um carro podem ser informações valiosas para saber como anda a saúde do negócio.

Integrando o ELK em uma aplicacão Rails

DISCLAIMER: Neste post vou ensinar como conectar o ELK Stack a um app rails através do Docker.

Se você ainda não sabe o que é docker ou ainda não utiliza, sugiro ler a respeito.

Para não extender o post demais vou explicar apenas utilizando o Docker, mas utilizar os serviços separadamente é totalmente viável.

Utilizei como base o setup do AnjLab demonstrado neste post aqui.

Como o log vai parar no ELK?

Primeiro vamos entender como o stack vai funcionar junto com o app.

Fonte: http://bit.ly/2M7ol4q

A aplicação envia os logs para o logstash, que armazena e os agrega, enviando para um indice do elasticsearch. O kibana utiliza o elasticsearch para fazer as buscas e monta a interface que pode ser customizada com gráficos, listas, mapas, etc…

Com esta arquitetura em mente vamos utilizar o docker-compose.yml abaixo para conectar o app aos serviços:

Deixei apenas as informações que mais precisamos no arquivo acima, que são os containers do elastic, kibana e do logstash.

Também é importante adicionar a chave de logging no container web e de worker (caso tenha) para que os logs possam ser enviados para o logstash.

Além do docker-compose.yml precisamos criar 3 pastas na raiz do projeto, kibana, logstash e elasticsearch .

Criei um repositório no Github com os conteúdos destas pastas, então e só olhar lá.

Enviando os logs para o ELK

Vamos utilizar o próprio logger do Rails para enviar os logs para o logstash.

Podemos utilizar o logger.info e depois conseguimos coletar todas as informações lá no kibana.

Como a ideia é fazer o tracking de vários eventos um possível caminho seria ter uma classe que salva o log e outras que utilizam esta como base, mudando apenas o que for necessário para cada evento.

Conclusão

O ELK stack pode ser uma ferramenta essencial, tanto para o negócio quanto para a aplicação.

Existem outros softwares com funções parecidas, mas oque achei interessante no ELK e foi um dos fatores que me motivou a escrever este post é o fato de que todas as ferramentas do stack são open source.

Assim você tem o controle dos seus dados e não fica dependente de um serviço externo.

Obrigado por chegar até aqui!

Deixe suas dúvidas, críticas e sugestões nos comentários ou por email: hugooodias@gmail.com

--

--