Logstash + Redis + Elasticsearch + Kibana - Gerenciando logs

O Logstash é um sistema para gerenciamento e agregação de logs. Neste artigo, veremos como configurar o Logstash para coletar, processar e armazenar logs e como configurar uma interface Web para visualizar e analisar os logs. Este roteiro irá mostrar também, como montar um ambiente para centralizar logs de diversos servidores.

[ Hits: 40.475 ]

Por: Luiz Augusto Amelotti em 10/09/2012


Introdução



O Logstash é um sistema para gerenciamento e agregação de logs.

Com ele, podemos coletar logs, aplicar filtros e tratar as mensagens e armazenar para uso posterior, como visualização, estatística e alertas.

Você consegue agregar logs de diferentes máquinas e aplicações em um ponto central e ver diversas informações relacionadas através de uma interface Web.

O site do logstash é: http://logstash.net

Preparando o ambiente

Neste roteiro, iremos usar uma série de ferramentas, por isso, criaremos uma pasta que conterá todas as informações relacionadas, como arquivos de configuração, executáveis, logs e arquivos de dados.

Mas esta configuração não é obrigatória, e você pode armazenar as configurações no /etc, os logs no /var/log e os executáveis no /usr/bin, ou em qualquer outro lugar.

Amazon AWS

Neste roteiro, usei uma instância EC2 da Amazon Web Services. Neste caso, usei um disco efêmero para armazenar os dados e uma instância spot. Dessa forma, é fundamental ter um meio de fazer o backup dos dados armazenados.

Dessa forma, crie uma pasta para armazenar todos os componentes da solução. No caso, eu criei a pasta /opt/monitor - onde está montada uma partição de um disco efêmero.

Logstash

Crie também uma pasta para conter os dados do Logstash. Eu criei as pastas /opt/monitor/logstash/{bin,conf,log}.

Dependências

Como o Logstash é uma aplicação Java, é necessário instalar o JDK. Eu usei o OpenJDK6, disponível no repositório do Ubuntu - o nome do pacote é: openjdk-6-jdk

Faça o download do Logstash, disponível em:
Visite a página do Logstash, e verifique a versão mais recente, na pasta /opt/monitor/logstash/bin.

Antes de colocar a solução para funcionar de fato, podemos fazer um pequeno e rápido teste, para ver o Logstash funcionando e entender sua configuração.

Para este teste, podemos usar uma versão embutida no próprio pacote do Logstasg do elasticsearch. Também iremos usar a interface Web do próprio Logstash.

Abra uma janela do terminal, e crie um arquivo chamado "config1.conf" na pasta /opt/monitor/logstash/conf e inclua as linhas abaixo:

input { sdtin { type => "entrada" } }
output { tcp { host => "localhost" port => 8080 } }


O arquivo de configuração do Logstash resume-se a três sessões: input, filter e output.

Na sessão input, configuramos o ponto de entrada das mensagens. Nesse caso, iremos usar a entrada padrão. Mas é possível configurar várias outras, entre elas Syslog, arquivo, conexões TCP/UDP, AMQP, event log do Windows, inclusive, múltiplas entradas diferentes.

Na sessão filter - que iremos usar mais tarde - definimos uma série de filtros e operações que serão aplicados às mensagens.

E a última sessão é a configuração da saída dos dados. Nessa sessão, pode-se configurar para imprimir as mensagens na saída padrão, enviar para outra aplicação através de uma série de protocolos, imprimir em arquivo, etc.

No caso deste primeiro teste, o input é a entrada padrão e a saída será uma conexão TCP, na porta 8080. Por enquanto, não aplicaremos nenhum filtro. Para receber a conexão TCP, iremos usar o Netcat.

Inicie o Logstash com o comando abaixo (neste caso, foi usada a versão 1.1.1, mude o comando de acordo com a versão e o nome do arquivo baixado):

# java -jar logstash-1.1.1-monolithic.jar agent -f ../conf/config1.conf

O programa demora alguns segundos para iniciar. Abra uma outra janela do terminal e execute o Netcat, na porta 8080:

# nc -l 8080

Depois disso, digite qualquer coisa no terminal onde está rodando o Logstash e veja que a saída será impressa em seguida, no Netcat.

Exemplo:

# java -jar logstash-1.1.1-monolithic.jar agent -f ../conf/config.conf
teste
esse é o Logstash em acao


Saída do Netcat:

# nc -l 8080
{"@source":"stdin://logstash/","@type":"stdin-type","@tags":[],"@fields":{},"@timestamp":"2012-08-31T18:57:49.021000Z","@source_host":"logstash","@source_path":"/","@message":"teste"}
{"@source":"stdin://logstash/","@type":"stdin-type","@tags":[],"@fields":{},"@timestamp":"2012-08-31T18:59:37.420000Z","@source_host":"logstash","@source_path":"/","@message":"esse eh o logstash em acao"}


Você pode alterar o arquivo de configuração para enviar as mensagens para um arquivo de texto, para a saída padrão, ou qualquer outra saída suportada pelo Logstash.

Agora, vamos armazenar as mensagens coletadas e tratadas pelo Logstash, para consulta através da interface Web.

A engine de armazenamento recomendada, e que iremos utilizar, é o elasticsearch. Para este teste, iremos usar uma versão dele que vem embutida no próprio Logstash, assim, como a interface Web, também embutida no Logstash.

Assim, crie um arquivo /opt/monitor/logstash/conf/config2.conf, com o seguinte conteúdo:

input { stdin { type => "stdin-type"}}
output { elasticsearch { embedded => true } }


Se ainda não tiver feito, pare o Logstash que iniciamos (pode parar o Netcat também) e reinicie com o comando abaixo, alterando o arquivo de configuração usado.

Dessa vez, também vamos iniciar a interface Web que também vem embutida no Logstash:

# java -jar logstash-1.1.1-monolithic.jar agent -f ../conf/config2.conf -- web --backend elasticsearch:///?local

Dessa vez, ele deve demorar um pouco mais a iniciar, pois o Logstash precisa extrair o conteúdo do arquivo "jar" e iniciar uma instância do elasticsearch.

Abra o browser e acesse a máquina na porta 9292 (por exemplo: http://logstash:9292/) para visualizar a interface Web.

Clique no link disponível na frase: "No query given. How about this?"

Uma mensagem de erro será exibida, pois não há nenhuma mensagem armazenada no elasticsearcg ainda. Digite algumas linhas no console do Logstash e atualize a página Web. Você será capaz de visualizar as mensagens que você digitou.

Clicando em uma das mensagens, é exibida uma caixa com alguns metadados da mensagem. É possível definir filtros de busca clicando nos valores dos metadados.

Digite várias mensagens iguais, e tente filtrar pelo conteúdo, por exemplo, usando a expressão: @message:"teste1" no campo: Query

    Próxima página

Páginas do artigo
   1. Introdução
   2. Ambiente distribuído
   3. Coletando e processando logs
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Como usar o Bugzilla do Sabayon

Montando um workstation de desenvolvimento web em GNU/Linux

5 coisas que todo aluno de Sistemas de Informação deveria saber (e fazer)...

Liberdade, usuários e políticas de manutenção de ignorância

Visual Studio no Linux

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts