Backup y Restauración
groales edited this page 2025-12-05 09:43:15 +01:00

Backup y Restauración

Protege tu configuración de CheckMK con backups automáticos.

Qué Hacer Backup

CheckMK almacena todo en el site (/omd/sites/monitoring):

  • Configuración de hosts y servicios
  • Históricos de rendimiento (RRD databases)
  • Usuarios y roles
  • Dashboards personalizados
  • Reglas y umbrales

Backup Manual

Backup Completo del Site

# Backup completo
docker exec checkmk omd backup /tmp/checkmk-backup-$(date +%Y%m%d).tar.gz

# Copiar fuera del contenedor
docker cp checkmk:/tmp/checkmk-backup-20250105.tar.gz ./

# Limpiar backup temporal del contenedor
docker exec checkmk rm /tmp/checkmk-backup-20250105.tar.gz

# Verificar
tar -tzf checkmk-backup-20250105.tar.gz | head

Backup Solo Configuración

# Backup solo config (más rápido, sin históricos)
docker exec checkmk omd backup --no-rrds /tmp/checkmk-config-$(date +%Y%m%d).tar.gz
docker cp checkmk:/tmp/checkmk-config-20250105.tar.gz ./

Backup Automático

Script de Backup

Crea /root/backup-checkmk.sh:

#!/bin/bash

# Configuración
BACKUP_DIR="/backups/checkmk"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
SITE_ID="monitoring"

# Crear directorio
mkdir -p $BACKUP_DIR

# Backup completo del site
echo "Backing up CheckMK site..."
docker exec checkmk omd backup /tmp/checkmk-backup-$DATE.tar.gz

# Copiar fuera del contenedor
docker cp checkmk:/tmp/checkmk-backup-$DATE.tar.gz $BACKUP_DIR/

# Limpiar temporal
docker exec checkmk rm /tmp/checkmk-backup-$DATE.tar.gz

# Limpiar backups antiguos
echo "Cleaning old backups..."
find $BACKUP_DIR -name "checkmk-backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete

# Verificar tamaño
BACKUP_SIZE=$(du -h "$BACKUP_DIR/checkmk-backup-$DATE.tar.gz" | cut -f1)
echo "Backup completado: $DATE (Tamaño: $BACKUP_SIZE)"

Automatizar con Cron

chmod +x /root/backup-checkmk.sh
crontab -e

# Backup diario a las 2 AM
0 2 * * * /root/backup-checkmk.sh >> /var/log/backup-checkmk.log 2>&1

Restauración

Restaurar desde Backup

# 1. Detener CheckMK
docker stop checkmk

# 2. Copiar backup al contenedor
docker cp checkmk-backup-20250105.tar.gz checkmk:/tmp/

# 3. Restaurar
docker exec checkmk omd restore /tmp/checkmk-backup-20250105.tar.gz

# 4. Iniciar CheckMK
docker start checkmk

# 5. Verificar
docker exec checkmk omd status
docker logs checkmk --tail 50

Restaurar en Contenedor Nuevo

# 1. Crear volumen nuevo
docker volume create checkmk_data_new

# 2. Iniciar contenedor temporal
docker run -d --name checkmk-temp \
  -v checkmk_data_new:/omd/sites \
  checkmk/check-mk-raw:latest

# 3. Esperar inicialización
sleep 30

# 4. Copiar y restaurar backup
docker cp checkmk-backup-20250105.tar.gz checkmk-temp:/tmp/
docker exec checkmk-temp omd restore /tmp/checkmk-backup-20250105.tar.gz

# 5. Detener temporal
docker stop checkmk-temp
docker rm checkmk-temp

# 6. Actualizar docker-compose.yml para usar checkmk_data_new
# 7. Desplegar stack normal

Backup Remoto

Sincronizar con S3/MinIO

#!/bin/bash
BACKUP_DIR="/backups/checkmk"
S3_BUCKET="s3://mi-bucket/checkmk/"

# Hacer backup local primero
/root/backup-checkmk.sh

# Sincronizar con S3
aws s3 sync $BACKUP_DIR $S3_BUCKET --storage-class GLACIER

# O con rclone
rclone sync $BACKUP_DIR minio:checkmk-backups

Sincronizar con Rsync

#!/bin/bash
BACKUP_DIR="/backups/checkmk"
REMOTE_SERVER="backup@servidor-remoto"
REMOTE_PATH="/backups/checkmk"

# Sincronizar
rsync -avz --delete $BACKUP_DIR/ $REMOTE_SERVER:$REMOTE_PATH/

Backup de Configuración (Git)

Versionado de Configuración

CheckMK puede exportar configuración a Git:

Setup → General → Site Management → Configuration → Enable Git support

Esto versiona todos los cambios en /omd/sites/monitoring/etc/check_mk/

# Commit manual
docker exec checkmk bash -c "cd /omd/sites/monitoring/etc/check_mk && git add . && git commit -m 'Cambios de configuración'"

# Ver historial
docker exec checkmk bash -c "cd /omd/sites/monitoring/etc/check_mk && git log --oneline"

Verificación de Backups

Script de Verificación

#!/bin/bash
BACKUP_FILE="/backups/checkmk/checkmk-backup-latest.tar.gz"

# Verificar integridad
if tar -tzf "$BACKUP_FILE" > /dev/null 2>&1; then
    echo "✓ Backup válido"
    
    # Verificar contenido
    FILES=$(tar -tzf "$BACKUP_FILE" | wc -l)
    echo "✓ Contiene $FILES archivos"
else
    echo "✗ Backup corrupto"
    exit 1
fi

Próximos Pasos

  1. Actualización - Mantén CheckMK actualizado
  2. Automatiza - Configura cron para backups automáticos
  3. Prueba restauración - Verifica que los backups funcionan