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.396 ]

Por: Luiz Augusto Amelotti em 10/09/2012


Ambiente distribuído



Já vimos como o Logstash funciona, de maneira bem simples.

Agora, vamos partir para a configuração de um ambiente distribuído, e usando uma interface Web com mais recursos. Neste ambiente, teremos dois tipos de máquinas: máquinas que enviam as mensagens e máquinas que coletam e indexam as mensagens.

Nas máquinas do primeiro tipo, iremos usar apenas o Logstash, já que elas apenas lêem as mensagens das aplicações de origem e aplicam alguns filtros.

No segundo tipo de máquina, iremos coletar e armazenar as mensagens. Do primeiro tipo, teremos várias máquinas, já do segundo, apenas uma (ou algumas poucas, no caso de uma carga muito grande de acessos).

Por isso, para que o ambiente consiga tratar uma grande quantidade de mensagens, iremos usar o Redis, como uma fila que vai receber as mensagens dos hosts que enviam as mensagens, o Logstasg para tratar e indexar as mensagens, o Elasticsearch para armazenar e o Kibana para visualizar as mensagens.

Crie as pastas /opt/monitor/logstash/{bin,conf,log} nos dois tipos de máquinas - já que todas elas irão executar uma instância do Logstash.

Faça o download do Logstash na pasta bin - lembre-se do pré-requisito de ter o Java instalado.

Nas máquinas que enviarão as mensagens, crie um arquivo de configuração para o Logstash, na pasta /opt/monitor/logstash/conf, chamado "shipper.conf", com o seguinte conteúdo:

input { stdin { type => "stdin-type" } }
output { redis { host => "<endereço IP do redis server>" data_type => "list" key => "logstash" } }


Substituindo <endereço IP do redis server>, pelo endereço IP (ou DNS hostname) do servidor que vai executar o Redis.

Já na máquina que vai agregar, indexar e armazenar as mensagens, crie um arquivo chamado "indexer.conf", na pasta /opt/monitor/logstash/conf, com o seguinte conteúdo:

input { redis { host => "127.0.0.1" type => "redis-input" data_type => "list" key => "logstash" message_format => "json_event" } }
output { elasticsearch { host => "127.0.0.1" } }


Aqui, o Elasticsearch vai executar na mesma máquina que o Redis e o Logstash indexer, mas é possível ter cada componente em seu próprio servidor, sem nenhum prejuízo de desempenho ou configuração - apenas lembrando de usar os endereços corretos.

Faça o download do Elasticsearch, disponível em:
Visite a página do Elasticsearch e verifique a versão mais recente, na pasta /opt/monitoring, descompacte o arquivo e renomeie a pasta criada para: elasticsearch

Crie uma pasta para os logs (o pacote do Elasticsearch já contém pastas com os binários e com as configurações):

# cd /opt/monitoring
# wget
https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.9.tar.gz
# tar -zxf elasticsearch-0.19.9.tar.gz
# mv elasticsearch-0.19.9 elasticsearch
# mkdir /opt/monitoring/elasticsearch/log
# rm /opt/monitoring/elasticsearch-0.19.9.tar.gz


Para facilitar o processo, vamos também criar um script para iniciar o Elasticsearch junto com o sistema (no caso, estamos usando o Ubuntu).

Para isso, crie um arquivo chamado "elasticsearch" na pasta /etc/init.d/, com o seguinte conteúdo:

 #!/bin/sh
 ### BEGIN INIT INFO
 # Provides:          elasticsearch
 # Required-Start:    $all
 # Required-Stop:     $all
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Starts elasticsearch
 # Description:       Starts elasticsearch using start-stop-daemon
 ### END INIT INFO
  
 ES_HOME=/opt/monitoring/elasticsearch
 ES_MIN_MEM=256m
 ES_MAX_MEM=1g
 DAEMON=$ES_HOME/bin/elasticsearch
 NAME=elasticsearch
 DESC=elasticsearch
 PID_FILE=/var/run/$NAME.pid
 LOG_DIR=/opt/monitoring/$NAME/log
 DATA_DIR=/opt/monitoring/$NAME/data
 WORK_DIR=/tmp/$NAME
 CONFIG_FILE=/opt/monitoring/$NAME/config/elasticsearch.yml
 DAEMON_OPTS="-p $PID_FILE -Des.config=$CONFIG_FILE -Des.path.home=$ES_HOME -Des.path.logs=$LOG_DIR -Des.path.data=$DATA_DIR -Des.path.work=$WORK_DIR"


test -x $DAEMON || exit 0
  
set -e

case "$1" in
  start)
    echo -n "Starting $DESC: "
    mkdir -p $LOG_DIR $DATA_DIR $WORK_DIR
    if start-stop-daemon --start --pidfile $PID_FILE --startas $DAEMON -- $DAEMON_OPTS
    then
      echo "started."
    else
      echo "failed."
    fi
    ;;
  stop)
    echo -n "Stopping $DESC: "
    if start-stop-daemon --stop --pidfile $PID_FILE
    then
      echo "stopped."
    else
      echo "failed."
    fi
    ;;
  restart|force-reload)
    ${0} stop
    sleep 0.5
    ${0} start
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esac

exit 0


E instale o script:

