深入剖析 HolmesGPT:SRE 的福音还是噩梦?

凌晨三点,告警炸了。你爬起来 SSH 登录,kubectl get pod、翻 Prometheus、查 ELK、翻 Jira 工单、问同事上次发版改了啥——这套动作,SRE 闭着眼都能做。问题是:能不能让 AI 先做一遍?

HolmesGPT 给出的答案是:能。这是一个 CNCF 沙箱项目(Sandbox Project),定位非常明确——开源 SRE Agent,专门用于调查生产事故(Open-source SRE agent for investigating production incidents)。

它由 Robusta 团队开源,背后是 K8s 生态里相当活跃的运维自动化玩家。今天这篇文章,我把它的 CLI 交互模式、HTTP Server 部署、K8s Operator 自动巡检、50+ 内建 Toolset 这几条线全部拆开看一遍,最后聊聊一个尖锐的问题:把它塞进你的排障流程,到底是福音还是噩梦?


一、它到底是个什么东西

先说定位,避免误会。HolmesGPT 不是一个 ChatGPT 套壳,也不是”用 AI 写运维脚本”那种玩具。它是一个有手有脚的 Agent——能真的去执行 kubectl、真的去查 Prometheus、真的去读你的 Confluence 文档,然后把多源数据喂给 LLM 做根因分析,最后吐出一个带证据链的结论。

一句话总结它的核心能力链:

1
告警/提问 → LLM 决策调用哪些 Toolset → 真实执行(kubectl/PromQL/curl/bash) → 多源数据汇总 → 根因分析 + 修复建议

它支持四种运行形态,覆盖从个人排障到全集群自动化的场景:

形态 适用场景 触发方式
CLI 交互模式 个人排障、临时问诊 holmes ask 手动发起
HTTP Server 自建集成、接 Slack/Teams API 调用 POST /api/chat
K8s Operator 24/7 自动巡检 CRD(HealthCheck / ScheduledHealthCheck)
Bot 集成 团队协作告警 Slack / MS Teams / K9s / Backstage

支持的 LLM 后端几乎全平了:OpenAI、Anthropic、Gemini、AWS Bedrock、Azure AI、Google Vertex、Ollama(本地模型)、OpenRouter。对国内用户来说,Ollama 这条路意味着可以完全不把数据外发——这点后面讲”噩梦”时是关键。


二、CLI 交互模式:像跟一个资深 SRE 对话

最直接的体验是命令行。装好之后,一行命令进入交互会话:

1
2
3
holmes ask
# 或者直接带问题
holmes ask "what pods are failing?"

它的交互范式不是”我问你答”,而是 AI 自主决定调用哪些工具去查。你在终端会看到这样的执行日志:

1
2
3
4
5
6
7
8
9
10
11
12
Running tool #1 kubectl_find_resource:
...(真实执行 kubectl 命令)
Finished #1 in 1.32s, output length: 894 characters

Running tool #2 kubectl_get_logs:
...
Finished #2 in 0.87s, output length: 2103 characters

# AI 综合分析输出
Pod payment-svc-xxx 处于 CrashLoopBackOff,根因分析:
- 最近一次部署(10 分钟前)拉取了不存在镜像标签 v1.4.2
- 建议回滚到 v1.4.1,或修正镜像 tag

交互式会话里有几个 slash 命令值得记住:

  • /run —— 手动执行 shell 命令(比如 SSH 到 AI 访问不到的机器、用 sudo 跑命令),然后把输出喂回 AI。这是**人在环路(Human-in-the-loop)**的关键设计。
  • /show [编号] —— 查看某个工具执行的完整输出。终端会截断长输出,但关键细节往往在尾巴上。
  • /context —— 查看当前会话累积的上下文。长排障建议定期清一次。
  • /clear —— 重置上下文。切换到完全不相关的新问题时用它,否则 AI 会被旧上下文带偏。

/run 这个设计我特别想强调。它承认了一个现实:AI 不可能拿到所有访问权限。SSH 到隔离网络里的机器、调 sudo、拉营销系统的数据、查计划维护窗口——这些 AI 干不了。但你可以干,然后把结果贴回去,让 AI 在你提供的信息基础上做综合判断。这是目前最务实的 AI 协作范式,比那些号称”全自动接管”的方案诚实得多。


