Pular para o conteúdo principal

Procedimentos de Manutenção Preventiva

Documento: Procedimentos de Manutenção Preventiva Sistema: Módulo Empreendedorismo Versão: 1.0 Data: Janeiro/2025


1. Introdução​

1.1. Objetivo​

Este documento estabelece os procedimentos de manutenção preventiva do sistema Módulo Empreendedorismo, visando garantir a disponibilidade, performance e integridade do sistema em ambiente de produção.

1.2. Escopo​

Este documento abrange:

  • Rotinas de manutenção diária, semanal e mensal
  • Procedimentos de verificação de saúde do sistema
  • Gestão de logs e armazenamento
  • Atualização de componentes
  • Otimização de performance

1.3. Responsabilidades​

FunçãoResponsabilidade
Administrador de SistemasExecução das rotinas de manutenção
Equipe de DevOpsAutomação e monitoramento
Gestor de TIAprovação de mudanças

1.4. Documentos Relacionados​

DocumentoDescrição
Manual de InstalaçãoProcedimentos de instalação
Plano de ContingênciaRecuperação de desastres
Documentação TécnicaArquitetura do sistema

2. Rotinas de Manutenção​

2.1. Manutenção Diária​

2.1.1. Verificação de Status dos Serviços​

Frequência: Diária, às 08:00 e 18:00 Responsável: Administrador de Sistemas Tempo Estimado: 15 minutos

Procedimento:

#!/bin/bash
# Script: check_services.sh

echo "=== Verificação de Serviços - $(date) ==="

# 1. Status dos containers
echo -e "\n[1/6] Status dos Containers:"
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"

# 2. Uso de recursos
echo -e "\n[2/6] Uso de Recursos:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

# 3. Espaço em disco
echo -e "\n[3/6] Espaço em Disco:"
df -h | grep -E '^/dev|Filesystem'

# 4. Health check do backend
echo -e "\n[4/6] Health Check Backend:"
curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" http://localhost:8000/api/health/ || echo "FALHA"

# 5. Health check do frontend
echo -e "\n[5/6] Health Check Frontend:"
curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" http://localhost:9501/ || echo "FALHA"

# 6. Verificar erros recentes
echo -e "\n[6/6] Erros nas últimas 24h:"
docker compose logs --since="24h" 2>&1 | grep -i "error\|exception\|critical" | tail -20

Critérios de Sucesso:

  • Todos os containers com status "Up"
  • Health checks retornando HTTP 200
  • Uso de disco abaixo de 80%
  • Uso de CPU abaixo de 80%
  • Sem erros críticos nos logs

Ações em Caso de Falha:

  1. Registrar incidente no sistema de tickets
  2. Reiniciar serviço afetado
  3. Escalar para equipe de suporte se necessário

2.1.2. Verificação de Logs de Erro​

Frequência: Diária, às 09:00 Responsável: Administrador de Sistemas Tempo Estimado: 30 minutos

Procedimento:

#!/bin/bash
# Script: check_logs.sh

LOG_DATE=$(date +%Y-%m-%d)
REPORT_DIR="/var/log/modulo-empreendedorismo/reports"
mkdir -p $REPORT_DIR

echo "=== Relatório de Logs - $LOG_DATE ===" > "$REPORT_DIR/log_report_$LOG_DATE.txt"

# Erros do Backend
echo -e "\n### Erros do Backend ###" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"
docker compose logs --since="24h" backend 2>&1 | grep -i "error\|exception" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"

# Erros do Celery
echo -e "\n### Erros do Celery ###" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"
docker compose logs --since="24h" celery-worker celery-worker-emails 2>&1 | grep -i "error\|exception" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"

# Erros do PostgreSQL
echo -e "\n### Erros do PostgreSQL ###" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"
docker compose logs --since="24h" db 2>&1 | grep -i "error\|fatal" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"