# chmod +x /etc/init.d/elasticsearch
# update-rc.d elasticsearch defaults


Para este roteiro, as configurações disponíveis nos arquivos de configuração do Elasticsearch ("elasticsearch.yaml" e "logging.yaml") são o suficiente.

Para um ambiente de produção, pode ser necessário ajustar alguns parâmetros (Ex.: no caso de você pensar em usar um Cluster do Elasticsearch). Feito isso, inicie o Elasticsearch:

# /etc/init.d/elasticsearch start

Você pode acompanhar o startup do Elasticsearch através do log:

# tail -f /opt/monitoring/elasticsearch/log/elasticsearch.log

Agora, crie as pastas /opt/monitoring/redis/{bin,conf,log} para o Redis. Faça o download do código-fonte, disponível em:
Visite a página do Redis e verifique a versão mais recente. Descompacte o arquivo e compile o Redis:

# mkdir -p /opt/monitoring/redis/{conf,log,data}
# cd /opt/monitoring/redis
# wget
http://redis.googlecode.com/files/redis-2.4.17.tar.gz
# tar -zxf redis-2.4.17.tar.gz
# make


Depois de compilar, pode ser uma boa ideia testar os arquivos (para rodar o teste, é necessário ter instalado o pacote tcl8.5):

# make test

E depois disso, o make install, passando o caminho onde os binários do Redis serão instalados:

# make PREFIX=/opt/monitoring/redis/ install

Para inicializar o Redis junto com o sistema, você pode copiar o script de inicialização redis_init_script, disponível dentro da pasta "utils", para a pasta /etc/init.d, editando os caminhos corretamente.

Feito isso, copie o arquivo "redis.conf" para a pasta /opt/monitoring/redis/conf com o nome "6379.conf" e edite as seguintes linhas:

daemonize yes
logfile /opt/monitoring/redis/log/redis_6379.log
dir /opt/monitoring/redis/data


Feito isso, você pode inicializar o Redis:

# /etc/init.d/redis start

E acompanhar a operação através do log. Agora, você já pode iniciar as duas instâncias do Logstash, começando pelas máquinas que irão enviar as mensagens (shipper).

Na pasta onde está o binário do Logstash:

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

O Logstash já pode enviar mensagens ao Redis. Como ele está configurado para receber eventos da entrada padrão, vamos digitar algumas mensagens no console do Logstash. No servidor onde roda o Redis, execute o seu cliente:

# /opt/monitoring/redis/bin/redis-cli

No console do Redis-cli, execute o comando: llen logstash - para ver o tamanho da fila do Redis.

E o comando: lpop logstash - para recuperar mensagens da fila.

Agora, inicie o Logstash da máquina que vai indexar as mensagens (indexer):

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

O Logstash agora vai começar a ler as mensagens no Redis e enviar para o Elasticsearch. Digite algumas mensagens no console do Logstash da máquina shipper. Se quiser, pode verificar no console do redis-cli, que a mensagens estão sendo consumidas.

Entretanto, agora nós não estamos mais rodando o Logstash com sua interface Web. Para visualizar o conteúdo do Elasticsearch - e as mensagens coletadas pelo Logstash - vamos usar o Kibana.

O Kibana é uma interface gráfica para o Logstash (e Elasticsearch), com bem mais recursos que a interface embutida no Logstash.

Dependências

O Kibana é uma aplicação PHP, então é necessário um servidor Web e o PHP instalados na máquina. Nesse caso, iremos usar o Apache e o mod-php. Também é necessário o módulo cURL do PHP.

Eu usei os pacotes disponíveis no repositório do Ubuntu. O nome dos pacotes:
  • apache2
  • libapache2-mod-php5
  • php5-curl

Crie as pastas /opt/monitoring/kinaba/{www,log} e faça o download do Kibana, disponível em:
Visite a página do Kibana e verifique a versão mais recente. Descompacte e mova os arquivos para a pasta /opt/monitoring/kibana/www. Com o Apache já instalado, crie um arquivo de configuração similar ao abaixo:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /zunnit/kibana/www
    <Directory /zunnit/kibana/www>
         Options Indexes FollowSymLinks MultiViews
         AllowOverride None
         Order allow,deny
         allow from all
    </Directory>
    ErrorLog /zunnit/kibana/log/error.log
    LogLevel warn
    CustomLog /zunnit/kibana/log/access.log combined
</VirtualHost>


Também é necessário editar o arquivo de configuração do Kibana, o "config.php".

A princípio, a única opção que deve ser alterada é a "elasticsearch_server", que define o endereço e a porta do Elasticsearch. No nosso caso, o servidor é localhost e a porta é a padrão (9200).

Reinicie o Apache e aponte o browser para este servidor. A página inicial do Kibana será aberta. Clique no botão "Search" e veja as últimas mensagens que você digitou no console do Logstash Shipper.

Entretanto, coletar mensagens digitadas no console não é nada útil. Por isso, iremos configurar o Logstash para coletar alguma coisa mais interessante.

Página anterior     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

Horário de verão automático

Mais desempenho no GNU Emacs com o YASnippet

Servidor VNC no Fedora

Experimentando o Looking Glass

Udev - Funcionamento e Regras

  
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