Pular para o conteúdo principal

Monitoramento

Esta seção descreve as práticas de monitoramento do sistema.

Visão Geral

O monitoramento do sistema é essencial para garantir disponibilidade, performance e identificar problemas antes que afetem os usuários.

Endpoints de Health Check

Backend

# Health check básico
curl http://localhost:8000/api/health/

# Resposta esperada
{
"status": "healthy",
"database": "connected",
"redis": "connected",
"minio": "connected"
}

Frontend

curl http://localhost:9501/
# Deve retornar status 200

MinIO

curl http://localhost:9000/minio/health/live
# Deve retornar status 200

Monitoramento de Containers

Status dos Containers

# Verificar status de todos os containers
docker-compose ps

# Output esperado - todos com status "Up"
NAME STATUS
backend Up
celery-worker Up
celery-worker-emails Up
db Up
frontend Up
minio Up
redis Up

Recursos (CPU/Memória)

# Monitorar recursos em tempo real
docker stats

# Snapshot único
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Logs

# Logs de todos os serviços
docker-compose logs -f

# Logs de um serviço específico
docker-compose logs -f backend

# Últimas 100 linhas
docker-compose logs --tail=100 backend

# Logs desde uma data específica
docker-compose logs --since="2024-01-01" backend

Monitoramento do Banco de Dados

Conexões Ativas

docker-compose exec db psql -U postgres -d empreendedorismo -c "
SELECT count(*) as conexoes_ativas
FROM pg_stat_activity
WHERE state = 'active';"

Tamanho do Banco

docker-compose exec db psql -U postgres -d empreendedorismo -c "
SELECT pg_size_pretty(pg_database_size('empreendedorismo')) as tamanho;"

Tabelas Maiores

docker-compose exec db psql -U postgres -d empreendedorismo -c "
SELECT relname as tabela,
pg_size_pretty(pg_total_relation_size(relid)) as tamanho
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;"

Monitoramento do Celery

Workers Ativos

docker-compose exec backend celery -A core inspect active

Tarefas na Fila

docker-compose exec backend celery -A core inspect reserved

Estatísticas

docker-compose exec backend celery -A core inspect stats

Monitoramento do MinIO

Espaço Utilizado

# Acessar console MinIO
# http://localhost:9001
# Dashboard mostra métricas de uso

Via API

docker-compose exec minio mc admin info local

Alertas Recomendados

Configurar alertas para:

MétricaLimiteAção
CPU container > 80%WarningInvestigar
CPU container > 95%CriticalEscalar/Otimizar
Memória container > 80%WarningInvestigar
Disco > 80%WarningLimpar/Expandir
Disco > 90%CriticalAção imediata
Container downCriticalReiniciar/Investigar
Tempo de resposta API > 2sWarningOtimizar
Erros 5xx > 1%WarningInvestigar logs
Fila Celery > 100 tarefasWarningVerificar workers

Script de Monitoramento

Criar /opt/scripts/monitor.sh:

#!/bin/bash

echo "=== Status dos Containers ==="
docker-compose ps

echo ""
echo "=== Uso de Recursos ==="
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

echo ""
echo "=== Espaço em Disco ==="
df -h | grep -E '^/dev'

echo ""
echo "=== Conexões do Banco ==="
docker-compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT count(*) as conexoes FROM pg_stat_activity WHERE state = 'active';" 2>/dev/null

echo ""
echo "=== Filas Celery ==="
docker-compose exec -T backend celery -A core inspect active 2>/dev/null | head -20

echo ""
echo "=== Últimos Erros (Backend) ==="
docker-compose logs --tail=20 backend 2>&1 | grep -i error || echo "Nenhum erro recente"

Dashboards Recomendados

Para monitoramento avançado, considerar:

  1. Grafana + Prometheus

    • Métricas de containers
    • Dashboards customizados
    • Alertas configuráveis
  2. Sentry

    • Monitoramento de erros
    • Performance tracking
    • Alertas em tempo real
  3. pgAdmin

    • Monitoramento do PostgreSQL
    • Análise de queries
    • Dashboards de performance

Logs Estruturados

Para facilitar o monitoramento, configurar logs estruturados no Django:

# settings.py
LOGGING = {
'version': 1,
'formatters': {
'json': {
'class': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'json'
}
},
'root': {
'level': 'INFO',
'handlers': ['console']
}
}