11 KiB
主機重啟後一頁式總檢查
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 大量重排後,都先跑本頁,再決定是否宣稱恢復。
本頁只回答四件事:
- 主機是否開起來。
- 服務是否真的可用。
- 資料與備份是否新鮮。
- 有哪些不能宣稱完成。
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=0 且 BLOCKED=0,route、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 complete;credential 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 分成 SERVICE、BOUNDARY、EVIDENCE 三類,避免把 escrow_missing>0 誤判成服務降級。若 wrapper 因某個 SSH 權限或路徑失敗,再依下列分段命令手動補證據。
Wrapper 必須先解析 cold-start summary,不可只看 cold-start exit code:
- cold-start
BLOCKED>0:wrapper 才可判定BLOCKED。 - cold-start
WARN>0 BLOCKED=0:wrapper 判定為SERVICEwarning,結果最多是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_VERSIONSCHEDULER_HEALTHTOKEN_STAT/CONTAINER_TOKEN_STAT只看 metadata,不讀 token。DB_MONTHLY_SYNCDB_DAILY_FRESHNESSDB_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_daily、core.chips_daily、core.market_index_daily.tw必須是ok。blockers不可有core_margin_short_daily_missing、ai_recommendations_stale或其他資料閘門阻擋。
stock.wooo.work、/healthz、/api/healthz 皆為 200 只代表服務活著;/api/v1/system/freshness 回 blocked 時,不可宣稱 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-start:PASS=? WARN=? BLOCKED=? RESULT=?
MOMO:version=? daily_freshness=? latest_job=?
Backup:110=? 188=? core_blockers=? offsite=? escrow_missing=?
Routes:列出主要 route code
CPU / runaway:orphan=? active_ci=? load=?
仍 blocked:
不可宣稱:
6. 目前最新已驗證基線
2026-06-25 18:23 wrapper live run after deploy marker 2a9e816a:
- Gitea / CD:
code-review.yaml #3346success,cd.yaml #3345success,deploy marker2a9e816a chore(cd): deploy aa70835 [skip ci]。 - GitOps / K3s:ArgoCD
awoooi-prodSynced / Healthy;API/Web/Worker live image tagaa70835c7177475430479d8ab68621f59ebeb9b0;API/Web/Worker ready。 - Wrapper:
POST_START_QUICK_CHECK PASS=18 WARN=3 BLOCKED=0。 - Warning split:
SERVICE=0 BOUNDARY=1 EVIDENCE=2。 - Result:
FULL_STACK_GREEN_DR_ESCROW_BLOCKED,exit code0。 - Cold-start:
PASS=89 WARN=0 BLOCKED=0,ResultGREEN。 - MOMO:
V10.690,dedicated preflightPASS=19 WARN=2 BLOCKED=0,job57clean,DB_DAILY_FRESHNESS 1|2026-06-24。 - Backup:110
13/13 fresh failed=0,1882/2 fresh failed=0,core_blockers=0。 - Routes:AWOOI API / IwoooS / Governance / MOMO health / Stock all
200in direct smoke. - Wazuh / SOC:
/api/iwooos/wazuhand/api/v1/iwooos/wazuhroute boundary is200 disabled_waiting_iwooos_wazuh_owner_gate;configured=false, manager registry accepted0, runtime gate0. Treat this as a security registry evidence blocker, not a reboot service blocker. - DR:
escrow_missing=5,不可宣稱 DR complete。 - CPU:110 load still elevated around
15.78 / 11.19 / 9.02; current dominant load is StockPlatformnext build, StockPlatform headless Chrome smoke, and platform services, not an AWOOI service blocker. Do not kill smoke / CI without explicit approval. - Deploy storm note:
d2caa4ebandd52583d9CD 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:
- Wrapper:
POST_START_QUICK_CHECK PASS=18 WARN=3 BLOCKED=0。 - Warning split:
SERVICE=0 BOUNDARY=1 EVIDENCE=2。 - Result:
FULL_STACK_GREEN_DR_ESCROW_BLOCKED,exit code0。 - Cold-start:
PASS=89 WARN=0 BLOCKED=0,ResultGREEN。 - MOMO:
V10.681,dedicated preflightPASS=19 WARN=2 BLOCKED=0,job57clean,DB_DAILY_FRESHNESS 1|2026-06-24。 - Backup:110
13/13 fresh failed=0,1882/2 fresh failed=0,core_blockers=0。 - DR:
escrow_missing=5,不可宣稱 DR complete。 - CPU:110 顯示 active Gitea Actions / CD
next build/ Playwright e2e smoke;Chrome 是 Playwright child,不是 orphan Chrome。
2026-06-25 14:41 wrapper live run:
- Wrapper:
POST_START_QUICK_CHECK PASS=18 WARN=2 BLOCKED=0。 - Warning split:
SERVICE=0 BOUNDARY=1 EVIDENCE=1。 - Result:
FULL_STACK_GREEN_DR_ESCROW_BLOCKED,exit code0。 - Cold-start:
PASS=89 WARN=0 BLOCKED=0,ResultGREEN。 - MOMO:
V10.676,dedicated preflightPASS=19 WARN=2 BLOCKED=0,job57clean,DB_DAILY_FRESHNESS 1|2026-06-24。 - Backup:110
13/13 fresh failed=0,1882/2 fresh failed=0,core_blockers=0。 - DR:
escrow_missing=5,不可宣稱 DR complete。 - CPU:110 顯示 active CI / build / test load;沒有 orphan Chrome 復發證據。
2026-06-25 14:16:
- Cold-start:
PASS=89 WARN=0 BLOCKED=0,ResultGREEN。 - MOMO:
V10.674,job57clean,DB_DAILY_FRESHNESS 1|2026-06-24。 - Backup:110
13/13 fresh failed=0,1882/2 fresh failed=0,core_blockers=0。 - DR:
escrow_missing=5,不可宣稱 DR complete。 - Wazuh:host registry accepted 仍不屬於本 SOP 完成項,不可宣稱全部主機納管完成。