深夜告警风暴不再可怕:用 Nightwatch 开源 AI SRE 自动锁定根因
当 50 条告警指向同一次故障
凌晨 3 点,你被 PagerDuty 的连续推送吵醒。Kubernetes 升级出了岔子,Prometheus 爆了 47 条告警、Checkmk 报了 23 条、Icinga2 又追了 12 条。你被淹没在 80 多条告警中,花了 40 分钟才发现——所有这些告警的根因是同一个:kubelet 证书过期导致的节点 NotReady。
这不是个例。几乎所有 SRE 团队都面临同一个问题:告警系统每一条告警都正确,但它不会帮你归纳总结。你在搜日志、查指标、翻变更记录之间疲于奔命,而每次故障中最耗时的环节不是修复,而是定界——搞清楚到底哪里出了问题。
Nightwatch 正是为了这个场景而生。它是一个开源的、只读的 AI SRE 层,把告警风暴聚合成单个事件,用 AI Agent 自动调查根因,然后给出分类后的修复方案——全程只读,永不触碰生产环境。
传统值班 vs Nightwatch
| 维度 | 传统告警处理 | 使用 Nightwatch |
|---|---|---|
| 告警数量 | 一次故障触发 50+ 条告警 | 自动聚类为 1 个事件 |
| 定界时间 | 手动排查 30-60 分钟 | AI Agent 数分钟给出根因假设 |
| 修复方案 | 凭经验猜测修复步骤 | 按风险等级给出修复建议 |
| 噪声处理 | 长期忍受重复告警 | 自动标记 flapping 和误报 |
| 架构侵入 | 需要修改监控配置 | 只读适配器,零侵入接入 |
60 秒快速部署
Nightwatch 不需要复杂的 K8s 集群部署。一条命令即可启动所有组件:
git clone https://github.com/ninoxAI/nightwatch.git cd nightwatch cp .env.example .env docker compose up --build
启动后访问 http://127.0.0.1:8765,你就获得了一个完整的 AI SRE 控制台。如果想在无监控环境尝鲜,可以生成模拟数据:
docker compose exec ninoxai ninoxai generate-mocks docker compose exec ninoxai ninoxai import data/mock_alerts.json docker compose exec ninoxai ninoxai reprocess
核心功能一:告警风暴 → 事件聚类
Nightwatch 的核心流程是:ingest → normalize → cluster → score noise → recommend → investigate。
它从 Prometheus Alertmanager、Checkmk、Icinga2、Zabbix、K8s、AWS 等源拉取告警(只读适配器,不做写操作),然后做三层归一化:
- 消息指纹:将不同源的告警按内容做标准化——同一台机器的磁盘写满,Prometheus 叫
DiskSpaceCritical,Checkmk 叫fs_root_full,Nightwatch 把它们归为同一组 - 主机/服务/时间窗口聚类:在同一时间窗口内、同一主机上触发的一组告警,自动合并为一个事件
- 跨工具关联:真正优秀的聚类在于跨工具——一个 kubelet 证书过期,会在 Prometheus、K8s 事件、容器日志三个源头同时报错。Nightwatch 的 Incidents 视图会标注
confirmed by N tools,让你一眼就知道这不是偶发
核心功能二:噪声评分(Noise Scoring)
每个 SRE 都曾被「假告警」折磨过。一个频繁自动恢复的 flapping 检查、一个阈值设得太低永远触发的告警——这些噪声会在 PagerDuty 上留下无数废页面。
Nightwatch 用 5 个维度给每条告警管线打噪声分:
- 触发频率(per hour)
- 人工确认率(平均有多少告警被人为确认)
- 提单率(平均有多少告警被转为工单)
- 短恢复次数(告警后 5 分钟内自动恢复的比例)
- Flapping 程度(同一条件短时间内进入退出的次数)
每个维度归一化为 0-1 分,最终给出一条「噪声指数」。得分高的检查会被标记为 noisy,并附带调整建议——比如延长评估周期、提高阈值或降低严重级别。
核心功能三:AI SRE 根因调查(只读 Agents)
这是 Nightwatch 最亮眼的特性。传统的 AI Ops 只能做模式识别,而 Nightwatch 用一个工具调用(tool-calling)LLM 在你的生产系统上做只读调查。
Agent 的能力覆盖面相当全面:
| 调查能力 | 读取的内容(全部只读) |
|---|---|
| 🐳 Docker | 容器状态、日志、stats、inspect |
| ☸️ Kubernetes | Pods、日志、events、Deployments |
| ☁️ AWS | CloudTrail 变更事件、EC2、安全组、配额 |
| 📈 Grafana | PromQL + LogQL 查询(通过 datasource 代理) |
| 🐙 GitHub | CI 运行、发布、PR |
| 🌿 Git | 提交历史、差异、代码搜索 |
| 🖥️ 主机 | CPU/内存/磁盘/进程/日志 |
Agent 的每个动作都被分类为 read_only(安全)、reversible(可逆)、irreversible(不可逆),任何未知动作默认为最高风险等级。你永远不用担心 Agent 误操作——它只有眼睛,没有手。
运行模式有两种:
- 控制台模式:在
http://localhost:8765/agent里实时观察 Agent 思考→取证→推理的过程 - CLI 模式:在终端直接发起调查
Agent 调查完成后会输出一个结构化的根因假设,包含:
Root Cause Hypothesis (confidence: 0.87)
├── Primary: kubelet certificate expired at Jun 8 03:15 UTC
│ ├── Evidence: kubelet.log shows "x509 certificate has expired"
│ └── Impact: Node node-03 NotReady → 47 workloads pending
├── Fix Proposal (risk: read-only)
│ └── Run: kubeadm certs renew all; systemctl restart kubelet
└── Fix Proposal (risk: reversible)
└── Drain + cordon + reboot node-03 in maintenance window
每个修复建议都附有可复制的命令、风险等级和影响范围——由人类审批后再执行。
分布式部署:ninox 远程探测器
Nightwatch 支持在大规模环境下通过 ninox runner 实现分布式监控。每个 ninox 是一个纯出站的瘦进程,部署在被监控环境(K8s 集群、VPC、on-prem 网段)内部,仅从内部向外发起连接——不给生产环境开任何入站防火墙端口。
每个 ninox 保留所在环境的凭证本地,只暴露只读能力给 Nightwatch 大脑。所有 agent 调用看起来像本地调用,但实际是在远程 ninox 上执行的。这种方式让你可以在内网段、DMZ、多云环境间部署统一的 AI SRE,而不破坏网络隔离策略。
横向对比
在当前的开源生态中,Nightwatch 的定位非常独特:
| 工具 | 定位 | 读写模式 | AI 能力 | 部署方式 |
|---|---|---|---|---|
| Nightwatch | AI SRE 告警根因分析 | 只读 | GPT-4/Claude Agent 调查 | Docker / Python |
| Prometheus + Grafana | 监控 + 可视化 | 读(采集)+ 写(告警) | 无 | 集群部署 |
| BigPanda | 商业 AIOps 事件管理 | 只读集成 | 专有 ML 模型 | SaaS |
| PagerDuty | 事件响应平台 | 集成多源 | 基础 AIOps | SaaS |
| Moogsoft | 商业 AIOps | 只读集成 | 专有算法 | SaaS / 自托管 |
Nightwatch 的核心差异化在于:
- 开源 + 本地优先:数据不离开你的网络
- AI Agent 是真正的调查者:不是模式匹配,而是像人一样读日志、查指标、搜变更
- 只读架构:从设计上杜绝了 AI 误操作的可能
注意事项
- Nightwatch 的 AI Agent 需要一个工具调用型 LLM(支持 Anthropic、OpenAI 或本地 Ollama)。如果只做告警聚类和噪声评分,可以完全离线运行
- 当前版本(0.1.0)主要面向 Python 3.11+,Docker 部署是官方推荐方式
- 项目非常新(2026 年 6 月 4 日创建),社区和文档仍在快速迭代中。issue tracker 响应很及时
- 如果被监控环境是纯 Windows,目前 ninox runner 的支持有限——优先考虑 Linux/macOS 环境
- 许可证:Apache 2.0,可自由商用
总结
Nightwatch 解决了一个每个 SRE 团队都会遇到的真实问题:告警数量远超过人脑的处理能力。它不引入新的监控系统,而是在现有体系之上加了一个 AI 驱动的「归纳层」——用 AI Agent 替你回答「现在到底出了什么问题?」和「我应该先做什么?」这两个关键问题。
对于中小型团队(没有专职 SRE 的 DevOps 团队)、以及 K8s 环境复杂的团队,Nightwatch 的价值尤其明显。它把告警从「噪音」变成了「信息」,把值班工程师的精力从「会诊定界」解放到「决策修复」上。