Files
proxmox/scripts/archive/consolidated/deploy/setup-log-rotation.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

191 lines
4.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Setup Log Rotation
# Configures logrotate for monitoring logs
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }
create_logrotate_config() {
log_info "Creating logrotate configuration..."
local logrotate_file="/etc/logrotate.d/blockchain-monitoring"
local log_dir="${PROJECT_ROOT}/logs/monitoring"
# Create log directory if it doesn't exist
mkdir -p "$log_dir"
# Create logrotate config
cat > "$logrotate_file" <<EOF
# Blockchain Monitoring Log Rotation
${log_dir}/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 $(whoami) $(whoami)
sharedscripts
postrotate
# Reload monitors if needed (optional)
# killall -HUP monitor-block-production.sh monitor-transaction-pool.sh master-stability-monitor.sh 2>/dev/null || true
endscript
}
# Validator health logs (on each validator)
/var/log/validator-health.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0644 root root
}
EOF
log_success "Logrotate configuration created: $logrotate_file"
# Test configuration
if command -v logrotate &> /dev/null; then
log_info "Testing logrotate configuration..."
if sudo logrotate -d "$logrotate_file" &>/dev/null; then
log_success "Logrotate configuration is valid"
else
log_warn "Logrotate configuration may have issues (run with sudo)"
fi
else
log_warn "logrotate command not found - install logrotate package"
fi
}
create_manual_rotation_script() {
log_info "Creating manual log rotation script..."
cat > "$SCRIPT_DIR/rotate-logs.sh" <<'ROTATESCRIPT'
#!/usr/bin/env bash
# Manual Log Rotation Script
# Rotates monitoring logs manually
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
LOG_DIR="${PROJECT_ROOT}/logs/monitoring"
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
rotate_log() {
local log_file="$1"
if [ ! -f "$log_file" ]; then
return 0
fi
local size=$(stat -f%z "$log_file" 2>/dev/null || stat -c%s "$log_file" 2>/dev/null || echo "0")
local max_size=$((100 * 1024 * 1024)) # 100MB
if [ "$size" -gt "$max_size" ]; then
local timestamp=$(date +%Y%m%d_%H%M%S)
local rotated_file="${log_file}.${timestamp}"
mv "$log_file" "$rotated_file"
log_info "Rotated $log_file -> $rotated_file"
# Compress old logs older than 7 days
find "$LOG_DIR" -name "*.${timestamp%.*}" -mtime +7 -exec gzip {} \; 2>/dev/null || true
# Remove logs older than 30 days
find "$LOG_DIR" -name "*.log.*" -mtime +30 -delete 2>/dev/null || true
return 0
fi
return 1
}
main() {
log_info "Rotating monitoring logs..."
mkdir -p "$LOG_DIR"
local rotated=0
for log_file in "$LOG_DIR"/*.log; do
if [ -f "$log_file" ]; then
if rotate_log "$log_file"; then
((rotated++))
fi
fi
done
if [ "$rotated" -gt 0 ]; then
log_success "Rotated $rotated log file(s)"
else
log_info "No logs needed rotation"
fi
}
main "$@"
ROTATESCRIPT
chmod +x "$SCRIPT_DIR/rotate-logs.sh"
log_success "rotate-logs.sh script created"
}
setup_cron_rotation() {
log_info "Setting up automatic log rotation..."
# Add to crontab if not already present
local cron_job="0 0 * * * ${SCRIPT_DIR}/rotate-logs.sh >> ${PROJECT_ROOT}/logs/monitoring/rotation.log 2>&1"
if crontab -l 2>/dev/null | grep -q "rotate-logs.sh"; then
log_warn "Log rotation cron job already exists"
else
log_info "Adding log rotation cron job..."
(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
log_success "Log rotation cron job added (daily at midnight)"
fi
}
main() {
log_info "Setting up log rotation..."
echo ""
create_logrotate_config
echo ""
create_manual_rotation_script
echo ""
setup_cron_rotation
echo ""
log_success "Log rotation setup complete!"
log_info "Logs will be rotated:"
log_info " - Automatically via logrotate (daily, keep 30 days)"
log_info " - Manually via rotate-logs.sh (when logs > 100MB)"
log_info " - Via cron (daily at midnight)"
}
main "$@"