新增備份(已部署到 110,首次執行全部通過): - backup-langfuse.sh: Langfuse AI 追蹤/評測 DB (7238 traces) - backup-monitoring.sh: Prometheus + Grafana + Alertmanager volumes + configs - backup-signoz.sh: SignOz ClickHouse + SQLite (分散式追蹤/日誌) - backup-open-webui.sh: Open-WebUI LLM 對話紀錄 (SSH 188 volume) - backup-clawbot.sh: ClawBot Redis 狀態/快取 (SSH 188 volume) - backup-all.sh v3.0: 整合至 9/9 服務 告警機制: - common.sh: notify_clawbot 改用 /webhook/custom 正確格式 - failed → severity:critical → Telegram 🔴 立即告警 - 告警測試通過:{"status":"ok","alert_id":"878c4c59..."} GFS 保留:30日/12週/24月 (AWOOOI 額外 28h 高頻) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
127 lines
4.9 KiB
Bash
Executable File
127 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# =============================================================================
|
||
# WOOO AIOps - 全服務備份總控腳本
|
||
# 版本: 3.0.0
|
||
# 建立日期: 2026-03-12
|
||
# 2026-04-05 Claude Code: 加入 AWOOOI DB (v1→v2) — 首席架構師備份審計
|
||
# 2026-04-05 Claude Code: 加入 Langfuse/Monitoring/SignOz/Open-WebUI/ClawBot (v2→v3) — 備份覆蓋率審計
|
||
# =============================================================================
|
||
|
||
set -euo pipefail
|
||
|
||
source "$(dirname "$0")/common.sh"
|
||
|
||
main() {
|
||
local start_time=$(date +%s)
|
||
local failed=0
|
||
local total=9
|
||
|
||
log_info "╔══════════════════════════════════════════════════════════════╗"
|
||
log_info "║ WOOO AIOps - 全服務備份開始 (v3.0) ║"
|
||
log_info "╚══════════════════════════════════════════════════════════════╝"
|
||
|
||
# 備份 Gitea
|
||
log_info ">>> [1/${total}] 備份 Gitea..."
|
||
if /backup/scripts/backup-gitea.sh; then
|
||
log_success " Gitea 備份成功"
|
||
else
|
||
log_error " Gitea 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 MOMO Pro
|
||
log_info ">>> [2/${total}] 備份 MOMO Pro..."
|
||
if /backup/scripts/backup-momo.sh; then
|
||
log_success " MOMO Pro 備份成功"
|
||
else
|
||
log_error " MOMO Pro 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Harbor
|
||
log_info ">>> [3/${total}] 備份 Harbor..."
|
||
if /backup/scripts/backup-harbor.sh; then
|
||
log_success " Harbor 備份成功"
|
||
else
|
||
log_error " Harbor 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 AWOOOI DB (awoooi_prod + k3s_datastore)
|
||
# 2026-04-05 Claude Code: 首席架構師備份審計後加入
|
||
log_info ">>> [4/${total}] 備份 AWOOOI DB..."
|
||
if /backup/scripts/backup-awoooi.sh; then
|
||
log_success " AWOOOI DB 備份成功"
|
||
else
|
||
log_error " AWOOOI DB 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Langfuse (AI 追蹤/評測數據)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [5/${total}] 備份 Langfuse..."
|
||
if /backup/scripts/backup-langfuse.sh; then
|
||
log_success " Langfuse 備份成功"
|
||
else
|
||
log_error " Langfuse 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Monitoring (Prometheus + Grafana + Alertmanager)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [6/${total}] 備份 Monitoring..."
|
||
if /backup/scripts/backup-monitoring.sh; then
|
||
log_success " Monitoring 備份成功"
|
||
else
|
||
log_error " Monitoring 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 SignOz (ClickHouse + SQLite)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [7/${total}] 備份 SignOz..."
|
||
if /backup/scripts/backup-signoz.sh; then
|
||
log_success " SignOz 備份成功"
|
||
else
|
||
log_error " SignOz 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 Open-WebUI (LLM 對話紀錄,從 188)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [8/${total}] 備份 Open-WebUI (188)..."
|
||
if /backup/scripts/backup-open-webui.sh; then
|
||
log_success " Open-WebUI 備份成功"
|
||
else
|
||
log_error " Open-WebUI 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
# 備份 ClawBot Redis (狀態/快取,從 188,低優先)
|
||
# 2026-04-05 Claude Code: 備份覆蓋率審計後加入
|
||
log_info ">>> [9/${total}] 備份 ClawBot Redis (188)..."
|
||
if /backup/scripts/backup-clawbot.sh; then
|
||
log_success " ClawBot Redis 備份成功"
|
||
else
|
||
log_error " ClawBot Redis 備份失敗"
|
||
failed=$((failed+1))
|
||
fi
|
||
|
||
local end_time=$(date +%s)
|
||
local duration=$((end_time - start_time))
|
||
|
||
log_info "╔══════════════════════════════════════════════════════════════╗"
|
||
if [ $failed -eq 0 ]; then
|
||
log_success "║ 全服務備份完成 (${duration}s) - 全部成功 (${total}/${total}) ║"
|
||
notify_clawbot "success" "all" "全服務備份完成 (${total}/${total} 成功)" "${duration}"
|
||
else
|
||
log_error "║ 全服務備份完成 (${duration}s) - ${failed} 個失敗 ($((total-failed))/${total}) ║"
|
||
notify_clawbot "warning" "all" "全服務備份完成 ($((total-failed))/${total} 成功)" "${duration}"
|
||
fi
|
||
log_info "╚══════════════════════════════════════════════════════════════╝"
|
||
|
||
return $failed
|
||
}
|
||
|
||
main "$@"
|