Skip to main content

Como gerenciar Logs do sistema LGS (Conteiner Docker)

1. Como criar um volume para expor logs na máquina host

Passo 1: Criar a estrutura de pastas no host

# Navegue até a pasta do projeto Docker
cd ~/Dockers/lgs

# Crie a pasta para armazenar os logs
mkdir -p logs_lgs

# Crie o arquivo de log
touch logs_lgs/lgs.log

Passo 2: Conceder permissões completas

# Permissão completa na pasta
sudo chmod 777 logs_lgs

# Permissão completa no arquivo
sudo chmod 777 logs_lgs/lgs.log

Observação de Segurança:

  • chmod 777 concede permissão total (leitura, escrita e execução) para todos os usuários
  • Em produção, considere usar permissões mais restritivas como 755 ou 644
  • Para ambientes de desenvolvimento/teste, 777 facilita o acesso

Passo 3: Adicionar volume no docker-compose.yml

Edite o arquivo docker-compose.yml e adicione a seção volumes:

services:
  lgs:
    image: linktecnologia/garagem
    environment:
      DATABASE_URL: ecto://postgres:postgres@127.0.0.1:5432/lgs
      SECRET_KEY_BASE: 36WpcTL+0BCAPhlT+GwIWdaU21KfMq8MtPltJG32Utol8XG5SKUorASb8JsopwHu
      SECRET_KEY_JWT: jfdcnsjufdn3du3nd3judn3judn3dju3n3jun3jdn3jn3jnjn3jn3j3njrn
      RELEASE_COOKIE: secret
      CLUSTER: secret
      PARAMETROS_TIPO: placa_de_controle
      PHX_HOST_I: 172.16.1.144
      PORT_I: 4002
      PHX_HOST_E: 172.16.1.144
      PORT_E: 4000
      PHX_SCHEME_E: http
      PHX_SCHEME_I: http
      TZ: America/Sao_Paulo
    network_mode: host
    devices:
      - "/dev/bus/usb:/dev/bus/usb:rwm"
    privileged: true
    restart: always
    volumes:                                           # <--- AQUI
      - ./logs_lgs/lgs.log:/app/bin/lgs.log:rw         # <--- AQUI

Explicação da configuração do volume:

  • ./logs_lgs/lgs.log → Caminho no host (relativo ao docker-compose.yml)
  • /app/bin/lgs.log → Caminho dentro do container (padrão)
  • :rw → Read-Write (leitura e escrita)

Passo 4: Aplicar as alterações

# Pare o container
docker compose down

# Suba o container com a nova configuração
docker compose up -d

# Verifique se o container está rodando
docker compose ps

Passo 5: Verificar se o volume está funcionando

# Visualizar os logs em tempo real
tail -f logs_lgs/lgs.log

# Ou visualizar as últimas 100 linhas
tail -n 100 logs_lgs/lgs.log

# Verificar o tamanho do arquivo
ls -lh logs_lgs/lgs.log

2. Como coletar logs do sistema

A) Quando tem volume exposto (MÉTODO IDEAL)

Este é o método mais fácil e recomendado, pois os logs ficam diretamente acessíveis no host.

1. Identificar o volume pelo docker-compose.yml

# Visualize o docker-compose.yml para encontrar o volume
cat docker-compose.yml | grep -A 2 "volumes:"

Saída esperada:

volumes:
  - ./logs_lgs/lgs.log:/app/bin/lgs.log:rw

Isso indica que os logs estão em: ./logs_lgs/lgs.log (relativo ao docker-compose.yml)

2. Acessar os logs diretamente

# Navegar até a pasta do projeto
cd ~/Dockers/lgs

# Visualizar em tempo real
tail -f logs_lgs/lgs.log

# Visualizar as últimas 50 linhas
tail -n 50 logs_lgs/lgs.log

# Buscar por um erro específico
grep "error" logs_lgs/lgs.log

# Buscar por palavra-chave com contexto (5 linhas antes e depois)
grep -C 5 "timeout" logs_lgs/lgs.log

# Visualizar todo o arquivo
cat logs_lgs/lgs.log

# Abrir com editor de texto
nano logs_lgs/lgs.log
# ou
vim logs_lgs/lgs.log

3. Copiar logs para análise

# Copiar para área de trabalho
cp logs_lgs/lgs.log ~/Desktop/lgs_backup_$(date +%Y%m%d_%H%M%S).log

