Configuração do Arquivo Docker Compose
Agora que todas as configurações necessárias estão definidas — para o Filebeat, Logstash e a aplicação Flask — é o momento de integrá-las e executá-las como um único sistema. Para isso, será utilizado o Docker Compose.
Docker Compose é uma ferramenta que permite definir todos os contêineres necessários em um único arquivo YAML e executá-los com um único comando.
Em vez de escrever um comando docker run
separado para cada serviço, basta definir suas configurações no docker-compose.yml
e executar tudo em conjunto.
Um arquivo docker-compose.yml
simples se apresenta da seguinte forma:
docker-compose.yml
Agora, vamos criar um arquivo completo passo a passo, explicando cada contêiner ao longo do processo.
Aplicação Flask
Esta é a aplicação principal que gera logs.
docker-compose.yml
Este bloco instrui o Docker a construir o contêiner a partir da pasta atual (onde seu Dockerfile está localizado).
O contêiner será nomeado como flask-app
.
A linha volumes
conecta a pasta local ./logs
ao diretório /logs
dentro do contêiner. Dessa forma, todos os logs criados pela aplicação são salvos tanto dentro do contêiner quanto em seu computador.
A aplicação é executada dentro do contêiner na porta 5000, mas fazemos o mapeamento para a porta 5050 em sua máquina para que você possa acessá-la no navegador em http://localhost:5050
.
Filebeat
Filebeat atua como um agente que monitora arquivos de log e envia novas entradas para o Logstash.
docker-compose.yml
Filebeat é executado a partir da imagem oficial 8.15.0
.
É executado como usuário root
para ter permissão de leitura dos arquivos de log.
A pasta ./logs
é anexada em modo somente leitura, assim como o arquivo de configuração filebeat.yml
. Isso informa ao Filebeat quais logs monitorar e para onde enviá-los.
O parâmetro depends_on
garante que o Filebeat seja iniciado apenas após a aplicação e o Logstash estarem em execução.
Logstash
Logstash recebe logs do Filebeat, processa-os (por exemplo, faz a análise de JSON) e os encaminha para o Elasticsearch.
docker-compose.yml
Este contêiner utiliza a imagem oficial do Logstash.
Montamos o arquivo de configuração logstash.conf
, que instrui o Logstash sobre como processar os logs recebidos.
O contêiner é iniciado somente após o Elasticsearch estar em execução, pois necessita de um destino para os logs processados.
A porta 5044 é exposta para que o Filebeat possa enviar dados ao Logstash.
Elasticsearch
O Elasticsearch armazena logs como documentos e permite realizar buscas rápidas entre eles.
docker-compose.yml
Utilizamos a imagem oficial do Elasticsearch na versão 8.15.0
.
discovery.type=single-node
especifica que estamos executando um cluster de nó único (suficiente para testes locais);xpack.security.enabled=false
desativa a segurança para que não seja necessário lidar com nomes de usuário e senhas;ES_JAVA_OPTS
limita o uso de memória do processo Java.
O serviço está acessível na porta 9200 em http://localhost:9200
.
Kibana
Kibana é uma interface web para o Elasticsearch. Auxilia na visualização de logs e na criação de dashboards.
docker-compose.yml
Utilizamos a imagem oficial do Kibana.
A porta 5601 é exposta para que você possa acessar o Kibana em seu navegador em http://localhost:5601
.
ELASTICSEARCH_HOSTS
direciona o Kibana para o nosso contêiner Elasticsearch para que ele possa buscar e exibir dados.
docker-compose.yml final
Segue o arquivo completo do Docker Compose com todos os serviços conectados na ordem correta:
docker-compose.yml
Este docker-compose.yml
inicia todos os serviços na ordem correta. A aplicação Flask gera logs, o Filebeat os coleta e envia para o Logstash, o Logstash processa os logs e encaminha para o Elasticsearch, e o Kibana fornece uma interface web para visualização e análise dos dados.
Tudo o que resta é executar o sistema e testá-lo, o que será abordado no próximo capítulo.
1. Qual é o principal objetivo do Docker Compose nesta configuração?
2. Qual serviço é responsável por coletar arquivos de log da aplicação Flask e enviá-los para o Logstash?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.7
Configuração do Arquivo Docker Compose
Deslize para mostrar o menu
Agora que todas as configurações necessárias estão definidas — para o Filebeat, Logstash e a aplicação Flask — é o momento de integrá-las e executá-las como um único sistema. Para isso, será utilizado o Docker Compose.
Docker Compose é uma ferramenta que permite definir todos os contêineres necessários em um único arquivo YAML e executá-los com um único comando.
Em vez de escrever um comando docker run
separado para cada serviço, basta definir suas configurações no docker-compose.yml
e executar tudo em conjunto.
Um arquivo docker-compose.yml
simples se apresenta da seguinte forma:
docker-compose.yml
Agora, vamos criar um arquivo completo passo a passo, explicando cada contêiner ao longo do processo.
Aplicação Flask
Esta é a aplicação principal que gera logs.
docker-compose.yml
Este bloco instrui o Docker a construir o contêiner a partir da pasta atual (onde seu Dockerfile está localizado).
O contêiner será nomeado como flask-app
.
A linha volumes
conecta a pasta local ./logs
ao diretório /logs
dentro do contêiner. Dessa forma, todos os logs criados pela aplicação são salvos tanto dentro do contêiner quanto em seu computador.
A aplicação é executada dentro do contêiner na porta 5000, mas fazemos o mapeamento para a porta 5050 em sua máquina para que você possa acessá-la no navegador em http://localhost:5050
.
Filebeat
Filebeat atua como um agente que monitora arquivos de log e envia novas entradas para o Logstash.
docker-compose.yml
Filebeat é executado a partir da imagem oficial 8.15.0
.
É executado como usuário root
para ter permissão de leitura dos arquivos de log.
A pasta ./logs
é anexada em modo somente leitura, assim como o arquivo de configuração filebeat.yml
. Isso informa ao Filebeat quais logs monitorar e para onde enviá-los.
O parâmetro depends_on
garante que o Filebeat seja iniciado apenas após a aplicação e o Logstash estarem em execução.
Logstash
Logstash recebe logs do Filebeat, processa-os (por exemplo, faz a análise de JSON) e os encaminha para o Elasticsearch.
docker-compose.yml
Este contêiner utiliza a imagem oficial do Logstash.
Montamos o arquivo de configuração logstash.conf
, que instrui o Logstash sobre como processar os logs recebidos.
O contêiner é iniciado somente após o Elasticsearch estar em execução, pois necessita de um destino para os logs processados.
A porta 5044 é exposta para que o Filebeat possa enviar dados ao Logstash.
Elasticsearch
O Elasticsearch armazena logs como documentos e permite realizar buscas rápidas entre eles.
docker-compose.yml
Utilizamos a imagem oficial do Elasticsearch na versão 8.15.0
.
discovery.type=single-node
especifica que estamos executando um cluster de nó único (suficiente para testes locais);xpack.security.enabled=false
desativa a segurança para que não seja necessário lidar com nomes de usuário e senhas;ES_JAVA_OPTS
limita o uso de memória do processo Java.
O serviço está acessível na porta 9200 em http://localhost:9200
.
Kibana
Kibana é uma interface web para o Elasticsearch. Auxilia na visualização de logs e na criação de dashboards.
docker-compose.yml
Utilizamos a imagem oficial do Kibana.
A porta 5601 é exposta para que você possa acessar o Kibana em seu navegador em http://localhost:5601
.
ELASTICSEARCH_HOSTS
direciona o Kibana para o nosso contêiner Elasticsearch para que ele possa buscar e exibir dados.
docker-compose.yml final
Segue o arquivo completo do Docker Compose com todos os serviços conectados na ordem correta:
docker-compose.yml
Este docker-compose.yml
inicia todos os serviços na ordem correta. A aplicação Flask gera logs, o Filebeat os coleta e envia para o Logstash, o Logstash processa os logs e encaminha para o Elasticsearch, e o Kibana fornece uma interface web para visualização e análise dos dados.
Tudo o que resta é executar o sistema e testá-lo, o que será abordado no próximo capítulo.
1. Qual é o principal objetivo do Docker Compose nesta configuração?
2. Qual serviço é responsável por coletar arquivos de log da aplicação Flask e enviá-los para o Logstash?
Obrigado pelo seu feedback!