significant tidying to logserver
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 38s

This commit is contained in:
Your Name
2025-09-20 10:33:08 +12:00
parent fa4ef61a0a
commit 7851aa810b
12 changed files with 262 additions and 29 deletions

9
logserver/_volumes.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
# Define volume items for logserver container
# These are used across backup, restore, create, and destroy operations
get_logserver_volumes() {
echo "volume:elasticsearch_data:${CONTAINER_NAME}_elasticsearch_data" \
"volume:logstash_data:${CONTAINER_NAME}_logstash_data" \
"volume:kibana_data:${CONTAINER_NAME}_kibana_data"
}

37
logserver/backup.sh Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
source "$(dirname "${BASH_SOURCE[0]}")/_volumes.sh"
_check_required_env_vars "CONTAINER_NAME"
echo "Backing up ${CONTAINER_NAME} ELK stack volumes..."
echo "Note: This may take a while for large log databases"
# Stop the containers to ensure data consistency
bash ./stop.sh || true
# Backup volumes
BACKUP_DIR="${CONFIG_PATH}/backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Export volumes
for volume in $(get_logserver_volumes); do
volume_name=$(echo $volume | cut -d: -f3)
echo "Backing up volume: $volume_name"
docker run --rm -v "$volume_name:/source:ro" -v "$BACKUP_DIR:/backup" alpine \
tar -czf "/backup/${volume_name}.tar.gz" -C /source .
done
# Backup configuration
cp -r "${CONFIG_PATH}" "$BACKUP_DIR/config_backup"
# Backup docker-compose.yml
cp docker-compose.yml "$BACKUP_DIR/" 2>/dev/null || true
echo "Backup completed to: $BACKUP_DIR"
echo "Size: $(du -sh $BACKUP_DIR | cut -f1)"
# Restart the containers
bash ./start.sh
echo "ELK stack restarted"

26
logserver/destroy.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
source "$(dirname "${BASH_SOURCE[0]}")/_volumes.sh"
_check_required_env_vars "CONTAINER_NAME"
echo "WARNING: This will PERMANENTLY DELETE all ELK stack data!"
echo "This includes all logs, dashboards, and configurations"
echo "This action cannot be undone!"
echo ""
# Since scripts must be non-interactive, only proceed if explicitly called
# Stop all containers
docker compose down || true
# Remove all volumes
for volume in $(get_logserver_volumes); do
volume_name=$(echo $volume | cut -d: -f3)
echo "Removing volume: $volume_name"
docker volume rm "$volume_name" 2>/dev/null || true
done
# Also remove the Docker network if it exists
docker network rm "${CONTAINER_NAME}_elk" 2>/dev/null || true
echo "ELK stack and all data destroyed"

View File

@@ -31,6 +31,11 @@ docker pull docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION} || _die
docker pull docker.elastic.co/logstash/logstash:${LS_VERSION} || _die "Failed to pull Logstash"
docker pull docker.elastic.co/kibana/kibana:${KIBANA_VERSION} || _die "Failed to pull Kibana"
# Create volumes using common function
source "$SCRIPT_DIR/_volumes.sh"
echo "Creating volumes..."
create_items $(get_logserver_volumes)
# Ensure config directory exists
mkdir -p "${CONFIG_PATH}"

56
logserver/restore.sh Executable file
View File

@@ -0,0 +1,56 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
source "$(dirname "${BASH_SOURCE[0]}")/_volumes.sh"
_check_required_env_vars "CONTAINER_NAME"
if [ -z "$1" ]; then
echo "Usage: $0 <backup_directory>"
echo "Available backups:"
ls -la "${CONFIG_PATH}/backups/" 2>/dev/null || echo "No backups found"
exit 1
fi
BACKUP_DIR="$1"
if [ ! -d "$BACKUP_DIR" ]; then
_die "Backup directory not found: $BACKUP_DIR"
fi
echo "Restoring ELK stack from backup: $BACKUP_DIR"
echo "WARNING: This will overwrite all current data!"
# Stop the containers
bash ./stop.sh || true
# Restore volumes
for volume in $(get_logserver_volumes); do
volume_name=$(echo $volume | cut -d: -f3)
backup_file="$BACKUP_DIR/${volume_name}.tar.gz"
if [ -f "$backup_file" ]; then
echo "Restoring volume: $volume_name"
# Clear existing data and restore
docker run --rm -v "$volume_name:/target" -v "$BACKUP_DIR:/backup:ro" alpine \
sh -c "rm -rf /target/* && tar -xzf /backup/${volume_name}.tar.gz -C /target"
else
echo "Warning: Backup file not found for $volume_name"
fi
done
# Restore configuration if exists
if [ -d "$BACKUP_DIR/config_backup" ]; then
cp -r "$BACKUP_DIR/config_backup/"* "${CONFIG_PATH}/"
fi
# Restore docker-compose.yml if exists
if [ -f "$BACKUP_DIR/docker-compose.yml" ]; then
cp "$BACKUP_DIR/docker-compose.yml" .
fi
echo "Restore completed"
# Start the containers
bash ./start.sh
echo "ELK stack restarted with restored data"