Monitoramento do Sistema
Este guia descreve as práticas de monitoramento para garantir a disponibilidade e performance do sistema.
Métricas Essenciais
Métricas de Aplicação
| Métrica | Descrição | Threshold | Alerta |
|---|---|---|---|
| Latência P95 | Tempo de resposta 95º percentil | < 500ms | > 1s |
| Taxa de Erro | Percentual de requisições com erro | < 1% | > 5% |
| Throughput | Requisições por segundo | > 100 RPS | < 50 RPS |
| Uptime | Disponibilidade do serviço | > 99.9% | < 99% |
Métricas de Infraestrutura
| Métrica | Threshold Normal | Alerta Crítico |
|---|---|---|
| CPU | < 70% | > 90% |
| Memória | < 80% | > 95% |
| Disco | < 80% | > 90% |
| Conexões DB | < 80% do pool | > 90% do pool |
Comandos de Monitoramento
Status dos Containers
docker-compose -f docker-compose.dev.yml ps
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
docker-compose -f docker-compose.dev.yml top
Saúde do Backend
curl -s http://localhost:8080/api/v1/health/ | jq
docker-compose -f docker-compose.dev.yml exec backend python manage.py check
Monitoramento do PostgreSQL
docker-compose -f docker-compose.dev.yml exec postgres psql -U postgres -d portal_talentos -c "
SELECT
count(*) FILTER (WHERE state = 'active') as active,
count(*) FILTER (WHERE state = 'idle') as idle,
count(*) as total
FROM pg_stat_activity;
"
docker-compose -f docker-compose.dev.yml exec postgres psql -U postgres -d portal_talentos -c "
SELECT
query,
calls,
mean_exec_time::numeric(10,2) as avg_time_ms,
total_exec_time::numeric(10,2) as total_time_ms
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
"
docker-compose -f docker-compose.dev.yml exec postgres psql -U postgres -d portal_talentos -c "
SELECT
relname as table,
n_live_tup as rows,
n_dead_tup as dead_rows,
last_vacuum,
last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 10;
"
Monitoramento do Redis
docker-compose -f docker-compose.dev.yml exec redis redis-cli INFO | grep -E "connected_clients|used_memory_human|keyspace"
docker-compose -f docker-compose.dev.yml exec redis redis-cli INFO clients
docker-compose -f docker-compose.dev.yml exec redis redis-cli --latency
docker-compose -f docker-compose.dev.yml exec redis redis-cli DBSIZE
Monitoramento do Celery
docker-compose -f docker-compose.dev.yml exec backend celery -A app status
docker-compose -f docker-compose.dev.yml exec backend celery -A app inspect active
docker-compose -f docker-compose.dev.yml exec backend celery -A app inspect stats
docker-compose -f docker-compose.dev.yml exec backend celery -A app inspect scheduled
Logs
Visualização de Logs
docker-compose -f docker-compose.dev.yml logs -f
docker-compose -f docker-compose.dev.yml logs -f backend
docker-compose -f docker-compose.dev.yml logs --since="30m" backend
docker-compose -f docker-compose.dev.yml logs backend 2>&1 | grep -E "ERROR|CRITICAL|WARNING"
Níveis de Log
| Nível | Uso | Exemplo |
|---|---|---|
| DEBUG | Informações detalhadas para debug | Query SQL executada |
| INFO | Operações normais | Usuário logou no sistema |
| WARNING | Situação inesperada mas tratável | Rate limit próximo do limite |
| ERROR | Erro que afeta uma operação | Falha ao enviar email |
| CRITICAL | Erro que afeta o sistema | Banco de dados indisponível |
Configuração de Logs
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'file': {
'class': 'logging.FileHandler',
'filename': '/app/logs/django.log',
'formatter': 'verbose',
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
'app': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
},
},
}
Alertas
Configuração de Alertas Recomendados
| Condição | Severidade | Ação |
|---|---|---|
| CPU > 90% por 5 min | Alta | Escalar ou investigar |
| Memória > 95% | Crítica | Reiniciar ou escalar |
| Latência P95 > 2s | Alta | Investigar queries |
| Taxa de Erro > 5% | Crítica | Investigar imediatamente |
| Disco > 90% | Alta | Limpar ou expandir |
| Celery queue > 1000 | Média | Adicionar workers |
Script de Verificação de Saúde
#!/bin/bash
HEALTH_URL="http://localhost:8080/api/v1/health/"
SLACK_WEBHOOK="https://hooks.slack.com/services/xxx"
check_api() {
response=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL)
if [ "$response" != "200" ]; then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"API Health Check Failed! Status: $response\"}" \
$SLACK_WEBHOOK
fi
}
check_disk() {
usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$usage" -gt 90 ]; then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"Disk usage critical: ${usage}%\"}" \
$SLACK_WEBHOOK
fi
}
check_memory() {
mem_usage=$(docker stats --no-stream --format "{{.MemPerc}}" portal-talentos-backend-1 | sed 's/%//')
if (( $(echo "$mem_usage > 90" | bc -l) )); then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"Backend memory usage critical: ${mem_usage}%\"}" \
$SLACK_WEBHOOK
fi
}
check_api
check_disk
check_memory
Dashboard
Métricas Sugeridas para Dashboard
Visão Geral
- Uptime do sistema
- Requisições por segundo
- Latência média
- Taxa de erro
Backend
- CPU e Memória dos containers
- Tempo de resposta por endpoint
- Erros por tipo
Banco de Dados
- Conexões ativas
- Queries mais lentas
- Tamanho das tabelas
- Cache hit ratio
Celery
- Tasks na fila
- Tasks processadas por minuto
- Tasks com erro
- Tempo médio de processamento
Ferramentas Recomendadas
Monitoramento de Infraestrutura
- Prometheus + Grafana: Métricas e dashboards
- Datadog: APM e infraestrutura
- New Relic: APM completo
Monitoramento de Logs
- ELK Stack: Elasticsearch, Logstash, Kibana
- CloudWatch: AWS native
- Papertrail: Log management simples
Monitoramento de Erros
- Sentry: Error tracking
- Rollbar: Error monitoring
- Bugsnag: Exception monitoring
Monitoramento de Uptime
- UptimeRobot: Free tier disponível
- Pingdom: Monitoramento avançado
- StatusCake: Monitoramento e alertas
Automação
Configure verificações automáticas de saúde em intervalos regulares (a cada 1-5 minutos) para detectar problemas rapidamente.
Retenção de Logs
Defina uma política de retenção de logs para evitar que o sistema fique sem espaço em disco. Recomendação: 30-90 dias dependendo dos requisitos de compliance.