fix(recovery): align host112 cold-start metric scope

This commit is contained in:
ogt
2026-07-15 02:05:14 +08:00
parent fa61d4e07a
commit a31a278e58
11 changed files with 134 additions and 36 deletions

View File

@@ -1,7 +1,7 @@
# AWOOOI 全棧冷啟動與主機重啟 SOP
> Version: v1.136
> Last updated: 2026-07-14 Asia/Taipei
> Version: v1.137
> Last updated: 2026-07-15 Asia/Taipei
> Scope: 99 / 110 / 111 / 112 / 120 / 121 / 188 全棧重啟恢復。112 仍是 Kali / VM guest 訊號,但 2026-06-30 全主機重啟後已納入 10 分鐘 SLO 的必要 boot / power signal此納入不代表授權任何破壞性 runtime apply。
---
@@ -10,6 +10,12 @@
本節是每次接手、開機、關機、重啟後的第一個判定錨點。若日期不是今天,必須先重跑 live check再更新本節與 `docs/workplans/2026-06-04-reboot-cold-start-backup-recovery-workplan.md`
### v1.137 2026-07-15 Cold-start metric scope 全鏈路防漂移
Cold-start exporter 的 canonical scope 固定為 `110_112_120_121_188`。producer、`ops/monitoring/alerts-unified.yml` 的 recording/alert rules、Agent99 same-run reconciler、full-stack recovery scorecard、baseline 與 Ansible post-verifier 必須使用同一個 label value任一 consumer 仍查詢舊 `110_120_121_188` 時,會把正常的新 series 誤判成缺失並產生假的 `ColdStartMonitorMissing`,因此只能標示 monitoring contract drift不能觸發主機或服務重啟。
每次 exporter scope 或 required host inventory 變更後,`verify-cold-start-monitor-deploy.sh` 除了 script hash、textfile 與 host112 blocker series也必須讀 Prometheus `/api/v1/rules` 驗證所有 cold-start recording/alert expressions已切到 canonical scope、舊 scope 為零,並確認 reload 後 `ColdStartMonitorMissing` 不再 firing。禁止人工 silence 或刪除告警掩蓋 drift先修 canonical source、走受控 rules deploy/reload再以 Prometheus rule readback、recovery scorecard 與 Agent99 same-run source verifier 共同收斂。
### v1.136 2026-07-14 Host112 正式納入 cold-start P0 release gate
`full-stack-cold-start-check.sh` 舊版仍顯示 `112 Kali is intentionally skipped`,與 Windows99 五台 required VM、Agent99 `host112_guest_readiness` phase 及全主機 10 分鐘 SLO 不一致。現行 baseline 已把 112 從 excluded host 移入 included hostP0 network 固定檢查 ping / TCP 22並透過 `kali@192.168.0.112` 執行 canonical `/usr/local/sbin/awoooi-host112-guest-readiness --check`。release gate 必須同時驗證 readback schema、systemd running、guest/console/services/recovery timer、Wazuh 1514/1515/55000 independent verifier 與 `runtime_write_performed=0`。任何一項失敗均維持 BLOCKED不得因其他四台 Linux host 或 public routes 為 200 而宣稱全主機恢復。110 textfile exporter scope 固定為 `110_112_120_121_188`,並分開輸出 112 host unreachable 與 guest readiness failed blocker series`verify-cold-start-monitor-deploy.sh` 必須驗證 source/live hash、scope 與 blocker series parity避免 checker 已納管但 Prometheus 仍漏掉 112。
@@ -67,7 +73,7 @@ v1.80 / v1.81 credential escrow intake scorecard rule同一輪 owner response
v1.93 reboot SLA readback fixed fields rule`scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py``docs/operations/awoooi-reboot-auto-recovery-slo-scorecard.snapshot.json``/api/v1/agents/reboot-auto-recovery-slo-scorecard` 必須固定輸出 `current_phase``eta_or_wait_reason``primary_blocker``active_blockers``next_safe_action``reboot_sop_progress.fixed_triage_order`。回報時先讀這些欄位,不得重新臨場發明排查順序;若 `current_phase=host_boot_detection_blocked``eta_or_wait_reason=target_window_elapsed_eta_unavailable_until_fresh_all_host_reboot_event_and_probe`只能宣稱「10 分鐘 SLO 尚未證明」,下一步固定補 fresh all-host reboot event / probe 與 99 VMware/Windows readback不得把部分 Linux host green 當全主機 green。
v1.94 Windows 99 / VMware verifier rule99 主機與 guest VM 自動啟動不得再只靠「ping 到 99」或「VMX source 存在」宣稱。`scripts/reboot-recovery/windows99-vmware-autostart.ps1 -Mode Verify` 必須輸出 no-secret 固定欄位:`VMRUN_PRESENT``VMX alias=... present=...``VMWARE_SERVICE ... ok=...``VMWARE_AUTOSTART_TASK ... ok=...``WINDOWS_UPDATE_POLICY ... ok=...``VM_POWER alias=... running=...``VMWARE_AUTOSTART_CONFIG_READY``VMWARE_AUTOSTART_POWER_READY``WINDOWS_UPDATE_NO_AUTO_REBOOT_READY``VMWARE_AUTOSTART_VERIFY_READY``reboot-auto-recovery-slo-scorecard.py --windows99-vmware-file <verify-output>` 必須解析這些欄位;缺 readback 時 active blocker 固定為 `windows99_vmware_autostart_readback_missing`next action 固定為 `collect_windows99_vmware_autostart_verify_readback_then_rerun_all_host_reboot_scorecard_no_secret_no_reboot`預設 required guest VM alias 以本輪 reboot 事故 source-of-truth 為準:`111 / 188 / 120 / 121 / 112``110` 保留為 required host / control-plane reachability不得被當成 99 VMware 預設 VM。此 verifier 不讀 Windows 密碼、不讀 secret、不啟動 VM、不重啟 host`Apply` 仍需獨立 controlled apply 與 post-verifier。
v1.94 Windows 99 / VMware verifier rule99 主機與 guest VM 自動啟動不得再只靠「ping 到 99」或「VMX source 存在」宣稱。`scripts/reboot-recovery/windows99-vmware-autostart.ps1 -Mode Verify` 必須輸出 no-secret 固定欄位:`VMRUN_PRESENT``VMX alias=... present=...``VMWARE_SERVICE ... ok=...``VMWARE_AUTOSTART_TASK ... ok=...``WINDOWS_UPDATE_POLICY ... ok=...``VM_POWER alias=... running=...``VMWARE_AUTOSTART_CONFIG_READY``VMWARE_AUTOSTART_POWER_READY``WINDOWS_UPDATE_NO_AUTO_REBOOT_READY``VMWARE_AUTOSTART_VERIFY_READY``reboot-auto-recovery-slo-scorecard.py --windows99-vmware-file <verify-output>` 必須解析這些欄位;缺 readback 時 active blocker 固定為 `windows99_vmware_autostart_readback_missing`next action 固定為 `collect_windows99_vmware_autostart_verify_readback_then_rerun_all_host_reboot_scorecard_no_secret_no_reboot`現行 required guest VM alias 依 live inventory 固定為 `110 / 188 / 120 / 121 / 112``111` 是獨立 Darwin 主機,不得被當成 Windows99 VM。舊 `111 / 188 / 120 / 121 / 112` alias contract 已由 `global_product_governance_v2`、v1.133 與本規則取代。此 verifier 不讀 Windows 密碼、不讀 secret、不啟動 VM、不重啟 host`Apply` 仍需獨立 controlled apply 與 post-verifier。
v1.95 Windows 99 management-channel readback rule若 99 可 ping / RDP / TCP`windows99-vmware-autostart.ps1 -Mode Verify` 尚未收回,不得只寫成「等 verifier」。必須先跑 `scripts/reboot-recovery/windows99-management-channel-probe.py --output <json>`,並把結果用 `reboot-auto-recovery-slo-scorecard.py --windows99-management-file <json>` 接入同一份 SLO scorecard。此 probe 只做 no-secret readbackTCP `22 / 135 / 445 / 2179 / 3389 / 5985 / 5986`、SSH BatchMode publickey、WinRM port、RDP console reachability 與 VMConnect / local console reachability不得讀 Windows 密碼、不得啟動 VM、不得重啟、不得改 Windows Update。2026-07-02 18:28 live readback`host_reachable=true``rdp_console_reachable=true``hyperv_vmconnect_open=true``local_console_channel_reachable=true``console_collection_channels=["rdp_console","hyperv_vmconnect"]``ssh_batch.status=permission_denied``winrm_http_open=false``winrm_https_open=false``remote_execution_channel_ready=false`;因此 active blockers 必須包含 `windows99_remote_execution_channel_unavailable``windows99_vmware_autostart_readback_missing`next action 固定為 `restore_windows99_no_secret_management_channel_or_collect_local_console_verify_readback_then_rerun_reboot_scorecard_no_reboot`
@@ -1426,7 +1432,7 @@ docker exec momo-pro-system python -c 'from services.cache_service import clear_
## 14. 主機開機、關機、重啟 SOP
本節是每次 110 / 120 / 121 / 188 相關電源操作的標準程序。112 是 Kali只保留 read-only evidence不納入本輪恢復或例行重啟釋出
本節是每次 110 / 112 / 120 / 121 / 188 相關電源操作的標準程序。112 是 Windows99 上的 required Kali guest必須通過 VM power、boot identity、SSH forced-command、systemd、console、Wazuh 與 recovery timer readback 才能釋出舊版「112 不納入恢復」已由 `global_product_governance_v2` 與 v1.136 取代
### 14.1 共同紅線

