Files
awoooi/docs/runbooks/REBOOT-POST-START-QUICK-CHECK.md

11 KiB
Raw Blame History

主機重啟後一頁式總檢查

Version: v1.2 Last updated: 2026-06-25 Asia/Taipei Scope: 110 / 120 / 121 / 188 post-reboot service recovery. 112 Kali / Wazuh / active scan 不屬於本流程。


1. 使用時機

每次 110 / 120 / 121 / 188 任一台主機開機、關機、重啟、斷電恢復、VMware console fsck、Docker / K3s 大量重排後,都先跑本頁,再決定是否宣稱恢復。

本頁只回答四件事:

  1. 主機是否開起來。
  2. 服務是否真的可用。
  3. 資料與備份是否新鮮。
  4. 有哪些不能宣稱完成。

2. 絕對判定規則

層級 可以宣稱 必要證據
HOST_BOOTED 主機已開機 ping / SSH port 回應,或 console login prompt。
HOST_READY 主機可管理 SSH read-only 可登入failed units / disk / clock / network 無硬阻塞。
SERVICE_READY 單站服務可用 route / container / local health / DB 或依賴健康都通過。
FULL_STACK_GREEN 本輪重啟服務恢復完成 cold-start WARN=0BLOCKED=0route、K3s、DB freshness、backup、alert、CronJob、exporter 都通過。
DR_COMPLETE 災難復原也完成 FULL_STACK_GREEN 加上 credential escrow missing 0、offsite / restore / escrow evidence 完整。

禁止用單一訊號取代整體判定:

  • 網站 200 不等於資料最新。
  • container healthy 不等於 DB / backup / alert 正常。
  • K3s node Ready 不等於 workload 分散與 CronJob freshness 正常。
  • Wazuh route 200 不等於所有主機 agent registry accepted。
  • backup fresh 不等於 DR completecredential escrow 缺口必須獨立保留。

3. 10 分鐘只讀總檢查順序

優先使用 repo-side wrapper

scripts/reboot-recovery/post-start-quick-check.sh --no-color

此 wrapper 只做 read-only 檢查,並委派既有 cold-start / MOMO preflight / backup-status不 restart、不 reload、不 import、不改 K8s、不讀 token 內容。wrapper 會把 warning 分成 SERVICEBOUNDARYEVIDENCE 三類,避免把 escrow_missing>0 誤判成服務降級。若 wrapper 因某個 SSH 權限或路徑失敗,再依下列分段命令手動補證據。

Wrapper 必須先解析 cold-start summary不可只看 cold-start exit code

  • cold-start BLOCKED>0wrapper 才可判定 BLOCKED
  • cold-start WARN>0 BLOCKED=0wrapper 判定為 SERVICE warning結果最多是 DEGRADED;不可放大成 BLOCKED
  • cold-start WARN=0 BLOCKED=0:才可進入 FULL_STACK_GREEN / FULL_STACK_GREEN_DR_ESCROW_BLOCKED 判定。

Step 1 - 主機與 SSH

for host in 192.168.0.110 192.168.0.120 192.168.0.121 192.168.0.188; do
  ping -c 1 -W 1 "$host" >/dev/null && echo "PING_OK $host" || echo "PING_FAIL $host"
  nc -z -w 2 "$host" 22 && echo "SSH_PORT_OK $host" || echo "SSH_PORT_FAIL $host"
done

若任一 P0 host 失敗,不要跳去修 Nginx。先判斷是 power / NIC / fsck / SSH trust / host boot 問題。

Step 2 - 全棧 cold-start scorecard

scripts/reboot-recovery/full-stack-cold-start-check.sh --monitor-read-only --no-color --watch --interval 1 --max-attempts 1

判定:

  • PASS>0 WARN=0 BLOCKED=0:可進入 FULL_STACK_GREEN 候選。
  • WARN>0 BLOCKED=0:只能宣稱 SERVICE_AVAILABLE_DEGRADED,必須列 WARN。
  • BLOCKED>0:不可宣稱恢復完成,先處理第一個 blocker。

Step 3 - MOMO 專用 freshness gate

scripts/reboot-recovery/momo-drive-token-source-recovery-preflight.sh

必要欄位:

  • MOMO_HEALTH_VERSION
  • SCHEDULER_HEALTH
  • TOKEN_STAT / CONTAINER_TOKEN_STAT 只看 metadata不讀 token。
  • DB_MONTHLY_SYNC
  • DB_DAILY_FRESHNESS
  • DB_LATEST_DAILY_IMPORT_JOB