# Contar total de erros
TOTAL_ERRORS=$(wc -l < "$REPORT_DIR/log_report_$LOG_DATE.txt")
echo -e "\n### Total de ocorrências: $TOTAL_ERRORS ###" >> "$REPORT_DIR/log_report_$LOG_DATE.txt"

cat "$REPORT_DIR/log_report_$LOG_DATE.txt"

Classificação de Erros:

NívelDescriçãoAção
CriticalSistema indisponívelAção imediata
ErrorFuncionalidade comprometidaResolver em 4h
WarningComportamento inesperadoResolver em 24h
InfoInformativoMonitorar

2.1.3. Verificação de Filas do Celery​

Frequência: Diária, às 10:00 e 16:00 Responsável: Administrador de Sistemas Tempo Estimado: 10 minutos

Procedimento:

#!/bin/bash
# Script: check_celery.sh

echo "=== Status do Celery - $(date) ==="

# Workers ativos
echo -e "\n[1/4] Workers Ativos:"
docker compose exec -T backend celery -A core inspect active 2>/dev/null | head -30

# Tarefas reservadas (na fila)
echo -e "\n[2/4] Tarefas na Fila:"
docker compose exec -T backend celery -A core inspect reserved 2>/dev/null | head -30

# Estatísticas
echo -e "\n[3/4] Estatísticas:"
docker compose exec -T backend celery -A core inspect stats 2>/dev/null | grep -E "total|processed" | head -20

# Tarefas com falha
echo -e "\n[4/4] Tarefas com Falha (últimas 24h):"
docker compose logs --since="24h" celery-worker 2>&1 | grep -i "task.*raised\|task.*failed" | tail -10

Limites Aceitáveis:

  • Fila de emails: máximo 50 tarefas pendentes
  • Fila padrão: máximo 100 tarefas pendentes
  • Taxa de falha: máximo 1%

Ações Corretivas:

  1. Se fila acima do limite: verificar workers ativos
  2. Se alta taxa de falha: analisar logs detalhados
  3. Reiniciar workers se necessário

2.2. Manutenção Semanal​

2.2.1. Backup Semanal Completo​

Frequência: Semanal, domingo às 02:00 Responsável: Script automatizado / Administrador Tempo Estimado: 30-60 minutos

Procedimento:

#!/bin/bash
# Script: weekly_backup.sh

BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/weekly"
RETENTION_DAYS=28

mkdir -p $BACKUP_DIR

echo "=== Backup Semanal - $BACKUP_DATE ==="

# 1. Backup do banco de dados
echo "[1/4] Backup do PostgreSQL..."
docker compose exec -T db pg_dump -U postgres -Fc empreendedorismo > "$BACKUP_DIR/db_$BACKUP_DATE.dump"
gzip "$BACKUP_DIR/db_$BACKUP_DATE.dump"

# 2. Backup dos arquivos MinIO
echo "[2/4] Backup do MinIO..."
docker compose exec -T minio mc mirror local/empreendedorismo /backup/minio_$BACKUP_DATE/ 2>/dev/null || \
docker cp $(docker compose ps -q minio):/data "$BACKUP_DIR/minio_$BACKUP_DATE"

# 3. Backup das configurações
echo "[3/4] Backup das Configurações..."
tar -czf "$BACKUP_DIR/configs_$BACKUP_DATE.tar.gz" \
docker-compose.yml \
frontend/.env \
2>/dev/null

# 4. Verificar integridade
echo "[4/4] Verificando integridade..."
ls -lh "$BACKUP_DIR/"*"$BACKUP_DATE"*

# Limpeza de backups antigos
echo -e "\nLimpando backups com mais de $RETENTION_DAYS dias..."
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "*.dump" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -type d -name "minio_*" -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null

echo "=== Backup Concluído ==="

Verificação:

  • Tamanho do backup consistente com histórico
  • Arquivo não corrompido (teste de extração)
  • Transferência para storage externo confirmada

2.2.2. Otimização do Banco de Dados​