View File

@@ -1,9 +1,9 @@
# AWOOOI 重開機恢復 SOP
> **版本**: v5.32
> **最後更新**: 2026-07-14 (台北時間)
> **版本**: v5.33
> **最後更新**: 2026-07-15 (台北時間)
> **更新者**: Codex
> **觸發事件**: 2026-07-14 Agent99 host111/host112 readback false-alert closure
> **觸發事件**: 2026-07-15 cold-start metric scope / Agent99 same-run false-alert closure
---
@@ -21,6 +21,12 @@
## 架構概覽與依賴圖
### 2026-07-15 Cold-start scope 全鏈路防漂移
Cold-start exporter、Prometheus recording/alert rules、Agent99 same-run reconciler、recovery scorecard、baseline 與 Ansible verifier 的 canonical metric scope 一律是 `110_112_120_121_188`。若 producer 已輸出此 scope但任何 consumer 仍查詢舊 `110_120_121_188`Prometheus 會產生假的 `ColdStartMonitorMissing`Agent99 callback 也會因 source verifier 缺資料而 fail closed。這是監控合約漂移不是主機離線禁止以 silence、重啟主機或重啟產品服務處理。
受控修復順序固定為source contract diff -> focused tests / rule parse -> Gitea CD/deploy marker -> canonical rules deploy/reload -> Prometheus `/api/v1/rules` expression readback -> firing alert resolution -> recovery scorecard -> Agent99 same-run callback verifier。`verify-cold-start-monitor-deploy.sh` 必須驗證 active rules 全部使用 canonical scope 且舊 scope 為零;缺任一 receipt 只能標示 partial/degraded不能宣稱 Agent99 自動修復閉環完成。
### 2026-07-14 Agent99 host readback false-alert closure
111 是獨立 Darwin 主機,不是 Windows99 VM。Agent99 必須以 `ooo@192.168.0.111` 經 110 的 restricted forced-command route 讀取狀態;使用預設 `wooo` 會得到 SSH failure不能包裝成 CPU 壓力。forced command 固定輸出 boot/Ollama 加 `agent99_perf_readback_v1` 四項唯讀指標,仍禁止 shell、PTY、forwarding、secret read 與任意命令。Windows99 deploy/bootstrap 必須自動遷移並 post-verify `sshUsers["192.168.0.111"]="ooo"`Perf 只有在 cores/load/memory/disk 全部可解析時才可通過。