三、HTTP Server + Docker:把它做成服务

当个人 CLI 不够用——比如要接 Slack bot、要给团队提供统一排障入口、要嵌进自己的平台——就要把 HolmesGPT 跑成 HTTP 服务。

官方提供了 Docker 镜像,也提供了 Helm Chart 跑在 K8s 里。注意官方的原话:

Deploying as a service within a Kubernetes cluster is only recommended if you’re building a custom integration over an HTTP API.

也就是说,HTTP Server 模式不是给个人用户的,它面向的是”我要基于它的 API 做二次集成”的场景。

核心 API 就一个 POST /api/chat

1
2
3
4
5
6
7
# port-forward 到本地
kubectl port-forward svc/holmesgpt-holmes 8080:80

# 发起查询
curl -X POST http://localhost:8080/api/chat \
-H "Content-Type: application/json" \
-d '{"ask": "list pods in namespace default?", "model": "gpt-4.1"}'

配置通过 values.yaml 管理,核心是 modelList(定义用哪些模型)和 additionalEnvVars(API Key):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
additionalEnvVars:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: holmes-secrets
key: openai-key

modelList:
- name: gpt-4.1
api_key: "{{ env.OPENAI_API_KEY }}"
model: gpt-4.1
- name: azure-foundry
api_key: "{{ env.AZURE_KEY }}"
model: gpt-4o
api_base: "https://xxx.openai.azure.com"
api_version: "2024-02-15"

安装三步走:

1
2
3
helm repo add robusta https://robusta-charts.storage.googleapis.com
helm repo update
helm install holmesgpt robusta/holmes -f values.yaml

Helm Chart 会自动创建带 ClusterRole 的 ServiceAccount——注意这个权限范围,后面”噩梦”部分会重点说

TLS 这块也考虑到了:可以在 Pod 里直接开 TLS(甚至 mTLS),不用再挂 Ingress 或 sidecar。证书放在 K8s Secret 里,配置 tls.enabled: true + secretName 即可。有个坑:证书轮换后必须重启 Podkubectl rollout restart),因为服务启动时读一次证书,不热加载。


四、K8s Operator:24/7 自动巡检,告警还没响它就到了

这是 HolmesGPT 最有野心的一块。CLI 是人发起的,Operator 是自己盯着。官方的口号很直白:

Spot problems before your customers notice.(在客户感知到之前发现问题)

它通过两个 CRD 实现,思路完全对齐 K8s 原生的 Job / CronJob:

CRD 对标 K8s 资源 行为
HealthCheck Job 一次性执行,立即跑,报告结果
ScheduledHealthCheck CronJob 按计划周期性跑,每次生成一个 HealthCheck 留审计痕迹
TriggeredHealthCheck Deployment 滚动发布时自动触发

一个最简单的 HealthCheck 长这样:

1
2
3
4
5
6
7
8
apiVersion: holmesgpt.dev/v1alpha1
kind: HealthCheck
metadata:
name: check-default-ns
namespace: default
spec:
query: "Is the default namespace healthy? Check pod status, recent restarts, and warning events."
timeout: 30

kubectl apply 之后,用标准命令查看结果:

1
2
kubectl get hc
kubectl describe hc check-default-ns

架构上有两个分工,这点设计得比较克制、不臃肿:

1
2
3
4
5
6
┌─────────────────────────┐        ┌──────────────────────────┐
│ Controller (kopf) │ │ Holmes API Server │
│ 轻量调度器 │ HTTP │ (无状态,可水平扩展) │
│ - 管理 CRD │ ──────>│ - 执行真实 LLM 检查 │
│ - APScheduler 定时 │ │ - 调用各 Toolset 查数据 │
└─────────────────────────┘ └──────────────────────────┘
  • Controller:基于 kopf 的轻量控制器,只负责 CRD 编排和调度。定时用的是 APScheduler 而不是原生 K8s CronJob——官方的说法是”频繁检查时更高效,减少 Pod 启动开销”。
  • API Server:无状态,专门干 LLM 检查的脏活累活,可以水平扩展。

这个分工的好处:调度逻辑和执行逻辑解耦。Controller 挂了不影响正在跑的检查,API Server 扩缩容不影响调度。