Frequência: Semanal, domingo às 03:00 Responsável: Script automatizado Tempo Estimado: 15-30 minutos

Procedimento:

#!/bin/bash
# Script: optimize_database.sh

echo "=== Otimização do Banco de Dados - $(date) ==="

# 1. VACUUM ANALYZE
echo "[1/3] Executando VACUUM ANALYZE..."
docker compose exec -T db psql -U postgres -d empreendedorismo -c "VACUUM ANALYZE;"

# 2. Reindexação (se necessário)
echo "[2/3] Verificando necessidade de reindexação..."
docker compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT
schemaname || '.' || relname as table,
pg_size_pretty(pg_total_relation_size(relid)) as total_size,
n_dead_tup as dead_tuples
FROM pg_stat_user_tables
WHERE n_dead_tup > 10000
ORDER BY n_dead_tup DESC
LIMIT 10;
"

# 3. Estatísticas
echo "[3/3] Estatísticas do banco..."
docker compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT
pg_size_pretty(pg_database_size('empreendedorismo')) as db_size,
(SELECT count(*) FROM pg_stat_activity WHERE state = 'active') as active_connections;
"

echo "=== Otimização Concluída ==="

2.2.3. Limpeza de Logs​

Frequência: Semanal, domingo às 04:00 Responsável: Script automatizado Tempo Estimado: 10 minutos

Procedimento:

#!/bin/bash
# Script: cleanup_logs.sh

echo "=== Limpeza de Logs - $(date) ==="

# 1. Limpar logs antigos do Docker
echo "[1/3] Limpando logs do Docker..."
docker system prune -f --filter "until=168h"

# 2. Rotacionar logs de aplicação
echo "[2/3] Rotacionando logs..."
find /var/log/modulo-empreendedorismo -name "*.log" -mtime +7 -exec gzip {} \;
find /var/log/modulo-empreendedorismo -name "*.gz" -mtime +30 -delete

# 3. Verificar espaço liberado
echo "[3/3] Espaço em disco após limpeza:"
df -h /var/log

echo "=== Limpeza Concluída ==="

2.2.4. Verificação de Segurança​

Frequência: Semanal, segunda-feira às 08:00 Responsável: Administrador de Sistemas Tempo Estimado: 30 minutos

Procedimento:

#!/bin/bash
# Script: security_check.sh

echo "=== Verificação de Segurança - $(date) ==="

# 1. Verificar tentativas de login falhas
echo "[1/5] Tentativas de login falhas (últimos 7 dias):"
docker compose logs --since="168h" backend 2>&1 | grep -i "login.*failed\|authentication.*failed" | wc -l

# 2. Verificar vulnerabilidades nas dependências (Python)
echo "[2/5] Vulnerabilidades Python:"
docker compose exec -T backend pip-audit 2>/dev/null || echo "pip-audit não instalado"

# 3. Verificar vulnerabilidades nas dependências (Node)
echo "[3/5] Vulnerabilidades Node.js:"
docker compose exec -T frontend npm audit 2>/dev/null || echo "Verificar manualmente"

# 4. Verificar acessos ao console MinIO
echo "[4/5] Acessos ao MinIO Console (últimos 7 dias):"
docker compose logs --since="168h" minio 2>&1 | grep -i "console\|login" | tail -10

# 5. Verificar certificados SSL
echo "[5/5] Validade do certificado SSL:"
echo | openssl s_client -servername localhost -connect localhost:443 2>/dev/null | openssl x509 -noout -dates 2>/dev/null || echo "Verificar manualmente"

echo "=== Verificação Concluída ==="

2.3. Manutenção Mensal​

2.3.1. Revisão de Performance​

Frequência: Mensal, primeiro dia útil Responsável: Administrador de Sistemas / DevOps Tempo Estimado: 2 horas

Procedimento:

  1. Análise de Métricas
#!/bin/bash
# Script: performance_review.sh

echo "=== Revisão de Performance - $(date) ==="

