Pular para o conteúdo principal

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étricaDescriçãoThresholdAlerta
Latência P95Tempo de resposta 95º percentil< 500ms> 1s
Taxa de ErroPercentual de requisições com erro< 1%> 5%
ThroughputRequisições por segundo> 100 RPS< 50 RPS
UptimeDisponibilidade do serviço> 99.9%< 99%

Métricas de Infraestrutura

MétricaThreshold NormalAlerta 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ívelUsoExemplo
DEBUGInformações detalhadas para debugQuery SQL executada
INFOOperações normaisUsuário logou no sistema
WARNINGSituação inesperada mas tratávelRate limit próximo do limite
ERRORErro que afeta uma operaçãoFalha ao enviar email
CRITICALErro que afeta o sistemaBanco 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çãoSeveridadeAção
CPU > 90% por 5 minAltaEscalar ou investigar
Memória > 95%CríticaReiniciar ou escalar
Latência P95 > 2sAltaInvestigar queries
Taxa de Erro > 5%CríticaInvestigar imediatamente
Disco > 90%AltaLimpar ou expandir
Celery queue > 1000MédiaAdicionar 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.