五、50+ 内建 Toolset:它的”手和脚”

Agent 强不强,看它有多少工具可用。HolmesGPT 这块的覆盖面相当惊人。我把官方列的内建 Toolset 按类别整理了一遍:

🌐 云厂商

AWS / Azure / GCP(均通过 MCP 协议接入)

📊 可观测性(这块最厚)

Datadog · New Relic · Coralogix · Robusta · Prometheus · VictoriaMetrics · Grafana Dashboards · Loki · Elasticsearch / OpenSearch · Splunk · Tempo · Sentry · VictoriaLogs · Zabbix

🗄️ 数据库

ClickHouse · MariaDB · MySQL · PostgreSQL · SQLite · SQL Server · Azure SQL · MongoDB / MongoDB Atlas

🎫 工单与知识库

ServiceNow · Confluence · GitHub · GitLab · Notion · Slab

☸️ Kubernetes 与容器

Kubernetes(默认只读 kubectl)· Docker · Helm · OpenShift · KubeVela · ArgoCD · Cilium · Crossplane · Inspektor Gadget · AKS

🔧 其他

Kafka · RabbitMQ · Jenkins · Prefect · Bash(直接执行 shell)· Connectivity Check · Internet(联网搜索)

这套组合拳意味着什么?举个例子,一个真实的排障场景,HolmesGPT 可以在同一个会话里

  1. kubectl 拿到 CrashLoopBackOff 的 Pod(Kubernetes Toolset)
  2. 拉该 Pod 日志,发现是 DB 连接超时(Elasticsearch Toolset)
  3. 查 Prometheus,发现 DB 连接数在 10 分钟前打满(Prometheus Toolset)
  4. 查 Jira/ServiceNow,发现 10 分钟前有个 DB 参数变更工单(ServiceNow Toolset)
  5. 查 ArgoCD,确认是不是某次 GitOps 同步引发的(ArgoCD Toolset)
  6. 综合输出:根因是 DB 连接池参数变更 + 流量峰值叠加

这套动作,人类 SRE 要跨 4-5 个系统、20 分钟起步。AI Agent 几秒内串起来——这才是它真正的价值

自定义 Toolset:覆盖不到的,自己写

50+ 不够?HolmesGPT 支持自定义 Toolset,用 YAML 定义。核心结构:

1
2
3
4
5
6
7
8
9
toolset:
name: my-company-api
description: "查询公司内部业务接口状态"
tools:
- name: check_order_service
description: "检查订单服务健康状态" # 这段会暴露给 AI 看
command: |
curl -s https://internal-api.company.com/order/health \
-H "Authorization: Bearer ${API_TOKEN}"

几个关键点:

  • description 是给 AI 看的——LLM 根据它判断”现在该不该调这个工具”。写清楚工具干什么,比写命令本身更重要。
  • 动态变量 {{ var }} 由 LLM 从上下文推断(比如 {{ namespace }}),AI 能自己填参数。
  • 环境变量 ${VAR}{{ env.VAR }} 不暴露给 LLM,适合放 Token 这类敏感信息。
  • 命令可以是 curlkubectljq、任何 shell——需要额外二进制就自己 build 一个带依赖的镜像

这个扩展机制决定了 HolmesGPT 的上限:你愿意投入多少去封装内部系统的 Toolset,它就能接入多少


六、福音面:为什么它值得认真看

1. 把”跨系统排障”这件事的成本打下来了。
SRE 最耗时的不是某一个命令,而是在 5 个系统之间来回切换、人脑做关联。Agent 擅长的正是这种多源数据综合。

2. CNCF 沙箱项目的背书。
不是某个野生个人项目。CNCF 沙箱意味着有治理、有社区、有可持续性预期。虽然沙箱是最早期阶段,但至少过了一个门槛。

3. 人在环路设计务实。
/run 命令承认 AI 有访问边界,让人补齐 AI 够不到的数据。这是工程上的诚实,不是 PPT 美化。

4. Ollama 支持本地模型。
对数据敏感、不能外发的场景,可以本地跑 Llama / Qwen,数据不出内网。这点对国内企业落地尤其关键。

5. 150+ 测试场景的基准。
官方提供 benchmark,能横向对比不同 LLM 在 SRE 场景的表现。选模型有据可依,而不是玄学。