# Compactar logs para envio
tar -czf lgs_logs_$(date +%Y%m%d).tar.gz logs_lgs/

# Enviar por SCP para outro servidor
scp logs_lgs/lgs.log usuario@servidor:/caminho/destino/

B) Quando NÃO tem volume exposto (logs dentro do container)

Quando os logs estão apenas dentro do container, você precisa acessar o container para visualizá-los ou copiá-los.

Método 1: Acessar o container e visualizar logs

# Entrar no container
docker exec -it lgs-lgs-1 /bin/bash

# Navegar até a pasta de logs
cd /app/bin

# Listar arquivos de log
ls -lh
# Saída:
# lgs.log       (log atual)
# lgs.log.0.gz  (log rotacionado - mais recente)
# lgs.log.1.gz  (log rotacionado)
# lgs.log.2.gz  (log rotacionado)
# lgs.log.3.gz  (log rotacionado)
# lgs.log.4.gz  (log rotacionado - mais antigo)

# Visualizar o log atual
tail -f lgs.log

# Visualizar as últimas 100 linhas
tail -n 100 lgs.log

# Buscar por erro
grep "error" lgs.log

# Visualizar logs rotacionados (compactados)
zcat lgs.log.0.gz | tail -n 50
zcat lgs.log.1.gz | grep "timeout"

# Sair do container
exit

Método 2: Copiar logs do container para o host

# Copiar o log atual
docker cp lgs-lgs-1:/app/bin/lgs.log ./lgs_log_backup.log

# Copiar todos os logs (incluindo rotacionados)
docker cp lgs-lgs-1:/app/bin/lgs.log.0.gz ./
docker cp lgs-lgs-1:/app/bin/lgs.log.1.gz ./
docker cp lgs-lgs-1:/app/bin/lgs.log.2.gz ./

# Copiar toda a pasta de logs
docker cp lgs-lgs-1:/app/bin/ ./backup_logs_$(date +%Y%m%d)/

Método 3: Visualizar logs usando docker exec (sem entrar no container)

# Visualizar diretamente sem entrar no container
docker exec lgs-lgs-1 cat /app/bin/lgs.log

# Últimas 50 linhas
docker exec lgs-lgs-1 tail -n 50 /app/bin/lgs.log

# Buscar por erro
docker exec lgs-lgs-1 grep "error" /app/bin/lgs.log

# Visualizar log rotacionado
docker exec lgs-lgs-1 zcat /app/bin/lgs.log.0.gz

Método 4: Usar docker logs (logs do STDOUT/STDERR do container)

# Visualizar logs do container (saída padrão)
docker logs lgs-lgs-1

# Últimas 100 linhas
docker logs --tail 100 lgs-lgs-1

# Seguir logs em tempo real
docker logs -f lgs-lgs-1

# Logs desde uma data específica
docker logs --since "2025-12-23T10:00:00" lgs-lgs-1

# Logs das últimas 2 horas
docker logs --since 2h lgs-lgs-1

⚠️ Observação: O comando docker logs só funciona se a aplicação estiver escrevendo logs no STDOUT/STDERR. Se a aplicação grava apenas em arquivos (como /app/bin/lgs.log), você precisará usar os métodos 1, 2 ou 3.


Comparação: Com Volume vs Sem Volume

Aspecto Com Volume Exposto Sem Volume
Facilidade de acesso ⭐⭐⭐⭐⭐ Muito fácil ⭐⭐ Precisa entrar no container
Persistência Logs mantidos após recriar container ❌ Logs perdidos se container for removido
Backup Fácil (copiar pasta do host) ❌ Precisa usar docker cp
Monitoramento Ferramentas externas acessam direto ❌ Acesso limitado
Análise Pode usar ferramentas do host ❌ Precisa copiar ou usar ferramentas do container

Comandos úteis para análise de logs

# Contar linhas de erro
grep -c "error" logs_lgs/lgs.log

# Filtrar logs por data/hora
grep "2025-12-23" logs_lgs/lgs.log

# Ver apenas erros únicos
grep "error" logs_lgs/lgs.log | sort | uniq

# Logs de hoje
grep "$(date +%Y-%m-%d)" logs_lgs/lgs.log

# Salvar apenas erros em arquivo separado
grep "error" logs_lgs/lgs.log > erros.log

# Monitorar tamanho do arquivo
watch -n 5 'ls -lh logs_lgs/lgs.log'