SRE-Agent-App
qicesun/SRE-Agent-App加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨三点,你的手机震个不停——监控大盘一片红色,支付服务报警 CrashLoopBackOff。你揉着眼睛从床上爬起来,打开终端,一行行日志往上滚:空指针异常、某行代码报错了,但你不知道是谁改的、什么时候改的。这大概是每个运维工程师最熟悉的噩梦。
现在,有一个叫 SRE-Agent 的开源项目,试图用 AI 把这个噩梦变成历史——它是一个完全自主运行的 AI 运维 Agent,能自动检测 Kubernetes 集群异常、诊断根因、自动修复,甚至帮你把 Jira 工单都开好。
传统 SRE 的工作模式是被动响应:告警来了,人去看日志,人去定位问题,人去重启服务,人去开工单。这套流程在服务少的时候还能应付,但到了微服务时代,一个中大型系统可能有成百上千个微服务同时运行,任何一个出问题都可能引发连锁反应。仅靠人肉巡检,已经无法保障服务可靠性。
SRE-Agent 的出现,正是对这一困境的正面回应。它的核心思路是:把 SRE 的专业知识编码进一个 AI Agent,让 AI 来执行整个 OODA 循环(Observe-Orient-Decide-Act)——观察(发现异常)、定向(分析根因)、决策(选择行动)、执行(修复或开单)。人在这个闭环中从"执行者"变成了"监督者",只在 AI 遇到真正无法解决的代码级 Bug 时才介入。
SRE-Agent 基于 Spring Boot 3 + LangChain4j 构建,背后由 GPT 系列模型驱动,采用的是典型的 ReAct(Reasoning + Acting)模式。但它不是简单地把对话吐给 GPT,而是将 Agent 的能力分解成了一套完整的认知架构:
这套架构的设计亮点在于** Session 级别的上下文隔离**。每个用户会话有独立的 Namespace/Workload/GitLab Project/Jira Project 配置,存放在 SessionConfigStore 中,Agent 在每轮推理前都会把这些外部配置注入到 System Prompt 中,确保不同团队的故障排查互不干扰。
项目使用 Java 17 + Spring Boot 3.2.x 而非 Python,主要有以下考量:
主要依赖:
| 组件 | 版本 | 作用 |
|---|---|---|
| Spring Boot | 3.2.6 | Web 框架、依赖注入、Session 管理 |
| LangChain4j | 0.35.0 | Agent 框架、Tool Calling、Memory |
| Fabric8 K8s Client | 6.13.1 | K8s 集群操作 |
| Jsoup | 1.17.2 | 网页抓取(查错误解决方案) |
| JDK HttpClient | 内置 | GitLab / Jira REST 调用 |
LangChain4j 是这个项目最关键的技术选型。它提供了 @Tool 注解 + AiServices 接口的组合,让开发者用非常少的代码就能把一个 Java 方法暴露为 LLM 可调用的 Tool。相比 Python 的 LangChain,LangChain4j 的类型安全性和 IDE 提示更好,配合 Java 的编译期检查,生产级代码质量更有保障。
项目自带了一个 CrashLoopBackOff 模拟场景,通过 bad-deployment.yaml 部署一个故意会崩的 payment-service(运行 nginx 容器但打印模拟的 java.lang.NullPointerException)。
坦白说,这不是一个小白友好型项目。至少需要以下环境:
项目没有提供 Dockerfile 或 docker-compose,部署方式是经典的 mvn spring-boot:run。没有 Kubernetes 集群的同学需要先搭 Minikube 环境,这一套下来对新手有不小的心理压力。
有个 SRE Cockpit 前端(Tailwind CSS),运行在 http://localhost:8080/index.html。界面上可以选择 Namespace、Workload 类型、配置 GitLab/Jira 连接,然后开始对话。整个交互是流式的(SSE),操作事件实时推送到 UI。
按照 README 的提示,当你发送:
"The payment-service in the system is down. Please check the logs for me. If it's a simple issue like a CrashLoopBackOff, try restarting it. If it cannot be fixed, please submit a JIRA ticket for me."
Agent 会依次:检测 CrashLoopBackOff → 拉取日志找到 NPE → 查询 GitLab 提交历史找到可疑变更 → 尝试重启(自动执行 Rolling Restart)→ 如果重启无效则创建 Jira Ticket(包含症状、堆栈、疑似根因)。
整个过程完全自主执行,人只需要最后看一眼 Jira Ticket 里的结论。
在体验完 Demo 之后,有几个问题需要正视:
1. 自愈能力有限:Agent 只能做 Rolling Restart 和创建工单,无法执行代码回滚(README 提到可以扩展,但目前未实现)。如果 Bug 是代码逻辑问题,重启只是拖延崩溃时间。
2. LLM 幻觉风险:在生产环境中,AI 给出的"根因分析"可能出错,开发者需要有一定的判断力,不能完全盲信 Agent 的结论。
3. 安全边界不清晰:Agent 有 K8s API 操作权限和 Jira 创建权限,这些权限在生产环境中的边界控制需要额外设计——比如是否可以删除资源、是否可以跨 Namespace 操作。
4. 企业 SSO 集成缺失:目前 GitLab 和 Jira 集成依赖 Personal Access Token,在大型企业中通常需要 SAML/OAuth 认证方式,这块目前没有覆盖。
5. 多集群支持有限:Demo 假设连接单个 Minikube 集群,多集群联邦场景需要额外的配置管理。
SRE-Agent 代表了一个重要趋势——运维自动化的下一跳不是脚本,而是 AI Agent。传统的自动化是规则驱动的(If-Then-Else),无法处理未知故障;而 AI Agent 通过 LLM 的推理能力,理论上可以应对未见过的异常场景。
从增长曲线看,GitHub 上 ai-agents、devops、kubernetes 三个 topic 的交叉项目在过去两年增长显著。随着 GPT-5 等更强推理模型的出现,这类 Agent 的诊断准确率会持续提升。但短期内,人机协作(Human-in-the-loop)仍是主流范式。
对于想尝试的企业,建议从非生产环境的故障复现场景入手,积累 Agent 的行为数据,逐步扩大自动化边界。不要一开始就交给 Agent 生产环境的写权限。
一句话总结:SRE-Agent 用 Java + LangChain4j 构建了一个 OODA 循环驱动的 AI 运维 Agent,能自动检测 K8s 故障、诊断根因、执行重启或开单,适合有一定 K8s + Java 基础的中高级 DevOps 团队在非关键路径上实验和迭代。