cloud-sre-agent
avivl/cloud-sre-agent加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨三点,你的告警系统发出刺耳的响声——生产环境的错误率在五分钟内飙升了 800%。值班的 SRE 工程师揉着惺忪的睡眼登录控制台,翻遍 Grafana 面板,逐一排查各服务的日志,试图在海量文本中找到那条关键线索。半小时过去,问题仍未定位,凌晨的 Slack 群里已经炸开了锅。
这几乎是每一位 SRE 工程师的噩梦。日志是系统的脉搏,但当告警来袭时,人工翻日志的低效往往让问题定位变成一场与时间的赛跑。Cloud SRE Agent 正是为了终结这种困境而诞生的——它是一个 24 小时不眠不休的值夜班 AI SRE,能够自动从日志流中嗅探异常、追溯根因,并直接动手提交代码修复。
这个项目最初来自一位开发者的个人实践经历(GitHub 用户 avivl)。项目的设计目标明确指向 HIPAA 敏感环境(医疗健康数据合规场景),这使得它从一开始就将数据安全放在首位,而非仅仅追求功能的花哨。与许多实验性 AI 代理不同,这个项目不是"概念验证"(PoC),而是经过深思熟虑的工程化设计——代码结构遵循六边形架构(Ports and Adapters),核心逻辑完全与外部依赖解耦,具备生产级可测性。
项目的核心愿景是:让 AI 在告警触发后的第一时间接手人类的排查工作,从日志分析、根因定位到代码修复,全流程自动化,最终以 Pull Request 的形式将修复方案交到工程师手中审批。
Cloud SRE Agent 的工作流程是一条精心设计的三阶段 AI 管道:
第一阶段:分类(Triage) — 当检测器发现异常日志模式时,AI 首先对问题进行快速分类。它会判断:这是真实告警还是噪声?严重程度如何?是否值得进一步分析?这一层级的判断使用轻量级模型(如 Gemini Flash),追求的是速度和低延迟。
第二阶段:根因分析(Analysis) — 通过分类的问题会进入深度分析阶段。AI 会综合多条相关日志的时间线和上下文,尝试定位问题的根本原因。这里会使用更强大的模型(如 Gemini Pro),给出详细的技术分析报告。
第三阶段:自动修复(Remediation) — 最有价值的环节。AI 不仅分析问题,还会根据根因生成具体的代码修复方案,并通过 GitHub Pull Request 或 GitLab Merge Request 的形式交付。修复方案会经过代码验证器(Code Validator)的检查,确保不会引入新的问题。

上图展示了 Agent 从日志摄入到 PR 交付的完整工作流程。可以清晰看到:日志来源 → 检测器 → AI 管道 → 代码修复 → PR 交付这条主线。
代码架构是该项目最值得称道的地方之一。它采用了经典的 六边形架构(Ports and Adapters),也称为"端口和适配器"模式。核心业务逻辑(domain、detect、pipeline)完全不依赖任何外部系统的具体实现,而是通过接口(Port)与外部世界交互:
| 端口 | 所属包 | 核心契约 |
|---|---|---|
LogSource | internal/ingest | 日志来源,输出 domain.LogEvent 流 |
Provider | internal/llm | LLM 提供商,支持结构化输出 |
PRTarget | internal/scm | 代码交付,支持 GitHub/GitLab/本地文件 |
CodeValidator | internal/pipeline | 代码验证,输出诊断结果 |
这种设计的最大好处是可替换性:LLM 提供商可以从 Gemini 切换到 OpenAI 或本地 Ollama,无需改动核心代码;日志来源可以从文件切换到 GCP Pub/Sub,同样无需修改核心逻辑。项目目前支持的 LLM 提供商包括 Google Gemini(通过 Vertex AI)、OpenAI、Anthropic 和本地 Ollama,并内置了主备链机制——当主 LLM 失败时,自动切换到备用提供商。
项目的代码质量体现了开发者的高度工程化意识。首先,代码库使用 golangci-lint 进行持续代码检查,配置了严格的 lint 规则。其次,internal/domain 包是真正的零依赖包——它只定义了纯数据结构,是整个系统的共享词汇表,与任何第三方库完全解耦。
在弹性和容错方面,项目引入了 failsafe-go 库实现熔断器(Circuit Breaker)、重试(Retry)和速率限制(Rate Limiting)。每个 LLM 调用都有超时和错误处理,通过 go.opentelemetry.io/otel 集成了完整的分布式追踪能力,确保在生产环境中可以清晰地追踪每一条告警从触发到修复的完整路径。
此外,项目的配置系统也值得注意。它使用 knadh/koanf 库处理 YAML 配置文件,支持通过环境变量覆盖配置项(使用 SRE_ 前缀,__ 表示嵌套层级),这使得在 Kubernetes 或 Cloud Run 等容器化环境中部署时,无需重新构建镜像即可调整配置。
项目提供了完整的多阶段 Dockerfile,基于 Go 1.26 构建静态二进制文件(CGO_ENABLED=0),最终运行在 Google Distroless 镜像上,最终镜像体积控制在极小范围内。部署脚本 deploy.sh 将其封装为 GCP Cloud Run Worker Pool,整个部署流程参数化,通过环境变量驱动,没有硬编码。
不过需要提醒的是,虽然容器化做得很好,但这个项目不提供 Web 界面,它是一个纯命令行的后台守护进程。部署前需要具备以下能力:理解 GCP Pub/Sub 和 Cloud Logging 的基本概念、拥有至少一个 LLM 供应商的 API Key(Gemini/OpenAI/Anthropic/Ollama 均可)、理解 GitHub PAT 或 GitLab Token 的权限配置。如果这些对你来说都有难度,建议先阅读项目文档中的 DEPLOYMENT.md。
冷静来看,这个项目也有明显的局限性。首先,它不消除 SRE 工作,而是将 SRE 从重复性的日志翻查中解放出来——最终的 PR 仍然需要人工 review 和合并。其次,对于复杂的分布式系统问题(如网络分区、数据库死锁等),AI 的分析能力仍然有限,生成的修复方案质量高度依赖提示词和模型能力。
第三,项目对 HIPAA 敏感场景做了特殊设计(数据清洗、fail-closed LLM 选择门控),但这些安全特性与业务场景强绑定,如果你的环境不需要 HIPAA 合规,这些额外的配置项反而增加了学习成本。
Cloud SRE Agent 代表了一种有意义的趋势:AI 自主代理从炫技式 Demo 走向可量产的工程化产品。它不是简单地将 LLM API 套上一层壳,而是认真思考了如何在生产环境中安全、可靠地让 AI 执行具有破坏性的操作(如生成代码修改)。代码验证器、多层 LLM 回退机制、HIPAA 数据清洗——这些设计选择体现了开发者的工程成熟度,而非仅仅是对 LLM 能力的盲目信任。
对于国内正在探索 AIOps 的团队,这个项目的六边形架构是一个极好的参考范例:如何让 AI 能力与业务逻辑解耦、如何设计弹性机制保证系统韧性、如何在享受 AI 红利的同时守住安全底线。