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ção | Responsabilidade |
|---|---|
| Administrador de Sistemas | Execução das rotinas de manutenção |
| Equipe de DevOps | Automação e monitoramento |
| Gestor de TI | Aprovação de mudanças |
1.4. Documentos Relacionados
| Documento | Descrição |
|---|---|
| Manual de Instalação | Procedimentos de instalação |
| Plano de Contingência | Recuperação de desastres |
| Documentação Técnica | Arquitetura 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:
- Registrar incidente no sistema de tickets
- Reiniciar serviço afetado
- 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ível | Descrição | Ação |
|---|---|---|
| Critical | Sistema indisponível | Ação imediata |
| Error | Funcionalidade comprometida | Resolver em 4h |
| Warning | Comportamento inesperado | Resolver em 24h |
| Info | Informativo | Monitorar |
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:
- Se fila acima do limite: verificar workers ativos
- Se alta taxa de falha: analisar logs detalhados
- 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:
- 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
- Checklist de Revisão
| Item | Verificação | Status |
|---|---|---|
| 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:
- Listar dependências a atualizar
- Verificar changelogs e breaking changes
- Atualizar em ambiente de homologação
- Executar testes automatizados
- Aguardar 48h em homologação
- Agendar janela de manutenção
- 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:
| Recurso | Warning | Critical | Ação |
|---|---|---|---|
| Disco | 70% | 85% | Expandir storage |
| Memória | 75% | 90% | Adicionar RAM/Escalar |
| CPU | 70% | 85% | Otimizar/Escalar |
| Conexões DB | 70% | 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:
| Evento | Canal | Prioridade |
|---|---|---|
| Container down | Email + SMS | Alta |
| Disco > 80% | Média | |
| Erro crítico | Email + Slack | Alta |
| Backup falhou | Alta | |
| Certificado expirando | Média |
4. Registro de Manutenção
4.1. Modelo de Registro
| Campo | Descrição |
|---|---|
| Data/Hora | Timestamp da atividade |
| Tipo | Diária/Semanal/Mensal/Emergencial |
| Atividade | Descrição da manutenção |
| Responsável | Nome do executor |
| Resultado | Sucesso/Falha/Parcial |
| Observações | Detalhes adicionais |
| Tempo | Duraçã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
| Indicador | Meta | Fórmula |
|---|---|---|
| Disponibilidade | 99.9% | (Tempo total - Downtime) / Tempo total |
| MTBF | > 720h | Tempo total / Número de falhas |
| MTTR | < 1h | Tempo total de reparo / Número de reparos |
| Taxa de Sucesso de Backup | 100% | Backups bem sucedidos / Total de backups |
| Conformidade de Manutenção | 100% | Manutenções realizadas / Manutenções planejadas |
5.2. Relatório Mensal
Gerar relatório mensal contendo:
- Resumo de disponibilidade
- Incidentes ocorridos
- Manutenções realizadas
- Métricas de performance
- Ações planejadas para próximo período
Fim do Documento