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