Backup and Disaster Recovery

This section covers Energylogserver snapshot-based backup for disaster recovery. For configuration backup (system indexes, templates, Network Probe and GUI config), see Backup and Restore.

Automated Backup Configuration

#!/bin/bash
# els-backup-script.sh
BACKUP_Energy-Log-Server-7.x="/backup/logserver"
S3_BUCKET="els-backups"
DATE=$(date +%Y%m%d-%H%M%S)
# Create backup repository
curl -X PUT "localhost:9200/_snapshot/backup_repo" \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "fs",
    "settings": {
      "location": "'$BACKUP_Energy-Log-Server-7.x'"
    }
  }'
# Create snapshot
curl -X PUT "localhost:9200/_snapshot/backup_repo/snapshot_$DATE" \
  -H 'Content-Type: application/json' \
  -d '{
    "indices": "*",
    "ignore_unavailable": true,
    "include_global_state": false,
    "metadata": {
      "taken_by": "automated_backup",
      "taken_because": "scheduled_backup"
    }
  }'
# Upload to S3 (if configured)
if command -v aws &> /dev/null; then
  aws s3 sync $BACKUP_Energy-Log-Server-7.x s3://$S3_BUCKET/snapshots/
fi
# Cleanup old snapshots (keep last 7 days)
OLD_SNAPSHOTS=$(curl -s "localhost:9200/_snapshot/backup_repo/_all" | \
  jq -r '.snapshots[] | select(.start_time_in_millis < (now - 604800000) * 1000) | .snapshot')
for snapshot in $OLD_SNAPSHOTS; do
  curl -X DELETE "localhost:9200/_snapshot/backup_repo/$snapshot"
done
echo "Backup completed: snapshot_$DATE"

Disaster Recovery Procedures

#!/bin/bash
# els-disaster-recovery.sh
BACKUP_Energy-Log-Server-7.x="/backup/logserver"
SNAPSHOT_NAME=$1
if [ -z "$SNAPSHOT_NAME" ]; then
  echo "Usage: $0 <snapshot_name>"
  echo "Available snapshots:"
  curl -s "localhost:9200/_snapshot/backup_repo/_all" | jq -r '.snapshots[].snapshot'
  exit 1
fi
echo "Starting disaster recovery from snapshot: $SNAPSHOT_NAME"
# Stop data ingestion
curl -X PUT "localhost:9200/_cluster/settings" \
  -H 'Content-Type: application/json' \
  -d '{
    "persistent": {
      "cluster.routing.allocation.enable": "primaries"
    }
  }'
# Close indices
curl -X POST "localhost:9200/_all/_close"
# Restore from snapshot
curl -X POST "localhost:9200/_snapshot/backup_repo/$SNAPSHOT_NAME/_restore" \
  -H 'Content-Type: application/json' \
  -d '{
    "indices": "*",
    "ignore_unavailable": true,
    "include_global_state": false,
    "rename_pattern": "(.+)",
    "rename_replacement": "restored_$1"
  }'
# Monitor restore progress
while true; do
  STATUS=$(curl -s "localhost:9200/_recovery" | jq -r '.[] | select(.stage != "DONE") | length')
  if [ "$STATUS" = "0" ]; then
    break
  fi
  echo "Restore in progress..."
  sleep 30
done
# Re-enable allocation
curl -X PUT "localhost:9200/_cluster/settings" \
  -H 'Content-Type: application/json' \
  -d '{
    "persistent": {
      "cluster.routing.allocation.enable": null
    }
  }'
echo "Disaster recovery completed successfully"