Pular para o conteúdo principal

Backup e Monitoramento

Estratégias de backup automático e monitoramento da infraestrutura BITIO.

💾 Backup do Git (Forgejo)

Configuração Automática

AtributoValor
FrequênciaDiário às 3:00 AM UTC
DestinoS3 bitio-2biz-backups-production
Retenção30 dias
Script/opt/bitio/scripts/backup-git.sh
LocalizaçãoServidor Git (172.31.10.61)

Processo de Backup

  1. Para o container Forgejo temporariamente
  2. Compacta o diretório /opt/bitio/forgejo-data
  3. Reinicia o container Forgejo
  4. Upload para S3 via VPC Endpoint (sem internet)
  5. 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:

AtributoValor
Backup Window3:00-4:00 AM UTC
Retenção7 dias
Point-in-Time RecoveryHabilitado
SnapshotsDiá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.