Backup e Monitoramento
Estratégias de backup automático e monitoramento da infraestrutura BITIO.
💾 Backup do Git (Forgejo)
Configuração Automática
| Atributo | Valor |
|---|---|
| Frequência | Diário às 3:00 AM UTC |
| Destino | S3 bitio-2biz-backups-production |
| Retenção | 30 dias |
| Script | /opt/bitio/scripts/backup-git.sh |
| Localização | Servidor Git (172.31.10.61) |
Processo de Backup
- Para o container Forgejo temporariamente
- Compacta o diretório
/opt/bitio/forgejo-data - Reinicia o container Forgejo
- Upload para S3 via VPC Endpoint (sem internet)
- Remove arquivo temporário local
Verificar Backups
# Listar backups disponíveis (via VPN + jump host)
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "aws s3 ls s3://bitio-2biz-backups-production/git-backups/"
# Verificar logs do backup
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "cat /var/log/bitio-backup.log"
# Executar backup manual
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "sudo /opt/bitio/scripts/backup-git.sh"
Restaurar Backup
# 1. Baixar backup do S3
aws s3 cp s3://bitio-2biz-backups-production/git-backups/forgejo-data-2026-07-03.tar.gz /tmp/
# 2. Parar serviços
docker compose -f /opt/bitio/docker-compose.yml stop forgejo
# 3. Backup dos dados atuais
mv /opt/bitio/forgejo-data /opt/bitio/forgejo-data-backup-$(date +%Y%m%d)
# 4. Restaurar do backup
tar -xzf /tmp/forgejo-data-2026-07-03.tar.gz -C /opt/bitio/
# 5. Reiniciar serviços
docker compose -f /opt/bitio/docker-compose.yml start forgejo
🗄️ Backup do PostgreSQL
RDS Automated Backups
O PostgreSQL no RDS tem backup automático configurado:
| Atributo | Valor |
|---|---|
| Backup Window | 3:00-4:00 AM UTC |
| Retenção | 7 dias |
| Point-in-Time Recovery | Habilitado |
| Snapshots | Diários automáticos |
Backup Manual
# Conectar via VPN e fazer dump
pg_dump -h bitio-staging-database.c03q40ewsobq.us-east-1.rds.amazonaws.com \
-U seu_usuario \
-d nome_do_banco \
--no-password \
> backup_$(date +%Y%m%d).sql
# Comprimir backup
gzip backup_$(date +%Y%m%d).sql
# Upload para S3 (opcional)
aws s3 cp backup_$(date +%Y%m%d).sql.gz s3://bitio-2biz-backups-production/postgresql-manual/
Restaurar PostgreSQL
# Restaurar de dump SQL
psql -h bitio-staging-database.c03q40ewsobq.us-east-1.rds.amazonaws.com \
-U seu_usuario \
-d nome_do_banco \
< backup_20260703.sql
# Ou via RDS Point-in-Time Recovery (AWS Console)
# Restore to specific timestamp
📊 Monitoramento da Infraestrutura
Logs de Sistema
Pritunl VPN
# Logs do container Pritunl
ssh ubuntu@50.19.198.178 "docker logs 2biz-pritunl --tail 100"
# Logs detalhados VPN
ssh ubuntu@50.19.198.178 "docker exec 2biz-pritunl cat /var/log/pritunl.log"
# Usuários conectados
ssh ubuntu@50.19.198.178 "docker exec 2biz-pritunl pritunl list users"
Nginx (Proxy)
# Logs de acesso
ssh ubuntu@50.19.198.178 "tail -f /var/log/nginx/access.log"
# Logs de erro
ssh ubuntu@50.19.198.178 "tail -f /var/log/nginx/error.log"
# Status do serviço
ssh ubuntu@50.19.198.178 "systemctl status nginx"
Forgejo Git
# Logs do container
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "docker logs bitio-forgejo --tail 100"
# Status dos containers
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "docker ps"
# Uso de disco
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "du -sh /opt/bitio/forgejo-data"
Métricas de Performance
Recursos das EC2
# CPU e memória
ssh ubuntu@50.19.198.178 "top -n 1"
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "top -n 1"
# Uso de disco
ssh ubuntu@50.19.198.178 "df -h"
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "df -h"
# Rede
ssh ubuntu@50.19.198.178 "iftop -n -t -s 5"
PostgreSQL
-- Conexões ativas
SELECT count(*) as connections
FROM pg_stat_activity
WHERE state = 'active';
-- Queries mais demoradas
SELECT
query_start,
now() - query_start as duration,
query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;
-- Tamanho do banco
SELECT
pg_size_pretty(pg_database_size(current_database())) as db_size;
Alertas e Notificações
Checklist Diário
#!/bin/bash
# Script de health check diário
echo "=== Health Check - $(date) ==="
# VPN Status
ssh ubuntu@50.19.198.178 "docker ps -f name=2biz-pritunl --format 'VPN: {{.Status}}'"
# Git Status
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "docker ps -f name=bitio-forgejo --format 'Git: {{.Status}}'"
# PostgreSQL Status
timeout 10 bash -c 'cat < /dev/null > /dev/tcp/10.0.11.230/5432' && echo "PostgreSQL: OK" || echo "PostgreSQL: ERRO"
# Backup Status
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "tail -1 /var/log/bitio-backup.log"
# Disk Usage
ssh ubuntu@50.19.198.178 "df -h / | tail -1 | awk '{print \"Pritunl Disk: \" \$5}'"
ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "df -h / | tail -1 | awk '{print \"Git Disk: \" \$5}'"
🔔 Configuração de Alertas
CloudWatch (AWS)
- Métricas EC2: CPU, memória, disco, rede
- Métricas RDS: Conexões, CPU, storage, backup status
- Métricas VPC: Tráfego, connections
Scripts de Monitoramento
# Alerta se backup falhou
#!/bin/bash
LAST_BACKUP=$(ssh -J ubuntu@50.19.198.178 ubuntu@172.31.10.61 "aws s3 ls s3://bitio-2biz-backups-production/git-backups/ | tail -1 | awk '{print \$1}'")
TODAY=$(date +%Y-%m-%d)
if [[ "$LAST_BACKUP" != "$TODAY" ]]; then
echo "ALERTA: Backup do Git não executou hoje!" | mail -s "Backup Failed" admin@bitio.com.br
fi
📈 Relatórios Mensais
Template de Relatório
# Relatório de Infraestrutura - [MÊS/ANO]
## Disponibilidade
- **VPN Pritunl**: XX.XX% uptime
- **Git Forgejo**: XX.XX% uptime
- **PostgreSQL**: XX.XX% uptime
## Backups
- **Git**: XX backups executados com sucesso
- **PostgreSQL**: XX snapshots automáticos criados
## Uso de Recursos
- **Storage S3**: XX GB utilizados
- **CPU Média EC2**: XX%
- **Conexões PostgreSQL**: XX conexões/dia médio
## Usuários VPN
- **Usuários Ativos**: XX usuários conectaram
- **Média de Conexões Simultâneas**: XX
## Incidentes
- [Listar incidentes do período]
## Ações Recomendadas
- [Melhorias identificadas]
🔧 Manutenção Preventiva
Checklist Semanal
- Verificar logs de erro
- Validar backups recentes
- Monitorar uso de disco
- Verificar certificados SSL
- Testar conectividade VPN
Checklist Mensal
- Atualizar packages de segurança
- Renovar certificados (se necessário)
- Revisar usuários VPN ativos
- Limpar logs antigos
- Testar procedimentos de restore
Checklist Trimestral
- Auditoria de segurança completa
- Teste de disaster recovery
- Revisão de custos AWS
- Atualização de documentação
- Training de novos usuários
Automação
Configure alertas no CloudWatch para métricas críticas e use scripts para health checks automatizados.
Backup Critical
Teste regularmente os procedimentos de restore para garantir que os backups estão funcionais quando necessário.