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 777concede permissão total (leitura, escrita e execução) para todos os usuários- Em produção, considere usar permissões mais restritivas como
755ou644 - Para ambientes de desenvolvimento/teste,
777facilita 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'