# Métricas do último mês
echo "[1/5] Tempo de resposta da API (média):"
docker compose logs --since="720h" backend 2>&1 | \
grep "request.*ms" | \
awk '{sum+=$NF; count++} END {print sum/count " ms"}'

# Uso médio de recursos
echo "[2/5] Uso de recursos (pico):"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}"

# Consultas lentas no banco
echo "[3/5] Consultas mais lentas:"
docker compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT
substring(query, 1, 80) as query,
calls,
round(mean_exec_time::numeric, 2) as avg_ms,
round(total_exec_time::numeric, 2) as total_ms
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
" 2>/dev/null || echo "pg_stat_statements não habilitado"

# Tamanho das tabelas
echo "[4/5] Crescimento das tabelas:"
docker compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT
relname as table,
pg_size_pretty(pg_total_relation_size(relid)) as size,
n_live_tup as rows
FROM pg_stat_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;
"

# Erros por tipo
echo "[5/5] Erros por tipo (último mês):"
docker compose logs --since="720h" backend 2>&1 | \
grep -oE "(Error|Exception): [^:]*" | \
sort | uniq -c | sort -rn | head -10
  1. Checklist de Revisão
ItemVerificaçãoStatus
Tempo de resposta API< 500ms (média)[ ]
Uso de CPU< 70% (média)[ ]
Uso de memória< 80% (média)[ ]
Espaço em disco< 70%[ ]
Taxa de erro< 0.1%[ ]
Uptime> 99.9%[ ]

2.3.2. Atualização de Dependências​

Frequência: Mensal, segunda semana Responsável: Equipe de Desenvolvimento / DevOps Tempo Estimado: 4 horas

Procedimento:

#!/bin/bash
# Script: check_updates.sh

echo "=== Verificação de Atualizações - $(date) ==="

# 1. Verificar atualizações do sistema operacional
echo "[1/4] Atualizações do SO:"
apt list --upgradable 2>/dev/null | head -20

# 2. Verificar atualizações Python
echo "[2/4] Atualizações Python:"
docker compose exec -T backend pip list --outdated | head -20

# 3. Verificar atualizações Node.js
echo "[3/4] Atualizações Node.js:"
docker compose exec -T frontend npm outdated 2>/dev/null | head -20

# 4. Verificar atualizações das imagens Docker
echo "[4/4] Imagens Docker:"
echo "PostgreSQL: $(docker pull postgres:16 2>&1 | grep -i 'status\|digest')"
echo "Redis: $(docker pull redis:7-alpine 2>&1 | grep -i 'status\|digest')"
echo "MinIO: $(docker pull minio/minio 2>&1 | grep -i 'status\|digest')"

Processo de Atualização:

  1. Listar dependências a atualizar
  2. Verificar changelogs e breaking changes
  3. Atualizar em ambiente de homologação
  4. Executar testes automatizados
  5. Aguardar 48h em homologação
  6. Agendar janela de manutenção
  7. Aplicar em produção

2.3.3. Revisão de Capacidade​

Frequência: Mensal, última semana Responsável: Administrador de Sistemas Tempo Estimado: 1 hora

Procedimento:

#!/bin/bash
# Script: capacity_review.sh

echo "=== Revisão de Capacidade - $(date) ==="

# Crescimento do banco de dados
echo "[1/4] Crescimento do Banco (último mês):"
docker compose exec -T db psql -U postgres -d empreendedorismo -c "
SELECT pg_size_pretty(pg_database_size('empreendedorismo')) as current_size;
"

# Crescimento do armazenamento MinIO
echo "[2/4] Uso do MinIO:"
docker compose exec -T minio df -h /data 2>/dev/null || \
docker exec $(docker compose ps -q minio) df -h /data