七、噩梦面:把它接进生产前必须想清楚的坑

1. RBAC = 把集群钥匙交给 LLM。
Helm Chart 自动创建带 ClusterRole 的 ServiceAccount。意味着 AI 能读你整个集群。如果是 MCP 版的 Kubernetes Remediation Toolset,还能执行写操作(restart、scale、drain 节点)。让 LLM 触发节点 drain?想想就后背发凉。 至少初期建议只读,写操作务必人在环路确认。

2. Toolset 的 command 是真实 shell 执行。
自定义 Toolset 里写 curlbash,是真的执行。如果 LLM 被提示词注入(比如日志里藏了恶意指令),理论上可以触发任意命令。description 暴露给 AI、变量由 AI 填,这扩大了攻击面。生产部署必须做命令白名单、最小权限、网络隔离。

3. LLM 的根因分析是概率输出,不是确定性结论。
它给的”根因”可能是幻觉。SRE 如果把它当圣旨直接照着改生产,迟早出事。它的正确用法是缩小排查范围、提供线索、生成假设,最终决策权在人。

4. 成本不可忽视。
每次调查都会调用 LLM,多轮 Toolset 执行意味着多轮 token 消耗。Operator 24/7 巡检?账单会教你做人。ScheduledHealthCheck 的频率必须谨慎规划,用便宜模型跑例行检查、用贵模型跑深度调查,是更现实的组合。

5. Operator 的”自动开 PR 修 bug”是把双刃剑。
官方宣传它能自动在 GitHub 开 PR 修复发现的问题。听起来很酷,但如果 AI 误判根因,自动开的 PR 可能引入新故障。自动 PR 必须强制 code review + CI 门禁,绝不能 auto-merge。

6. 模型选择的悖论。
强模型(GPT-4 级)推理好但贵且慢;本地小模型便宜快但推理能力有限,复杂根因分析可能带偏。SRE 场景对”答错”的容忍度极低,模型选型比通用 Agent 更敏感。


八、落地建议:从哪里开始接

如果看完想试,我的建议是分三步走,每一步都先把权限收紧

第一步:CLI 个人试用,只读。
先在自己的测试集群跑 holmes ask,给它只读 ServiceAccount,感受它的 Toolset 调用质量。先看它会不会查、查得准不准,再谈自动化。

第二步:HTTP Server + 内部工具集成。
确认 CLI 体验 OK 后,把它做成团队共享的 HTTP 服务,封装自定义 Toolset 接入你们公司的内部系统。这个阶段仍然只读,写操作全部走人在环路。

第三步:Operator 自动巡检,但写操作保留人工审批。
上 ScheduledHealthCheck 做周期巡检,告警发到 Slack。修复动作(restart/scale/PR)初期全部人工确认,积累足够信任数据后再逐步放开自动执行。

核心原则一句话:让 AI 当侦察兵,别让它当指挥官——至少现在别。


结语:它是工具,不是替身

回到标题的问题:SRE 的福音还是噩梦?

我的判断是:对把它当”辅助决策系统”的团队,是福音;对把它当”全自动 SRE 替身”的团队,是迟早的噩梦。

HolmesGPT 解决了一个真问题——跨系统排障的信息综合成本太高。它的 Toolset 生态、人在环路设计、本地模型支持,都是认真做工程的体现。但它依赖的 LLM 本质是概率系统,而生产环境对错误的容忍度趋近于零。这个张力,不会因为套上”AI SRE”的帽子就消失。

最务实的态度:把它当成一个不知疲倦、读过你所有文档、能瞬间跨 5 个系统查数据的初级 SRE 助手。 它给你线索和假设,你做判断和决策。用好了,凌晨三点的告警,它会帮你把排查时间从 40 分钟压到 10 分钟;用不好,它就是那个半夜自动 drain 你节点的新故障源。

工具中立,胜负在人。


📎 项目地址holmesgpt.dev · GitHub: robusta-dev/holmes
🏷️ CNCF Sandbox Project · Apache 2.0 License


深入剖析 HolmesGPT:SRE 的福音还是噩梦?
https://www.boer.xyz/posts/holmesgpt-101/
作者
boer
发布于
2026年7月30日
许可协议