Nightwatch: 一款開源、唯讀的 AI SRE
Nightwatch 是一個開源、優先本地化的 AI SRE 層,旨在減少警報疲勞並自動化根因分析。它將「警報風暴」——即單一故障導致數十個分散的警報——轉化為單一、整合的事件,並利用具備工具調用能力的 AI Agent 來調查實時系統並提出修復建議,這些建議必須經由人類操作員核准。
唯讀架構設計
Nightwatch 嚴格遵循唯讀原則。它進行觀察、推理與建議,但絕不執行命令、確認警報或修改生產環境。每一個提出的修復方案都會以可供複製貼上的產物形式提供,由人類進行把關與執行。
這種設計確保了 AI 在調查過程中不會在實時系統中引入新的故障。
AI SRE 調查員
Nightwatch 的核心是一個 AI SRE 調查員,它使用 ReAct 迴圈(推理 $ ightarrow$ 行動 $ ightarrow$ 觀察)從實時系統中收集證據。該 Agent 被一組具備類型的唯讀能力白名單所驅動,確保其只能執行讀取操作。
調查能力
| 能力 | 唯讀存取權限 |
|---|---|
| Docker | 容器、日誌、統計數據與檢查 |
| Kubernetes | 透過集群內 RBAC 存取 Pods、日誌、事件與部署 |
| AWS | 透過 IAM 唯讀角色存取 CloudTrail 變更事件、EC2、安全組與配額 |
| Grafana | 透過數據源代理存取 PromQL 與 LogQL |
| GitHub | 針對變更事件 RCA 的 CI 執行紀錄、發佈版本與 PR |
| Git | 用於提交、差異比對與代碼搜尋的鏡像倉庫 |
| Host | 一般虛擬機的 CPU、記憶體、磁碟、進程與 Socket 日誌 |
安全與落地實證 (Grounding)
為了防止幻覺與安全風險,Nightwatch 採用了多項強化措施:
- 注入屏蔽 (Injection Shielding): 對不可信的日誌與差異比對進行屏蔽,以防止提示詞注入 (Prompt Injection)。
- Secret Scrubbing: 在發送至 LLM 提供商之前,對憑證與敏感數據進行單向脫敏處理。
- Grounding Gate: 一種當主張缺乏證據支持時,會限制置信度等級的機制。
- Action Classification: 每一項行動都會被分類為
read_only、reversible或irreversible。未知的行動預設會被強制歸類為irreversible。
透過 Ninox Runners 進行分散式調查
Nightwatch 使用「大腦 (brain)」與「執行器 (runner)」架構來調查受限環境中的系統。ninox runner 是一個輕量級、僅限出站的 Agent,運行於 VPC、集群或本地部署 (on-prem) 區段內。Runner 持有本地憑證並向大腦發起請求,從而消除了對入站防火牆孔洞的需求。
警報叢集化與雜訊減少
Nightwatch 位元於現有的監控工具(如 Prometheus Alertmanager、Checkmk、Icinga2 與 Zabbix)之上,並將警報正規化為單一架構。接著,它會根據主機、服務、嚴重程度與時間窗口來對警報進行叢集化,將其歸類為單一事件。
該系統也會識別「雜訊」檢查項目——即那些頻繁跳動 (flapping) 或過於敏感的檢查——並提供基於規則的調優建議,並附帶證據以向人類操作員提供理據。
LLM 整合與隱私
Nightwatch is 支援多個 LLM 提供商,包括 Anthropic (調查員的預設值)、OpenAI、Mistral,以及透過 Ollama 或 vLLM 運行的本地 LLM。它還包含一個 template 提供商,可在無需 LLM 的情況下,完全離線地進行基礎摘要與建議。
為了維護隱私,在每次遠端調用之前,都會進行脫敏與敏感數據清理,將主機名稱、IP 與 UUID 替換為確定性的佔位符。
社群與擴展
Nightwatch 採用 Apache License 2.0 授權。用戶可以透過指向 MCP server、編寫 Python 能力插件,或使用 runner 協議來擴展 AI SRE 的能力。