DB_DAILY_FRESHNESS > 2 或 import job 失敗時,不可宣稱 MOMO 資料已恢復。

Step 4 - StockPlatform freshness gate

curl -k -sS https://stock.wooo.work/api/v1/system/freshness

必要欄位:

  • status 必須是 ok,才可宣稱 StockPlatform 資料層恢復。
  • latest_trading_date 必須對齊最近交易日。
  • core.price_dailycore.chips_dailycore.market_index_daily.tw 必須是 ok
  • blockers 不可有 core_margin_short_daily_missingai_recommendations_stale 或其他資料閘門阻擋。

stock.wooo.work/healthz/api/healthz 皆為 200 只代表服務活著;/api/v1/system/freshnessblocked 時,不可宣稱 StockPlatform 資料最新。

Step 5 - Backup / offsite / escrow

在 110 只讀執行:

/backup/scripts/backup-status.sh --no-notify --no-refresh

必要欄位:

  • 110 backup fresh / failed count。
  • 188 backup fresh / failed count。
  • core_blockers=0
  • integrity_stale=0
  • offsite_fresh=1
  • rclone_gdrive_fresh=1
  • escrow_missing 必須照實回報。

escrow_missing>0 時,服務可 green但 DR 不可 green。

Step 6 - Public routes 只作輔助證據

for url in \
  https://awoooi.wooo.work/ \
  https://awoooi.wooo.work/api/v1/health \
  https://awoooi.wooo.work/zh-TW/iwooos \
  https://vibework.wooo.work/ \
  https://awooogo.wooo.work/ \
  https://2026fifa.wooo.work/ \
  https://agent.wooo.work/ \
  https://mo.wooo.work/ \
  https://mo.wooo.work/health \
  https://stock.wooo.work/ \
  https://stock.wooo.work/healthz \
  https://stock.wooo.work/api/healthz \
  https://bitan.wooo.work/ \
  https://tsenyang.com/ \
  https://www.tsenyang.com/ \
  https://vtuber.wooo.work/ \
  https://gitea.wooo.work/ \
  https://harbor.wooo.work/ \
  https://registry.wooo.work/ \
  https://sentry.wooo.work/ \
  https://signoz.wooo.work/ \
  https://langfuse.wooo.work/ \
  https://aiops.wooo.work/; do
  code="$(curl -k -sS -o /dev/null -w '%{http_code}' "$url" || true)"
  echo "$code $url"
done

Route smoke 必須和 cold-start / DB / backup 一起看;不能單獨當恢復證明。

Step 7 - 110 CPU / runaway process

ssh wooo@192.168.0.110 'uptime; vmstat 1 5; ps -eo pid,ppid,pgid,stat,pcpu,pmem,comm,args --sort=-pcpu | head -25'

分類:

  • orphan Chrome / headless smoke走 runaway process PlayBook未批准不得 kill。
  • Gitea Actions / CI build / test先標註短期 CI load不當事故處理。
  • Docker / DB / Harbor / Sentry 持續高載:回到服務相依與 exporter readback。

4. 放行與阻擋口徑

結果 口徑
FULL_STACK_GREEN_DR_ESCROW_BLOCKED 可宣稱所有服務面恢復;不可宣稱 DR complete。
SERVICE_AVAILABLE_DEGRADED 可宣稱服務可用;必須列 WARN 與下一步。
BLOCKED_MOMO_DATA_FRESHNESS 可宣稱網站可用;不可宣稱資料最新。
BLOCKED_STOCK_DATA_FRESHNESS 可宣稱 StockPlatform route / container 可用;不可宣稱 StockPlatform 資料或 AI 推薦已最新。
BLOCKED_HOST_OR_K3S 不可宣稱全棧恢復;先修主機 / K3s。
BLOCKED_BACKUP_CORE 不可宣稱恢復完成;備份紅燈優先。
BLOCKED_WAZUH_REGISTRY 不屬於本 SOP 的服務恢復 blocker必須交給 IwoooS / Wazuh lane不可改 Wazuh runtime。
GREEN_WITH_EVIDENCE_WARNINGS 服務可宣稱恢復,但仍有非服務面證據提醒,必須列入 LOGBOOK。

Wrapper exit code

  • 0:沒有 service blocker。可能仍有 DR boundary / evidence warning。
  • 1:有 service warning只能宣稱 degraded。
  • 2:有 service blocker不可宣稱恢復完成。

5. 完成後必填 LOGBOOK 摘要