# Crescimento de usuários
echo "[3/4] Usuários cadastrados:"
docker compose exec -T backend python manage.py shell -c "
from apps.accounts.models import User
from apps.entrepreneurs.models import Entrepreneur
from apps.structuring_agents.models import StructuringAgent
print(f'Total usuários: {User.objects.count()}')
print(f'Empreendedores: {Entrepreneur.objects.count()}')
print(f'Agentes: {StructuringAgent.objects.count()}')
"

# Projeção de crescimento
echo "[4/4] Projeção (baseada no último mês):"
echo "- Verifique tendências de crescimento"
echo "- Planeje expansão se uso > 70%"

Limiares para Ação:

RecursoWarningCriticalAção
Disco70%85%Expandir storage
Memória75%90%Adicionar RAM/Escalar
CPU70%85%Otimizar/Escalar
Conexões DB70%90%Aumentar pool

3. Automação de Manutenção​

3.1. Configuração do Cron​

Adicione ao crontab (crontab -e):

# Manutenção Diária
0 8,18 * * * /opt/scripts/check_services.sh >> /var/log/modulo-empreendedorismo/daily.log 2>&1
0 9 * * * /opt/scripts/check_logs.sh >> /var/log/modulo-empreendedorismo/logs.log 2>&1
0 10,16 * * * /opt/scripts/check_celery.sh >> /var/log/modulo-empreendedorismo/celery.log 2>&1

# Manutenção Semanal
0 2 * * 0 /opt/scripts/weekly_backup.sh >> /var/log/modulo-empreendedorismo/backup.log 2>&1
0 3 * * 0 /opt/scripts/optimize_database.sh >> /var/log/modulo-empreendedorismo/optimize.log 2>&1
0 4 * * 0 /opt/scripts/cleanup_logs.sh >> /var/log/modulo-empreendedorismo/cleanup.log 2>&1
0 8 * * 1 /opt/scripts/security_check.sh >> /var/log/modulo-empreendedorismo/security.log 2>&1

# Manutenção Mensal
0 6 1 * * /opt/scripts/performance_review.sh >> /var/log/modulo-empreendedorismo/performance.log 2>&1
0 6 15 * * /opt/scripts/check_updates.sh >> /var/log/modulo-empreendedorismo/updates.log 2>&1
0 6 25 * * /opt/scripts/capacity_review.sh >> /var/log/modulo-empreendedorismo/capacity.log 2>&1

3.2. Alertas Automatizados​

Configurar alertas para:

EventoCanalPrioridade
Container downEmail + SMSAlta
Disco > 80%EmailMédia
Erro críticoEmail + SlackAlta
Backup falhouEmailAlta
Certificado expirandoEmailMédia

4. Registro de Manutenção​

4.1. Modelo de Registro​

CampoDescrição
Data/HoraTimestamp da atividade
TipoDiária/Semanal/Mensal/Emergencial
AtividadeDescrição da manutenção
ResponsávelNome do executor
ResultadoSucesso/Falha/Parcial
ObservaçõesDetalhes adicionais
TempoDuração da atividade

4.2. Exemplo de Registro​

Data: 2025-01-19 08:00
Tipo: Diária
Atividade: Verificação de status dos serviços
Responsável: Admin Sistema
Resultado: Sucesso
Observações: Todos os serviços operacionais. CPU em 45%, Memória em 62%.
Tempo: 15 minutos

5. Indicadores de Manutenção​

5.1. KPIs de Manutenção​

IndicadorMetaFórmula
Disponibilidade99.9%(Tempo total - Downtime) / Tempo total
MTBF> 720hTempo total / Número de falhas
MTTR< 1hTempo total de reparo / Número de reparos
Taxa de Sucesso de Backup100%Backups bem sucedidos / Total de backups
Conformidade de Manutenção100%Manutenções realizadas / Manutenções planejadas

5.2. Relatório Mensal​

Gerar relatório mensal contendo:

  1. Resumo de disponibilidade
  2. Incidentes ocorridos
  3. Manutenções realizadas
  4. Métricas de performance
  5. Ações planejadas para próximo período

Fim do Documento