liks79/agentic-lab-cloudflare

GitHub: liks79/agentic-lab-cloudflare

基于 Cloudflare 平台的 SRE 事件响应自动化 Agent,利用 LLM 推理和 ReAct 模式实现告警分类、根因分析与自动化缓解建议。

Stars: 0 | Forks: 0

# Cloudflare SRE 事件响应自动化 Agent **MTTR 目标**:47 分钟 → 15 分钟 | **平台**:Cloudflare Workers + Durable Objects + D1 + Vectorize + AI Gateway ## 功能说明 当 PagerDuty/Datadog 告警在凌晨 3 点触发时,此 Agent 会: 1. 在边缘节点**接收** webhook(通过 HMAC 验证并限流) 2. 通过 LLM 推理对严重程度和影响范围进行**分类** 3. **搜索**日志(Datadog)、指标(CloudWatch)及类似的历史事件(Vectorize RAG) 4. 结合置信度评分**生成**根因假设 5. **提出**缓解措施(回滚、PR、配置更改) 6. 针对高风险操作,通过 Slack **请求**人工审批 7. **执行**已批准的操作(ArgoCD 回滚、GitHub PR) 8. **发布**自动生成的 RCA 文档并更新 Jira 所有 Agent 步骤都会被不可变地记录到 D1 中,以便进行审计和事后复盘。 ## 架构 ``` flowchart TB subgraph TRIGGERS["1 · External Triggers"] direction LR PD[PagerDuty] DD[Datadog] SL[Slack] end subgraph INGRESS["2 · Workers Ingress"] WH["HMAC verify · rate limit · tenant routing"] end subgraph QUEUE["3 · Cloudflare Queues"] Q["burst buffer · at-least-once delivery"] end subgraph SESSION["4 · Incident Session"] direction LR DO["Durable Object
per-incident state"] AI["AI Gateway
LLM routing · cost control"] DO <-->|LLM calls| AI end subgraph ORCH["5 · ReAct Agent Orchestrator"] direction TB LOOP["Thought → Action → Observation"] DISPATCH["Tool dispatch"] LOOP --> DISPATCH end subgraph TOOLS["6 · Tools"] direction LR T1[log_search] T2[incident_history] T3[create_pr] T4[deploy_rollback] end subgraph HITL["7 · Human-in-the-Loop"] APPROVAL["Slack approval
high-risk actions only"] end subgraph STORAGE["8 · Cloudflare Storage"] direction LR D1["D1 · audit log"] R2["R2 · RCA docs"] VEC["Vectorize · RAG"] end TRIGGERS --> INGRESS INGRESS --> QUEUE QUEUE --> SESSION SESSION --> ORCH ORCH --> TOOLS DISPATCH --> T1 DISPATCH --> T2 DISPATCH --> T3 DISPATCH --> T4 T3 --> APPROVAL T4 --> APPROVAL ORCH --> STORAGE T2 -.->|query| VEC ``` ## 使用的 Cloudflare 产品 | 产品 | 作用 | |---------|------| | **Workers** | Webhook 接收、Agent 协调器、工具执行器 | | **Durable Objects** | 单事件会话状态,保证强一致性 | | **Queues** | 告警事件缓冲、背压处理 | | **D1** | 事件记录、审计日志、LLM 成本追踪 | | **R2** | RCA 文档、日志快照 | | **KV** | Runbook 缓存、配置、feature flags | | **Vectorize** | 用于 RAG 的历史事件 embeddings | | **AI Gateway** | LLM 路由、租户级成本预算、审计日志 | | **Workers AI** | 默认 LLM (Llama 3.1 70B)、embeddings (BGE Large) | ## 仓库结构 ``` cloudflare-sre-agent/ ├── src/ │ ├── index.ts # Workers entry point │ ├── types.ts # Shared type definitions │ ├── ingress/ │ │ ├── webhook.ts # PagerDuty / Datadog / Slack webhook handlers │ │ └── auth.ts # HMAC-SHA256 verification │ ├── agents/ │ │ ├── incident-session.ts # Durable Object — incident state management │ │ ├── orchestrator.ts # ReAct agent loop │ │ └── queue-consumer.ts # Queue batch processor │ ├── tools/ │ │ ├── registry.ts # Tool registry and dispatch │ │ ├── datadog.ts # Log search │ │ ├── cloudwatch.ts # Metrics query │ │ ├── vectorize-search.ts # Historical incident RAG │ │ ├── github.ts # PR creation │ │ ├── argocd.ts # Deployment rollback │ │ ├── slack.ts # Notifications + approval workflow │ │ └── jira.ts # Ticket management │ ├── llm/ │ │ ├── gateway.ts # AI Gateway integration │ │ └── prompts/ # System prompts (triage, RCA, mitigation) │ ├── middleware/ │ │ ├── tenant.ts # Multi-tenant isolation │ │ └── pii-mask.ts # PII detection and masking │ ├── security/ │ │ └── prompt-guard.ts # Prompt injection defense │ └── db/ │ └── migrations/001_initial.sql ├── evals/ │ ├── scenarios/ # Test incident scenarios (JSON) │ └── run_eval.py # Eval runner (RCA F1 + MTTR measurement) ├── docs/ │ ├── architecture.md │ ├── security-review.md │ ├── runbook.md │ └── adr/ # Architecture Decision Records (5) ├── fixtures/ │ └── incidents/ # Mock PagerDuty/Datadog payloads ├── .github/ │ └── workflows/ │ ├── deploy.yml # CI/CD: test → staging → production │ └── eval.yml # Weekly automated eval run ├── .env.example # Environment variable template (no real values) ├── wrangler.toml # CF Workers config (no secrets) └── LICENSE # Apache 2.0 ``` ## 快速开始 ### 前置条件 - [Cloudflare 账户](https://dash.cloudflare.com/sign-up)(免费套餐即可用于开发) - [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/install-and-update/) v3.80+ - Node.js 20+ ### 本地开发 ``` git clone https://github.com/liks79/agentic-lab-cloudflare.git cd cloudflare-sre-agent npm install # 复制 env template — 填入你的值 cp .env.example .dev.vars # 使用你的 API keys 编辑 .dev.vars(切勿提交此文件) # 本地设置 D1 npm run db:migrate:local # 启动本地 dev server npm run dev ``` ### 使用模拟事件进行测试 ``` # 发送模拟的 PagerDuty P1 告警 curl -X POST http://localhost:8787/webhook/pagerduty \ -H "Content-Type: application/json" \ -H "X-PagerDuty-Signature: v1=" \ -d @fixtures/incidents/pagerduty-p1.json ``` ### 部署到 Cloudflare ``` # 创建 Cloudflare resources(一次性) wrangler d1 create sre-agent-db wrangler kv namespace create CONFIG_KV wrangler r2 bucket create sre-agent-incident-docs wrangler queues create sre-agent-incidents npm run vectorize:create # → 复制 IDs 到 wrangler.toml # 设置 secrets(切勿放入 wrangler.toml) wrangler secret put ANTHROPIC_API_KEY wrangler secret put PAGERDUTY_WEBHOOK_SECRET # ...(完整列表请参见 docs/runbook.md) # 部署 npm run deploy ``` 完整的设置说明请参阅 [docs/runbook.md](docs/runbook.md)。 ## 安全性 - 所有 webhook 签名均通过 HMAC-SHA256 验证(WebCrypto API) - 外部 API 凭证作为 Workers Secrets 存储(AES-256 加密) - 在进行 LLM 处理之前,对所有日志内容应用 PII 脱敏 - 结合边界标签和模式检测来防御 prompt injection - 所有破坏性操作均需通过 Slack 进行人工审批 - 多租户隔离:Durable Object 命名空间划分 + D1 行级过滤 - 完整的安全评估:[docs/security-review.md](docs/security-review.md) **切勿提交**:`.dev.vars`、`.env` 或任何包含真实凭证的文件。 ## 评估结果(合成场景) | 指标 | 数值 | |--------|-------| | RCA F1 分数 (平均) | 待完整场景套件测试后确定 | | 平均 MTTR (P1) | 待评估运行后确定 | | 通过的场景 | 待定 | 运行你自己的评估: ``` EVAL_API_KEY= python evals/run_eval.py --env staging ``` ## 架构决策记录 - [ADR-001](docs/adr/001-durable-objects-vs-redis.md):关于会话状态的 Durable Objects 与 Redis 对比 - [ADR-002](docs/adr/002-ai-gateway-model-routing.md):用于 LLM 路由的 AI Gateway - [ADR-003](docs/adr/003-react-agent-pattern.md):用于 Agent 协调的 ReAct 模式 - [ADR-004](docs/adr/004-vectorize-rag.md):用于历史事件 RAG 的 Vectorize - [ADR-005](docs/adr/005-human-in-the-loop.md):用于破坏性操作的人工介入 ## 许可证 Apache 2.0 — 查看 [LICENSE](LICENSE) *作为 Cloudflare FDE 作品集的一部分构建 — 展示了在 Cloudflare 开发者平台上的生产级 Agentic AI 系统设计。*
标签:DevOps工具, SRE, 事件响应自动化, 偏差过滤, 程序员工具, 自动化攻击, 运维自动化