Por que eu devo ler este artigo:Analisar logs é uma tarefa cansativa e desestimulante para muitos desenvolvedores, principalmente quando procurando por erros de codificação.

Pensando nisso, este artigo discorrerá sobre uma maneira de simplificar esse problema. Este artigo abordará a ferramenta Elasticsearch, uma solução criada em cima do Apache Lucene com o objetivo de facilitar a indexação e busca de dados em tempo real, podendo processar tanto dados estruturados como, também, dados não-estruturados.

Além disso, também iremos discutir sobre a ferramenta Kibana e a ferramenta Logstash, bastante utilizadas em conjunto com o Elasticsearch para prover um ambiente de análise e processamento de dados.

Feito isso, visando demonstrar uma solução prática da utilização dessas aplicações, apresentaremos um cenário onde é necessário ao desenvolvedor ser capaz de analisar, em tempo real, o que acontece em sua aplicação, mostrando a grande vantagem de se utilizar o Elasticsearch para a análise de logs.

A análise de dados é um dos tópicos mais proeminentes e interessantes dos últimos anos. Com o surgimento de novas ferramentas e tecnologias capazes de prover um ambiente performático e eficiente para a busca e indexação de dados nos mais diversos formatos, o campo da Big Data, aliado à análise de informações, vem se mostrando como o grande nome dos próximos anos.

Entre essas tecnologias, a biblioteca da Apache chamada Lucene ganhou bastante destaque no campo de indexação e busca de dados. Capaz de prover as implementações necessárias para o tratamento, análise e busca de conteúdos textuais, essa API acabou sendo utilizada por diversas implementações, como o Apache Solr e, também, o foco de nosso artigo, o Elasticsearch.

Essa ferramenta, por sua vez, aliou os benefícios previamente citados do Apache Lucene com uma plataforma de alta confiabilidade e performance, produzindo assim um servidor de buscas capaz de realizar as funcionalidades de indexação e armazenamento em um ambiente distribuído para qualquer tipo de aplicação.

Ainda mais interessante, juntamente com as ferramentas Logstash e Kibana, o Elasticsearch vem, a cada dia, sendo mais utilizado no campo de análise de dados para aplicações dos mais diversos tipos, provendo uma interface altamente customizável e funcional para o monitoramento e análise de dados de sistemas.

Dito isso, nosso objetivo nesse artigo será mostrar um pouco sobre essa incrível ferramenta e suas aplicações no mundo real, demonstrando como realizar uma configuração inicial do Elasticsearch e como utilizá-lo dentro de seu projeto, principalmente focando nas melhores práticas de utilização dessa ferramenta para sanar a dificuldade em monitorar e ter uma visão clara do que acontece nos logs de sua aplicação.

O problema do monitoramento de logs

Tal dificuldade, para os desenvolvedores acostumados a trabalhar com grandes sistemas, pode realmente se tornar um “monstro de 7 cabeças”. A busca por trechos de textos em diversas linhas de log é uma tarefa que todo programador já passou ou irá passar um dia e é, com certeza, uma atividade desgastante.

O primeiro dos problemas que temos em uma abordagem tradicional é que, através de um simples arquivo de log, não conseguimos ter uma visão macro de nosso sistema.

Por mais que seja possível encontrar trechos de eventos dentro de arquivos textos através de comandos do Unix, como grep ou tail, não conseguimos ter gráficos ou tabelas capazes de nos mostrar claramente quantos eventos e quais os tipos de eventos que temos em um determinado período de tempo.

Ainda mais crítico, não conseguimos buscar de forma simples um determinado trecho de texto ou padrão em nossos logs, tendo que partir para funções complexas do Unix para executá-lo.

Uma simples busca por intervalo de valores de um determinado evento em arquivos de logs pode se tornar uma tarefa quase que impossível para alguém com conhecimentos intermediários em comandos do Shell.

Monitoramento de logs através da linha de comando

Para deixar mais claro como esse tipo de abordagem não é nada prática, a seguir exemplificaremos alguns comandos bastante utilizados por desenvolvedores para ler os logs de suas aplicações, expondo suas falhas e principais problemas.

O primeiro desses comandos (e talvez o mais utilizado para leitura de logs) é o chamado tail. Responsável por exibir no console apenas o fim de um arquivo, esse comando é usado para monitorar logs em tempo real e, com a ajuda do parâmetro -f, permite acompanhar os dados conforme novos conteúdos são adicionados ao log.

Seu uso, por sua vez, tem duas falhas bastante graves. A primeira é relacionada à dificuldade de acompanhar o progresso do log em um sistema muito grande, uma vez que as linhas de log serão adicionadas em alta velocidade, complicando o monitoramento tradicional realizado por uma pessoa em um ambiente produtivo.

A segunda se trata do fato de que normalmente, quando queremos ler um log, queremos somente certos trechos dele e não o log inteiro. Fazer esses filtros “manualmente” é um trabalho praticamente impossível, exigindo a ajuda de uma ferramenta ou de comandos extras no shell para minimizar esses resultados.

Um desses comandos é o grep, utilizado para filtrar os resultados de acordo com uma palavra ou expressão regular. Aliado ao tail, é possível ao usuário visualizar somente as linhas de log que interessam no momento, resolvendo parcialmente os dois problemas que citamos anteriormente.

Como exemplo de uso dos comandos tail e grep, a Figura 1 apresenta como empregá-los para ler um arquivo com algumas linhas de texto.

Exemplo de uso das funções tail e grep
Figura 1. Exemplo de uso das funções tail e grep

A junção desses comandos ajuda, porém não resolve por completo os problemas que citamos. O alto número de linhas sendo adicionadas e a dificuldade em ter uma visão de mais alto nível, em que podemos ter algo como gráfico ...

Quer ler esse conteúdo completo? Tenha acesso completo