時間:
命令類型read-only / docs-only / write-with-approval
主機110 / 120 / 121 / 188
Cold-startPASS=? WARN=? BLOCKED=? RESULT=?
MOMOversion=? daily_freshness=? latest_job=?
Backup110=? 188=? core_blockers=? offsite=? escrow_missing=?
Routes列出主要 route code
CPU / runawayorphan=? active_ci=? load=?
仍 blocked
不可宣稱:

6. 目前最新已驗證基線

2026-06-25 18:23 wrapper live run after deploy marker 2a9e816a

  • Gitea / CDcode-review.yaml #3346 successcd.yaml #3345 successdeploy marker 2a9e816a chore(cd): deploy aa70835 [skip ci]
  • GitOps / K3sArgoCD awoooi-prod Synced / HealthyAPI/Web/Worker live image tag aa70835c7177475430479d8ab68621f59ebeb9b0API/Web/Worker ready。
  • WrapperPOST_START_QUICK_CHECK PASS=18 WARN=3 BLOCKED=0
  • Warning splitSERVICE=0 BOUNDARY=1 EVIDENCE=2
  • ResultFULL_STACK_GREEN_DR_ESCROW_BLOCKEDexit code 0
  • Cold-startPASS=89 WARN=0 BLOCKED=0Result GREEN
  • MOMOV10.690dedicated preflight PASS=19 WARN=2 BLOCKED=0job 57 cleanDB_DAILY_FRESHNESS 1|2026-06-24
  • Backup110 13/13 fresh failed=0188 2/2 fresh failed=0core_blockers=0
  • RoutesAWOOI API / IwoooS / Governance / MOMO health / Stock all 200 in direct smoke.
  • Wazuh / SOC/api/iwooos/wazuh and /api/v1/iwooos/wazuh route boundary is 200 disabled_waiting_iwooos_wazuh_owner_gate; configured=false, manager registry accepted 0, runtime gate 0. Treat this as a security registry evidence blocker, not a reboot service blocker.
  • DRescrow_missing=5,不可宣稱 DR complete。
  • CPU110 load still elevated around 15.78 / 11.19 / 9.02; current dominant load is StockPlatform next build, StockPlatform headless Chrome smoke, and platform services, not an AWOOI service blocker. Do not kill smoke / CI without explicit approval.
  • Deploy storm noted2caa4eb and d52583d9 CD runs were superseded by later main commits; use the latest deploy marker and live image readback, not canceled runs, as production truth.

2026-06-25 15:04 wrapper live run

  • WrapperPOST_START_QUICK_CHECK PASS=18 WARN=3 BLOCKED=0
  • Warning splitSERVICE=0 BOUNDARY=1 EVIDENCE=2
  • ResultFULL_STACK_GREEN_DR_ESCROW_BLOCKEDexit code 0
  • Cold-startPASS=89 WARN=0 BLOCKED=0Result GREEN
  • MOMOV10.681dedicated preflight PASS=19 WARN=2 BLOCKED=0job 57 cleanDB_DAILY_FRESHNESS 1|2026-06-24
  • Backup110 13/13 fresh failed=0188 2/2 fresh failed=0core_blockers=0
  • DRescrow_missing=5,不可宣稱 DR complete。
  • CPU110 顯示 active Gitea Actions / CD next build / Playwright e2e smokeChrome 是 Playwright child不是 orphan Chrome。

2026-06-25 14:41 wrapper live run

  • WrapperPOST_START_QUICK_CHECK PASS=18 WARN=2 BLOCKED=0
  • Warning splitSERVICE=0 BOUNDARY=1 EVIDENCE=1
  • ResultFULL_STACK_GREEN_DR_ESCROW_BLOCKEDexit code 0
  • Cold-startPASS=89 WARN=0 BLOCKED=0Result GREEN
  • MOMOV10.676dedicated preflight PASS=19 WARN=2 BLOCKED=0job 57 cleanDB_DAILY_FRESHNESS 1|2026-06-24
  • Backup110 13/13 fresh failed=0188 2/2 fresh failed=0core_blockers=0
  • DRescrow_missing=5,不可宣稱 DR complete。
  • CPU110 顯示 active CI / build / test load沒有 orphan Chrome 復發證據。

2026-06-25 14:16

  • Cold-startPASS=89 WARN=0 BLOCKED=0Result GREEN
  • MOMOV10.674job 57 cleanDB_DAILY_FRESHNESS 1|2026-06-24
  • Backup110 13/13 fresh failed=0188 2/2 fresh failed=0core_blockers=0
  • DRescrow_missing=5,不可宣稱 DR complete。
  • Wazuhhost registry accepted 仍不屬於本 SOP 完成項,不可宣稱全部主機納管完成。