Logs
Este guia explica como consultar e gerenciar os logs do PCH-SIG.
Tipos de logs
| Log | Fonte | Conteúdo |
|---|---|---|
| Backend Symfony | PHP-FPM | Erros PHP, requisições API, autenticação |
| Nginx Frontend | Nginx | Acessos HTTP, erros de servidor |
| Nginx Backend | Nginx | Requisições API, proxying |
| PostgreSQL | PostgreSQL | Consultas SQL, erros DB |
| Redis | Redis | Operações de cache |
| Docker | Contêineres | Inicialização, parada, erros |
Consultar logs Docker
Logs de um contêiner
# Logs do backend
docker logs pch_backend
# Últimas 100 linhas
docker logs pch_backend --tail 100
# Seguir os logs em tempo real
docker logs pch_backend -f
# Logs com timestamps
docker logs pch_backend --timestamps
Logs de todos os contêineres
# Via docker compose
cd deploy
docker compose logs
# Seguir em tempo real
docker compose logs -f
# Contêiner específico
docker compose logs -f backend
Logs Backend Symfony
Localização
Os logs Symfony estão em /app/var/log/ do contêiner:
# Listar os arquivos de log
docker exec pch_backend ls -la /app/var/log/
# Conteúdo típico
# dev.log - Ambiente de desenvolvimento
# prod.log - Ambiente de produção
Consultar os logs
# Últimas linhas do log prod
docker exec pch_backend tail -100 /app/var/log/prod.log
# Seguir em tempo real
docker exec pch_backend tail -f /app/var/log/prod.log
# Procurar erros
docker exec pch_backend grep -i "error" /app/var/log/prod.log
Níveis de log
| Nível | Descrição |
|---|---|
| DEBUG | Informações detalhadas de debug |
| INFO | Eventos informativos |
| NOTICE | Eventos normais mas significativos |
| WARNING | Avisos |
| ERROR | Erros de execução |
| CRITICAL | Erros críticos |
| ALERT | Ação imediata necessária |
| EMERGENCY | Sistema inutilizável |
Configuração Monolog
Arquivo: backend/config/packages/monolog.yaml
monolog:
handlers:
main:
type: rotating_file
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: info
max_files: 10
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
Logs Nginx
Frontend
# Logs de acesso
docker exec pch_frontend cat /var/log/nginx/access.log
# Logs de erro
docker exec pch_frontend cat /var/log/nginx/error.log
# Seguir em tempo real
docker exec pch_frontend tail -f /var/log/nginx/access.log
Backend API
# Logs de acesso API
docker exec pch_nginx_backend cat /var/log/nginx/access.log
# Logs de erro
docker exec pch_nginx_backend tail -f /var/log/nginx/error.log
Formato dos logs Nginx
192.168.1.100 - - [15/Jan/2024:10:30:45 +0000] "GET /api/menages HTTP/1.1" 200 1234 "-" "Mozilla/5.0..."
| Campo | Descrição |
|---|---|
| IP | Endereço do cliente |
| Data | Data e hora |
| Método | GET, POST, etc. |
| URI | URL solicitada |
| Status | Código HTTP (200, 404, 500...) |
| Tamanho | Tamanho da resposta |
| User-Agent | Navegador do cliente |
Logs PostgreSQL
Consultar os logs
# Logs PostgreSQL
docker logs pch_postgres
# Últimas linhas
docker logs pch_postgres --tail 50
Ativar o logging de consultas
Em postgresql.conf:
log_statement = 'all' # none, ddl, mod, all
log_min_duration_statement = 0 # Logar todas as consultas
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '
Analisar consultas lentas
# Consultas de mais de 1 segundo
docker logs pch_postgres 2>&1 | grep "duration:"
Logs Redis
# Logs Redis
docker logs pch_redis
# Informações do servidor
docker exec pch_redis redis-cli -a redis_secure_2025 INFO
Centralização com Loki
O PCH-SIG usa Loki para centralizar os logs.
Arquitetura
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Contêineres │────▶│ Promtail │────▶│ Loki │
│ Docker │ │ (coletor) │ │ (armazenamento) │
└─────────────────┘ └─────────────────┘ └────────┬────────┘
│
▼
┌─────────────────┐
│ Grafana │
│ (visualização) │
└─────────────────┘
Acessar os logs no Grafana
- Abra Grafana: http://localhost:3001
- Vá em Explore
- Selecione a datasource Loki
- Use LogQL para pesquisar
Consultas LogQL
# Logs do backend
{container="pch_backend"}
# Apenas erros
{container="pch_backend"} |= "error"
# Logs de um usuário específico
{container="pch_backend"} |= "admin@pch-sig.sn"
# Logs da última hora com erros
{container="pch_backend"} |= "error" | json | level="ERROR"
Rotação de logs
Docker
Por padrão, Docker limita o tamanho dos logs. Configuração em docker-compose.yml:
services:
backend:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
Symfony
A rotação é gerenciada pelo Monolog (handler rotating_file):
main:
type: rotating_file
max_files: 10 # Mantém os últimos 10 arquivos
Limpeza manual
# Limpar os logs de um contêiner
docker exec pch_backend truncate -s 0 /app/var/log/prod.log
# Excluir logs antigos
docker exec pch_backend find /app/var/log -name "*.log.*" -mtime +7 -delete
Pesquisa nos logs
Grep básico
# Procurar um erro
docker logs pch_backend 2>&1 | grep -i "error"
# Procurar um usuário
docker logs pch_backend 2>&1 | grep "admin@pch-sig.sn"
# Procurar um período
docker logs pch_backend 2>&1 | grep "2024-01-15"
Com contexto
# 3 linhas antes e depois
docker logs pch_backend 2>&1 | grep -B 3 -A 3 "Exception"
Contar ocorrências
# Número de erros por tipo
docker logs pch_backend 2>&1 | grep -o "Exception.*$" | sort | uniq -c | sort -rn
Alertas nos logs
Script de vigilância
# check-logs.ps1
$ErrorPatterns = @("ERROR", "CRITICAL", "Exception", "Fatal")
$Logs = docker logs pch_backend --since 1h 2>&1
foreach ($Pattern in $ErrorPatterns) {
$Matches = $Logs | Select-String -Pattern $Pattern
if ($Matches) {
Write-Host "ALERTA: $($Matches.Count) ocorrências de '$Pattern'" -ForegroundColor Red
$Matches | Select-Object -First 5
}
}
Com Grafana
- Crie um dashboard com os logs
- Adicione um alerta no número de erros
- Configure as notificações (email, Slack, etc.)
Boas práticas
Logging estruturado
Use JSON para os logs:
$this->logger->info('Domicílio criado', [
'menage_id' => $menage->getId(),
'user' => $user->getEmail(),
'ip' => $request->getClientIp()
]);
Não logar
- Senhas (mesmo com hash)
- Tokens de autenticação
- Números de documentos de identidade completos
- Dados bancários
Retenção
- Logs de erro: 90 dias mínimo
- Logs de acesso: 30 dias
- Logs de debug: 7 dias