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