Enviando dados externos para a stack ELK – Ricardo Martins
No post anterior sobre como implementar a Stack ELK (ElasticSearch, Logstash e Kibana) fiz um setup default com todos os serviços no mesmo servidor. Aproveitando para fazer o marketing, o post foi rapidamente citado no blog oficial do ElasticSearch nesta url. o/
Além disso foi incluído o Redis na stack, recebendo os dados e direcionando para o Logstash. Este é um recurso útil para ganho de performance.
Para facilitar o entendimento, vamos relembrar informações sobre a instalação da nossa stack:
Fizemos a instalação do Logstash, Elasticsearch, Nginx, Redis e do Kibana.
Inicialmente, fizemos o download do Kibana e configuramos ele no Nginx. Na configuração, especificamos onde estaria nossa instalação do ElasticSearch e em qual porta ele estaria configurado. No exemplo, estava na mesmo servidor onde as demais aplicações estariam instaladas, porém poderia estar em um servidor distinto. Além disto alteramos a rota padrão para que fosse utilizado o Dashboard do Logstash ao invés da tela de boas vindas do Kibana.
Em seguida foi feita a configuração do Redis, onde optamos por uma configuração mínima, apenas definindo o endereço IP no qual ele estaria respondendo às requisições.
O próximo passo foi realizar a configuração do Logstash. Em nossa configuração, definimos como input uma fila do Redis chamada logstash (key => "logstash") e também os arquivos de log contidos em /var/log/*.log, /var/log/messages e /var/log/syslog. Também habilitamos o recebimento de mensagens de syslog remotas na porta 5544, filtramos os dados com o Grok e passamos o elasticsearch como output dos dados.
Desta forma, temos os dados chegando no Logstash de duas formas:
Pelo Redis na lista nomeada como logstash;
E os arquivos diretamente especificados contidos em /var/log/*.log, /var/log/messages e /var/log/syslog.
Em seguida estes dados são lidos pelo Logstash, armazenados no ElasticSearch e lidos pelo Kibana. Em resumo, o fluxo é o seguinte:
No nosso exemplo do post anterior, eu configurei o syslog da máquina para encaminhar os dados do syslog para o Logstash na porta 5544. Isto foi feito no nosso arquivo /etc/rsylog.conf. Por fim, tínhamos todos os dados de syslog disponíveis no Kibana.
Adicionalmente foram feitos também dois testes com arquivos específicos: os logs do Nginx e do Yum.
Agora vamos fazer um novo teste, enviando os logs do Apache de um segundo servidor para a nossa stack.
Para fazer isto, basta você instalar o logstash na máquina via YUM, ou baixando o arquivo .tar.gz. Para deixar o post mais didático, vamos realizar a instalação manualmente com o arquivo .tar.gz:
# wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.1.tar.gz
# tar xzvf logstash-1.4.1.tar.gz
# mv logstash-1.4.1.tar.gz logstash
# vim conf/shipper.conf
path => "/home/ricmmart/logs/ricardomartins.com.br/http/access.log"
add_tag => ["apache", "grokked"]
"message" => "%{COMMONAPACHELOG}"
Conforme demonstrado acima, passamos o path do arquivo de log como input, informamos como deverá ser feita a filtragem dos dados, e por fim definimos o output direcionando para o Redis do nosso servidor com a stack instalada. Lembrando de informar a lista logstash através do parâmetro: key => "logstash"