Nossa arquitetura será simples, O Logstash vai receber o log, vai parsear, e enviar ao Elasticsearch, ele vai indexar e mostrar graficamente no Kibana que vai devolver o dado já tratado em tela! Na configuração que faremos além da pilha ELK, utilizaremos o Filebeat, o filebeat vai ser um container que vai pegar os logs (no nosso caso vamos coletar um arquivo ".csv") e enviar para o logstash, e assim seguindo o fluxo abaixo:
Para começar, vamos definir um diretório onde ficarão nossos logs.
No meu caso, irei colocar o arquivo.csv no diretório: /CSV
Neste diretório vou injetar um arquivo qualquer, se preferir pode colocar uma aplicação web, como por exemplo um Wordpress, e analisar os logs de erro ou até mesmo de acesso!
Para prosseguirmos, lhe aconselho a clonar meu repositório:
# git clone https://UrielRicardo@bitbucket.org/UrielRicardo/docker-elk.git
Para começar vamos no arquivo de orquestração da nossa aplicação, abra o arquivo:
docker-compose.yml
Você vai ver algo assim:
Calma, eu vou explicar!
Da linha 1 até a linha 8, estamos configurando o serviço do Elasticsearch, ele é o servidor que vai armazenar todos esses logs, no caso estou utilizando de imagens prontas, esta está na versão 2.3, já estamos utilizando na versão 5.0.0-alpha, que é quase a mesma configuração!
Na linha 5, estamos "subindo" uma rede para conectar estes serviços!
Mais abaixo estamos expondo as portas 9200 e 9300.
Da linha 9 até a 14 estamos subindo o serviço do Kibana, onde estamos expondo a porta 5601, e definindo o "depends_on" para o Elasticsearch, isso nos garante que ele vai subir, só depois que o serviço do Elasticsearch subir.
Da linha 15 até a 24, estamos subindo o serviço do logstash, nele você pode notar que estamos passando o parâmetro "command: logstash -f /etc/logstash/conf.d/logstash.conf", este parâmetro está dizendo qual arquivo ele vai usar como configuração dentro do próprio container! Isso junto do parâmetro "Volumes" que nos permite sincronizar arquivos que estão em nosso host para dentro do container. Com as portas : "5000 e 5044" expostas ( a 5044 não está na imagem mas pode declarar) ele, assim como o Kibana, sobe só depois do Elasticsearch!
E por fim, das linhas 25 até a 31, estamos declarando o serviço do Filebeat que será usado para enviar os dados para nosso Logstash, estou usando assim por conta de ele me permitir envios remotos, seja via
Linux ou Windows. Porém quem preferir pode descartar o uso dele e pegar os dados diretamente pelo Logstash. Nesta parte é onde eu declaro que o diretório que eu criei no host, o "/CSV" vai ser o meu "/var/log/" dentro do container! O mesmo faço para passar o arquivo de configuração do serviço!
Na próxima página iremos configurar o arquivo de configuração do Filebeat que vai nos permitir decidir quais dados serão enviados para o logstash.