2026年6月10日 2 分钟阅读

ninoxAI 场景实战:凌晨三点 50 条告警,AI SRE 如何一键找出根因

tinyash 0 条评论

场景速览:你的监控系统在凌晨 3 点狂发 50 条告警,PagerDuty 把你叫醒。你需要在 15 分钟内判断:这是磁盘满了、服务挂了、还是上游依赖断了?ninoxAI 是一个本地优先、只读的 AI SRE 工具——它先把 50 条告警聚类为 1 个故障,再用 Agent 自动调查根因,最后给出分级修复建议给人审批。

场景入口

假设你在管理一个中等规模的微服务集群,使用了 Prometheus、Checkmk、Grafana 等多套监控。一次典型的故障是这样的:

01:00 — Checkmk 告警:node3 磁盘空间 > 90%
01:02 — Prometheus 告警:api-server 响应延迟 > 5s
01:03 — Checkmk 告警:node3 上 logstash 进程不存在
01:05 — Prometheus 告警:api-server error rate > 5%
...
01:15 — 你已经收到了 50 条告警,但不知道哪条是根因

传统 SRE 的做法:在 5 个监控工具之间来回切换,先确认磁盘是否真的满了,再看日志有没有报错,然后回忆最近有没有发过新版本。如果运气好,15 分钟找到根因;运气不好,一个钟头过去了,告警还挂着。

一个 AI SRE 的思路转变

ninoxAI(项目名 Nightwatch)把这个问题拆成三步:

  1. 聚类:把 50 条告警按照主机、服务、时间窗口聚合成 1 个故障
  2. 调查:用 Agent 自动读取 Docker 日志、Kubernetes events、AWS CloudTrail 等信息,生成根因假设
  3. 建议:给出分级修复方案,让人类审批

关键设计原则:只读(read-only)——它不执行任何操作、不回复告警、不修改配置,所有修复建议都是给人复制粘贴的。

安装:60 秒零成本启动

ninoxAI 支持 Docker Compose 一键部署,不依赖任何 LLM API 密钥就能跑起来:

git clone https://github.com/ninoxAI/nightwatch.git
cd nightwatch
cp .env.example .env
docker compose up --build

想立刻看到效果?跑内置的模拟数据:

docker compose exec ninoxai ninoxai generate-mocks
docker compose exec ninoxai ninoxai import data/mock_alerts.json
docker compose exec ninoxai ninoxai reprocess

打开 Dashboard,你就能看到模拟的 50 条告警被自动聚类成了 2-3 个故障。

连接真实监控

ninoxAI 支持多种监控源的只读接入。所有适配器都是只读的——不会 ack 告警、不会停机、不回写任何数据:

监控系统状态
Checkmk✅ 可用
Prometheus Alertmanager✅ 可用
Icinga2✅ 可用
Zabbix✅ 可用
通用 Webhook✅ 可用
PRTG❌ 规划中(stub)

配置方式很简单:在 Dashboard 的 Connections 页面填上监控系统的 API 地址和凭据,凭据用 Fernet 加密存储。

Agent 调查:自动读你的线上系统

这是 ninoxAI 最亮眼的功能。连接 LLM(支持 Anthropic、OpenAI、Mistral,也可以挂本地 Ollama),Agent 会驱动一系列只读能力去调查根因:

能力读取的内容(全部只读)
Docker容器状态、日志、stats、inspect
KubernetesPod 状态、日志、Events、Deployment
AWSCloudTrail 变更事件、EC2、安全组
Grafana通过数据源代理执行 PromQL + LogQL
GitHubCI 运行、Release、PR 变更
Git本地仓库 commit、diff、代码搜索
主机CPU/内存/磁盘/进程/socket/日志

每条 Agent 动作都被分类为 只读 · 可逆 · 不可逆 三档,加上影响范围评估。未知操作默认归入不可逆——永远不会有静默自动执行。

一个完整案例:从 50 条告警到 1 条修复建议

假设你的 api-server 掉线了,触发了一大波告警。连接到 ninoxAI 并配置好 LLM 后,Agent 的调查流程:

第一步:Agent 分析告警聚类

  • 发现 38/50 条告警都关联到 api-server 这个服务
  • 时间窗口集中在 01:00-01:05
  • 聚类结果为 1 个故障:「api-server 疑似宕机,连带触发下游依赖超时」

第二步:Agent 读取 Docker 日志

→ docker logs api-server --tail 200
→ 发现 OOM Killer 杀掉进程的记录:"
  Memory cgroup out of memory: Killed process 12345 (api-server)"

第三步:Agent 查 Kubernetes Events

→ kubectl describe pod api-server-7d8f9g
→ 发现 Pod 的 memory limit 设置为 512Mi,但容器实际 peak 使用为 768Mi

第四步:Agent 生成根因假设 + 修复建议

Agent 自动生成一份报告:

📋 根因分析:
   api-server 容器内存限制(512Mi)低于实际需求(768Mi),
   触发 OOM Killer 导致进程退出,K8s 重启 Pod。

🔧 修复建议(按风险排序):
   1. [低风险] 将 memory limit 提升到 1Gi(kubectl patch)
   2. [低风险] 添加 memory request = 768Mi,limit = 1Gi
   3. [中风险] 在部署配置中添加 resources.requests 并对应调整 HPA

所有建议都附带了可以直接复制粘贴的命令,由你审批后执行。

分布式调查:ninox 哨兵节点

如果线上环境跨越多个 VPC 或 Kubernetes 集群,ninoxAI 支持部署 ninox 哨兵节点——一个轻量的、纯出站连接的 Runner:

ninoxAI 大脑(Dashboard) ←── 出站连接 ──→ ninox Runner(在目标集群内)
                                             凭据留在本地,不留入站防火墙

每个 ninox 自动暴露自己的能力集(Docker、K8s、AWS 等),在大脑的「Parliament of Owls」视图中统一展示。大脑调用它们就像调用本地能力一样——区别只是数据不经过大脑的宿主环境。

横向对比:与其他方案的差异

维度传统 SRE(手动)PagerDuty + RunbookninoxAI
告警聚类人工在 5 个工具间切换依赖规则引擎(if-then)语义 + 时间 + 主机聚类
根因调查凭经验逐条排查需要预写 RunbookAgent 自动读线上状态
修复建议自己推理静态文档Agent 动态生成分级建议
LLM 依赖不依赖不依赖可选(template 模式离线可用)
数据安全SaaS 方可能接触告警数据本地优先,凭据 Fernet 加密

值得注意的点

  • 离线可用:默认 template 模式完全离线,不调用任何 LLM API,但 Agent 调查功能需要 LLM(支持本地 Ollama)
  • 连接器缺失:目前缺少 Sentry、Jira、Datadog 等常用工具的适配器,但支持通过 MCP Server 或 Python 能力插件扩展
  • 定位是辅助而非替代:ninoxAI 设计的初衷是「加速人类 SRE 的判断」,不是用 AI 完全取代值班工程师
  • 许可证友好:Apache 2.0,可自由用于商业和非商业项目

总结

ninoxAI 的核心价值不是「AI 取代 SRE」——而是让值班工程师在凌晨 3 点接到 50 条告警时,能在 5 分钟内而不是 30 分钟内找到根因。它的只读设计、本地优先、多监控源接入能力,组合起来让 AI SRE 从一个营销概念变成了一个可落地的开源工具。

如果你正在管理中等规模的线上服务,且每天被告警疲劳困扰,ninoxAI 值得在周末抽一小时部署试试——60 秒就能看到它在模拟数据上的效果。

项目地址:github.com/ninoxAI/nightwatch(90⭐, Apache-2.0)

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。