Pular para o conteúdo principal

Logs

Este guia explica como consultar e gerenciar os logs do PCH-SIG.

Tipos de logs

LogFonteConteúdo
Backend SymfonyPHP-FPMErros PHP, requisições API, autenticação
Nginx FrontendNginxAcessos HTTP, erros de servidor
Nginx BackendNginxRequisições API, proxying
PostgreSQLPostgreSQLConsultas SQL, erros DB
RedisRedisOperações de cache
DockerContêineresInicializaçã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ívelDescrição
DEBUGInformações detalhadas de debug
INFOEventos informativos
NOTICEEventos normais mas significativos
WARNINGAvisos
ERRORErros de execução
CRITICALErros críticos
ALERTAção imediata necessária
EMERGENCYSistema 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..."
CampoDescrição
IPEndereço do cliente
DataData e hora
MétodoGET, POST, etc.
URIURL solicitada
StatusCódigo HTTP (200, 404, 500...)
TamanhoTamanho da resposta
User-AgentNavegador 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

  1. Abra Grafana: http://localhost:3001
  2. Vá em Explore
  3. Selecione a datasource Loki
  4. 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

  1. Crie um dashboard com os logs
  2. Adicione um alerta no número de erros
  3. 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

Próximos passos