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"