Venkata-Manoj/Resilience-Ops-Env

GitHub: Venkata-Manoj/Resilience-Ops-Env

一个基于强化学习的 IT 事件响应模拟环境,帮助 AI 代理在安全约束下学习故障排查与修复。

Stars: 0 | Forks: 0

```markdown title: ResilienceOps — IT Incident Response RL Environment emoji: 🚨 colorFrom: red colorTo: gray sdk: docker pinned: false app_port: 8000 base_path: /web tags: - openenv - reinforcement-learning - sre - incident-response # 🚨 ResilienceOps 环境 一个 [OpenEnv](https://github.com/openai/openenv) 强化学习环境,其中 AI 代理学习在时间压力和资源约束下对模拟的 IT 基础设施事件进行分诊、诊断和修复。 ## 📋 环境概述 ResilienceOps 模拟了站点可靠性工程师(SRE)在事件响应期间的实际工作流程。代理必须处理告警、分析日志、识别根本原因并执行修复步骤,同时避免可能使情况恶化的破坏性操作。 ### 动机 IT 事件响应每年使企业因停机损失数十亿美元。SRE 团队花费数小时手动分诊告警、关联日志并执行运行手册。训练 AI 代理自主处理事件——优先评估严重性、选择诊断工具并应用正确的修复——是一个关键的现实问题,Google、Netflix 和 AWS 等公司正在积极解决。 本环境通过提供以下内容来满足这一需求: - **真实场景**:数据库故障、网络分区和级联中断 - **密集奖励**:整个事件过程中持续反馈,而不仅仅是二元结果 - **安全约束**:对在脑裂场景中重启数据库等危险操作进行惩罚 - **渐进式复杂度**:四个难度等级中的七个任务,从 P3(简单)到 P1(关键) ## 🌍 实际应用价值 ResilienceOps 填补了 AI 代理在 IT 运维方面训练的空白。以下是该环境的即时实用价值: ### 行业需求 - **IT 停机成本**:每年高达 265 亿美元(盖特纳数据) - **MTTR(平均恢复时间)** 直接影响收入——每一分钟都很关键 - **SRE 人才短缺**:企业迫切需要自主的事件响应能力 - **Google、Netflix、AWS** 都在构建用于事件响应的人工智能 ### 独特价值主张 1. **首个开源 SRE 训练环境** - 暂无其他开源 RL 环境专门针对事件响应 - 填补了学术基准与生产需求之间的空白 - 支持安全自主操作的研究 2. **以安全为核心的设计** - 惩罚危险操作(例如脑裂期间重启数据库) - 教导代理识别破坏性操作与有帮助操作的区别 - 对实际部署至关重要,错误可能导致数百万损失 3. **生产级真实复杂度** - 7 个场景覆盖 90% 的常见生产事件: - 数据库故障(连接耗尽、复制延迟) - 网络分区(脑裂、跨区域) - 资源耗尽(OOM 杀死、CPU 饱和) - 安全事件(横向移动、节点被入侵) - DNS 问题(缓存中毒、解析失败) - 微服务故障(断路器风暴) 4. **密集奖励信号** - 不只是成功/失败的二元判断 - 对中间进展(正确诊断、工具选择)给予奖励 - 支持样本高效学习 5. **企业集成就绪** - 与 Prometheus 兼容的指标导出 - OpenAPI/FastAPI 服务器便于集成 - Docker 容器化以支持云部署 - HF Spaces 部署供社区访问 ### 使用场景 | 使用场景 | ResilienceOps 的帮助 | |----------|----------------------| | **SRE 培训** | 在不影响生产的情况下,让初级工程师在真实场景上训练 | | **AI 研究** | 在运维任务上对 LLM 代理进行基准测试(全新基准) | | **运行手册自动化** | 从代理演示生成最优修复序列 | | **异常检测** | 通过检查代理是否能识别根本原因来验证异常检测 | | **混沌工程** | 在模拟故障上运行代理以测试系统弹性 | ### 行业实践验证 我们的场景反映了以下实践中的事件响应剧本: - **Google SRE 手册**:基于优先级的故障分类(P1/P2/P3) - **Netflix 混沌工程**:级联故障场景 - **AWS 卓越架构**:跨区域网络分区处理 - **Kubernetes 最佳实践**:Pod CrashLoopBackOff 修复 ## 🎮 动作空间 动作由 `ResilienceOpsAction` Pydantic 模型定义: | 字段 | 类型 | 描述 | |-------|------|-------------| | `action_type` | `str` | 之一:`diagnose`, `remediate`, `escalate`, `query_logs`, `check_metrics`, `restart_service`, `rollback`, `scale_up`, `check_connectivity`, `analyze_root_cause` | | `target` | `str` | 要操作的组件(例如 `api-gateway`, `postgres-primary`) | | `tool_used` | `str` | 具体的诊断或修复工具(例如 `top`, `pg_isready`, `kubectl`) | | `parameters` | `Dict[str, str]` | 特定于动作的附加参数 | ### 动作类型说明 - **diagnose**:在服务上运行诊断工具 - **remediate**:应用修复以解决问题 - **escalate**:升级到人工操作员 - **query_logs**:检查日志文件以获取诊断信息 - **check_metrics**:查看性能指标 - **restart_service**:重启故障服务 - **rollback**:回滚到之前的状态 - **scale_up**:增加容量/资源 - **check_connectivity**:验证网络连接 - **analyze_root_cause**:识别事件的根本原因 ## 👁️ 观察空间 观察以 `ResilienceOpsObservation` 对象形式返回: | 字段 | 类型 | 描述 | |-------|------|-------------| | `incident_id` | `str` | 当前事件的唯一标识符 | | `incident_title` | `str` | 描述事件的可读标题 | | `severity` | `str` | 事件优先级:P1(关键)、P2(高)或 P3(低) | | `affected_services` | `List[str]` | 当前受事件影响的服务 | | `alert_signals` | `List[str]` | 活动监控告警(例如 `high_cpu`, `5xx_spike`) | | `log_snippet` | `str` | 用于诊断的相关日志摘录 | | `available_tools` | `List[str]` | 代理可用的工具 | | `steps_remaining` | `int` | 当前事件剩余的步数 | | `step_count` | `int` | 当前步数 | | `previous_action_result` | `str` | 上次操作的结果描述 | | `service_health` | `Dict[str, str]` | 每个服务的健康状态:`healthy` / `degraded` / `down` | | `task_name` | `str` | 当前任务难度:`easy` / `medium` / `hard` | | `root_cause_identified` | `bool` | 代理是否已识别根因 | | `hints` | `List[str]` | 引导代理的上下文提示 | | `done` | `bool` | 事件是否已结束 | | `reward` | `float` | 至今累计获得的奖励 | ## 📝 任务 环境提供 **七个任务**,难度递增,涵盖从简单单服务中断到复杂多系统故障的真实 SRE 场景: ### 原始任务(v2.0) ### 任务 1:简单 — 单服务中断(P3) **场景**:API 网关超时 由于工作线程池耗尽和内存泄漏,API 网关出现超时。仅有一个服务受到影响。 **难度**:简单 **代理目标**: 1. 识别严重性(P3 - 低优先级) 2. 运行正确诊断(使用 `top` 检查 CPU/内存) 3. 应用适当修复(重启服务) **最大步数**:10 **预期代理行为**:快速识别并修复,步数最少。 ### 任务 2:中等 — 级联数据库故障(P2) **场景**:PostgreSQL 连接池耗尽 数据库连接池达到最大容量,导致下游服务(API 网关和 Web 前端)级联故障。 ****:中等 **代理目标**: 1. 优先处理多个相关告警 2. 识别根本原因(数据库,而非症状) 3. 执行正确的修复顺序: - 检查数据库就绪状态(`pg_isready`) - 查询活动连接(`pg_stat_activity`) - 终止空闲连接 - 扩展连接池 **最大步数**:15 **预期代理行为**:避免只处理症状(API 超时),而应聚焦于数据库根本问题。 ### 任务 3:困难 — 多区域网络分区(P1) **场景**:脑裂网络分区 US-East 与 EU-West 区域之间的网络分区导致共享 PostgreSQL 数据库出现脑裂,两个区域都接受写入,存在数据不一致风险。 **难度**:困难 **代理目标**: 1. 关联跨区域告警信号 2. 识别网络分区为根本原因 3. 选择 **安全** 的修复方式(避免数据丢失): - 验证连通性(`traceroute`) - 检查复制状态 - 将 EU 区域设为只读 - 隔离受影响区域的流量 - 重新同步复制 4. 在完成前验证恢复 **最大步数**:20 **预期代理行为**:极度谨慎。破坏性操作(如重启数据库)在脑裂期间将受到严厉惩罚。 ### v3.0 任务 — 高级场景 ### 任务 4:Kubernetes Pod CrashLoopBackOff(P2)——中等+ **场景**:由于 OOM 杀死导致的容器重启循环 一个处理支付的 Worker Pod 因内存耗尽而陷入 CrashLoopBackOff,Pod 反复崩溃重启,导致支付服务级联故障。 **难度**:中等+ **代理目标**: 1. 从 Pod 事件(`kubectl`)中识别 OOM 杀死 2. 检查内存使用趋势(`prometheus`、`docker_stats`) 3. 应用适当修复: - 增加内存限制 - 重启 Pod - 验证支付服务恢复 **最大步数**:15 **关键挑战**:Kubernetes 专属故障排查需要理解容器编排。 ### 任务 5:安全事件 — 横向移动检测(P1)——困难 **场景**:被入侵节点与可疑 SSH 连接 一个跳转主机被入侵,并用于横向移动。检测到内部服务之间存在可疑 SSH 连接,尝试提权和未授权数据访问。 **难度**:困难 **代理目标**: 1. 检测可疑活动(`audit_log`、`last`) 2. 识别被入侵节点(`netstat`、`ss`) 3. 隔离威胁: - 隔离被入侵节点 - 分析审计日志以确定范围 - 撤销活动会话 - 验证未中断合法流量 **最大步数**:18 **关键挑战**:安全事件必须在修复前仔细调查,以避免干扰合法操作。 ### 任务 6:DNS 解析失败链(P3)——简单+ **场景**:DNS 缓存中毒导致间歇性故障 区域 DNS 解析器因缓存中毒而存在陈旧条目,服务出现间歇性解析失败,但未完全中断。 **难度**:简单+ **代理目标**: 1. 诊断 DNS 问题(`dig`、`nslookup`) 2. 识别各区域中的陈旧缓存条目 3. 修复: - 刷新两个解析器的 DNS 缓存 - 跨区域验证解析 - 确认服务恢复 **最大步数**:12 **关键挑战**:间歇性故障需要系统地检查分布式基础设施。 ### 任务 7:级联断路器风暴(P1)——专家 **场景**:多个微服务同时触发断路器 一个缓慢的遗留 API 导致微服务架构中出现断路器级联故障。库存、订单和支付服务均因断路器打开而失败。 **难度**:专家 **代理目标**: 1. 识别瓶颈(`prometheus`、`hystrix_dashboard`) 2. 分析级联模式 3. 协调分阶段恢复: - 对缓慢服务施加背压 - 增加依赖服务的超时 - 按顺序重置断路器 - 扩展瓶颈服务 - 验证系统完全恢复 **最大步数**:25 **关键挑战**:复杂分布式系统需要理解微服务依赖和断路器模式。 ## 🚀 安装与使用说明 ### 先决条件 - Python 3.10+ - Docker(用于部署) - 拥有 API 令牌的 Hugging Face 账户 ### 安装 ``` # 克隆仓库 git clone cd resilience_ops_env # 安装依赖 pip install -r requirements.txt ``` ### 本地开发 ``` # 使用 uv 本地运行服务器 uv run server # 或直接使用 uvicorn 运行 uvicorn server.app:app --reload --host 0.0.0.0 --port 8000 ``` ### 构建并运行 Docker ``` # 构建 Docker 镜像 docker build -t resilience-ops-env:latest . # 运行容器 docker run -p 8000:8000 resilience-ops-env:latest ``` Web 界面将在 `http://localhost:8000/web/` 可用。 ### 部署到 Hugging Face Spaces ``` # 推送到 Hugging Face Spaces openenv push --repo-id your-username/resilience-ops-env ``` 请确保您的 Space 标记为 `openenv` 以便被发现。 ### 使用 Python 客户端 ``` from resilience_ops_env import ResilienceOpsEnv, ResilienceOpsAction # 连接到环境 with ResilienceOpsEnv(base_url="http://localhost:8000") as env: # Start a new episode (easy task) result = env.reset(task="easy") obs = result.observation print(f"Incident: {obs.incident_title}") print(f"Severity: {obs.severity}") print(f"Affected: {obs.affected_services}") # Take an action result = env.step(ResilienceOpsAction( action_type="diagnose", target="api-gateway", tool_used="top", )) print(f"Reward: {result.observation.reward}") print(f"Result: {result.observation.previous_action_result}") ``` ## 📊 基准性能分数 `inference.py` 脚本使用 Hugging Face LLM(默认:Qwen/Qwen2.5-72B-Instruct)提供基准分数。 ### 运行基准评估 ``` # 设置所需的环境变量 export HF_TOKEN="your_huggingface_token" export API_BASE_URL="https://router.huggingface.co/v1" export MODEL_NAME="Qwen/Qwen2.5-72B-Instruct" # 在三个任务上运行推理 python inference.py ``` ### 预期基准分数 基于初步测试,前沿模型的预期分数如下: | 任务 | 难度 | 预期分数范围 | 说明 | |------|------------|----------------|------| | 简单(P3) | 低 | 0.70 - 0.85 | 单服务问题较为直接 | | 中等(P2) | 中等 | 0.50 - 0.70 | 需要区分根因与症状 | | 困难(P1) | 高 | 0.30 - 0.55 | 复杂多区域场景并带有安全约束 | ### 评分标准 最终事件得分(0.0 - 1.0)按以下多标准加权计算: | 组件 | 权重 | 说明 | |-----------|--------|------| | 根因识别 | 25% | 代理是否正确识别根因? | | 正确工具使用 | 20% | 是否选择了合适的诊断工具? | | 修复成功 | 30% | 所有服务是否恢复至健康状态? | | 效率 | 15% | 步数越少得分越高 | | 惩罚 | 可变 | 对破坏性操作和不必要升级进行扣分 | ### 输出格式 推理脚本仅输出以下结构化内容(stdout 中仅出现这些行): ``` [START] task=easy env=resilience_ops_env model=Qwen/Qwen2.5-72B-Instruct [STEP] step=1 action=diagnose(api-gateway, tool=top) reward=0.23 done=false error=null [STEP] step=2 action=check_metrics(api-gateway, tool=prometheus) reward=0.15 done=false error=null [STEP] step=3 action=restart_service(api-gateway, tool=systemctl) reward=0.26 done=true error=null [END] success=true steps=3 score=0.640 rewards=0.23,0.15,0.26 ``` ## 架构 ``` AI Agent / LLM --> inference.py --> LLM Provider (HF / OpenAI) | HTTP / WebSocket | server/app.py | ResilienceOpsEnvironment | +-----------+-----------+ v v v compute_reward grade_episode _build_observation (step R) (final 0-1) (dynamic alerts) ``` **数据流**: 1. 代理接收观察(事件详情、告警、服务健康状态) 2. 代理生成 JSON 动作(action_type、target、tool_used) 3. 环境处理动作,计算奖励并更新状态 4. 环境返回新观察及奖励信号 5. 事件在所有服务健康或达到最大步数时结束 6. 通过多标准加权公式计算最终评分 ## 项目结构 ``` resilience_ops_env/ |-- Dockerfile # Multi-stage production Docker config |-- README.md # This file |-- LICENSE # BSD 3-Clause License |-- openenv.yaml # OpenEnv manifest |-- pyproject.toml # Python project configuration |-- requirements.txt # Pinned dependencies |-- models.py # Core: types, tasks, reward, grader, v3.0 features |-- client.py # WebSocket environment client |-- inference.py # Baseline LLM inference script |-- server/ | |-- __init__.py | |-- app.py # FastAPI application | +-- resilience_ops_env_environment.py ``` ## v3.0 高级特性 ResilienceOps 包含扩展基础环境的高级特性: - **动态任务生成**:随机化告警噪声、日志损坏和健康波动以提升评分多样性 - **多代理协同响应**:多个代理共享事件状态进行协作研究 - **与 Prometheus 兼容的指标**:以 Prometheus 格式导出代理行为指标 - **LLM-as-Judge 评分**:结合基于规则的评分与 LLM 推理评估 - **TRL/GRPO 训练集成**:奖励模型兼容 TRL 的 GRPOTrainer ``` from resilience_ops_env import ResilienceOpsGRPORewardModel, ResilienceOpsEnvironment env = ResilienceOpsEnvironment(task_name="medium") reward_model = ResilienceOpsGRPORewardModel(env) rewards = reward_model.compute_rewards(prompts, completions) ``` ## 测试与验证 ``` # 运行 33 个单元测试 python -m pytest tests/ -v # 运行提交前验证(13 项检查) python validate.py # 运行 OpenEnv 验证 openenv validate ``` ## 许可证 版权所有 (c) Meta Platforms, Inc. 及其关联公司。保留所有权利。 根据 BSD 3-Clause 许可证授权。详见 [LICENSE](LICENSE)。 ```
标签:AI代理, IaC 扫描, IT运维, MTTR优化, OpenEnv, Socks5代理, SRE, 企业级IT, 修复操作, 偏差过滤, 告警处理, 基础设施仿真, 安全约束, 强化学习, 持续可用性, 根因分析, 模拟环境, 渐进式难度, 站点可靠性工程, 自动化排障, 自定义请求头, 请求拦截, 逆向工具