rajasurya-rjs/incident-response-openenv

GitHub: rajasurya-rjs/incident-response-openenv

一个用于训练AI代理进行SRE事件响应的模拟环境,提供微服务故障诊断与修复的强化学习训练场景和基准测试能力。

Stars: 0 | Forks: 0

title: 事件响应环境 emoji: 🚨 colorFrom: red colorTo: yellow sdk: docker app_port: 7860 tags: - openenv # 事件响应 / 值班排查环境 一个模拟**真实世界 SRE 事件响应**的 OpenEnv 环境。AI 代理接收跨 6 个服务的微服务架构的基础设施告警,通过检查指标和阅读日志进行调查,诊断根本原因,并采取正确的修复措施。 ## 为什么需要这个环境? 每家科技公司都有值班工程师,他们会在凌晨 3 点收到故障报警。他们必须迅速: 1. **调查** — 检查指标,阅读多个服务的日志 2. **诊断** — 识别根本原因(可能与告警服务不同) 3. **修复** — 重启服务,回滚部署,扩容或清理磁盘 这是一个真正未解决的问题 —— 现有的 RL 环境都没有针对事件响应训练代理。这个环境通过现实场景、级联故障、误导信息和确定性评分填补了这一空白。 ## 动作空间 ``` class IncidentResponseAction(Action): command: str # What to do (see below) target: str # Which service to act on parameters: dict # Extra params (e.g., explanation for diagnose) ``` ### 可用命令 | 命令 | 类型 | 描述 | |---------|------|-------------| | `check_metrics` | 调查 | 查看服务的 CPU、内存、磁盘、错误率、延迟 | | `read_logs` | 调查 | 阅读近期的应用和系统日志 | | `check_status` | 调查 | 检查健康状态、运行时间、部署历史 | | `restart_service` | 修复 | 重启服务 | | `scale_service` | 修复 | 扩容服务副本 | | `rollback_deploy` | 修复 | 回滚到上一个部署版本 | | `clear_disk` | 修复 | 清理磁盘空间(WAL 段文件、临时文件) | | `diagnose` | 分析 | 提交根本原因分析(自由文本解释) | | `escalate` | 升级 | 升级给高级工程师(部分得分) | ### 可用服务 | 服务 | 角色 | |---------|------| | `api-gateway` | 路由传入的 HTTP 流量 | | `user-service` | 处理身份验证和用户配置 | | `order-service` | 处理订单和支付 | | `postgres-primary` | 主 PostgreSQL 数据库 | | `redis-cache` | 缓存层(会话、配置) | | `kafka-broker` | 用于异步处理的消息队列 | ## 观察空间 ``` class IncidentResponseObservation(Observation): alert_summary: str # Current alert text command_output: str # Result of the last command available_commands: List[str] # Valid commands available_services: List[str] # Valid service targets services_investigated: List[str]# Services already checked actions_taken: List[str] # Action history time_elapsed_minutes: int # Simulated time since alert severity: str # info/warning/critical/resolved # Inherited: done, reward ``` ## 任务 ### 任务 1: `disk_full` (简单) **告警**: postgres-primary 上的磁盘使用率达到 97% **根本原因**: WAL 段文件未归档,临时表膨胀 **预期**: 在 postgres 上检查指标/日志,然后清理磁盘。约 3 步。 ### 任务 2: `bad_deploy` (中等) **告警**: api-gateway 上的错误率达到 8% **根本原因**: order-service 上的错误部署导致级联 502 错误 **预期**: 从 api-gateway → order-service 追踪错误,然后回滚。约 5 步。 **挑战**: postgres-primary 看起来有问题(连接数过多),但这只是症状。 ### 任务 3: `memory_and_cache` (困难) **告警**: api-gateway 上的 p99 延迟达到 2300ms **根本原因**: 两个并发问题 —— user-service 内存泄漏 以及 redis-cache 提供陈旧数据(TTL 被禁用,99.5% 命中率具有误导性) **预期**: 找出两个根本原因,重启两个服务。约 8 步。 **挑战**: Redis 看起来健康(高命中率)但数据已陈旧 72 小时以上。代理必须推理“99.5% 命中率 + 无 TTL”的实际含义。 ### 任务 4: `kafka_lag` (中偏难) **告警**: kafka-broker 上的消费者延迟达到 10 万条消息 **根本原因**: 维护期间消费者被缩容,未恢复。流量激增 3 倍。 **预期**: 识别扩容问题,扩容 order-service。约 5 步。 ## 评分 每个任务使用确定性加权综合评分,范围 0.0 到 1.0: | 组件 | 权重 | 衡量内容 | |-----------|--------|-----------------| | 调查 | 30% | 代理是否检查了正确的服务? | | 诊断 | 25% | 代理是否识别了根本原因?(关键词匹配) | | 修复 | 30% | 代理是否采取了正确的修复措施? | | 效率 | 15% | 采取的步骤与最优步骤对比(越少越好) | ### 奖励塑形(每步) - 调查相关服务:**+0.05** - 执行关键检查:**+0.10** - 正确的诊断关键词:**+0.20**(按比例) - 正确的修复措施:**+0.25** - 错误的修复措施:**-0.10** - 每步时间成本:**-0.005** ## 设置与使用 ### 快速开始(远程) ``` from incident_response_env import IncidentResponseEnv, IncidentResponseAction with IncidentResponseEnv(base_url="https://.hf.space").sync() as env: result = env.reset(task_id="disk_full") print(result.observation.alert_summary) result = env.step(IncidentResponseAction( command="check_metrics", target="postgres-primary", )) print(result.observation.command_output) ``` ### 本地开发 ``` # 克隆并安装 git clone cd incident_response_env pip install -e . # 运行 server uvicorn incident_response_env.server.app:app --host 0.0.0.0 --port 8000 # 或使用 entry point python -m incident_response_env.server.app ``` ### Docker ``` docker build -t incident-response-env . docker run -d -p 8000:8000 incident-response-env # 验证 curl http://localhost:8000/health ``` ### 推理(基线) ``` # 先启动 server,然后: API_BASE_URL=https://router.huggingface.co/v1 \ MODEL_NAME=meta-llama/Llama-3.1-8B-Instruct \ HF_TOKEN=hf_... \ python inference.py # 必需的 environment variables: # API_BASE_URL LLM 的 API endpoint # MODEL_NAME 用于 inference 的 model identifier # HF_TOKEN 你的 Hugging Face / API key ``` ## 基线分数 近似分数(temperature=0): | 任务 | 难度 | 分数 | |------|-----------|-------| | `disk_full` | 简单 | ~0.75 | | `bad_deploy` | 中等 | ~0.85 | | `memory_and_cache` | 困难 | ~0.60 | | `kafka_lag` | 中偏难 | ~0.80 | | **平均** | | **~0.75** | *分数为近似值,不同运行之间可能略有差异。* ## API 端点 | 端点 | 方法 | 描述 | |----------|--------|-------------| | `/health` | GET | 健康检查 | | `/metadata` | GET | 环境元数据 | | `/schema` | GET | 动作/观察/状态模式 | | `/reset` | POST | 重置环境(接受 `task_id`) | | `/step` | POST | 执行动作 | | `/state` | GET | 获取当前回合状态 | | `/ws` | WebSocket | 持久会话端点 | | `/docs` | GET | 交互式 API 文档 |
标签:AIOps, AI智能体, Docker, On-Call轮值, OpenEnv, SRE, 偏差过滤, 安全防御评估, 弹性伸缩, 强化学习环境, 微服务架构, 指标监控, 故障演练, 故障诊断, 根因分析, 模块化设计, 生产事故, 站点可靠性工程, 系统恢复, 自动化修复, 请求拦截, 运维培训, 逆向工具