ArjunRai1/IncidentOps

GitHub: ArjunRai1/IncidentOps

基于 Spring Boot 和 React 构建的全栈事件管理系统,结合 RAG 实现 AI 驱动的事件摘要、根因分析和语义搜索。

Stars: 1 | Forks: 0

# IncidentOps ![Java](https://img.shields.io/badge/Java-21-orange) ![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.x-green) ![React](https://img.shields.io/badge/React-19-blue) ![Docker](https://img.shields.io/badge/Docker-Containerized-blue) ![AWS EC2](https://img.shields.io/badge/Deployed-AWS_EC2-orange) ![License](https://img.shields.io/badge/License-MIT-lightgrey) ## IncidentOps 是一个使用 Spring Boot 和 React 构建的、生产就绪的全栈事件管理平台。它提供安全的身份验证、完整的事件生命周期管理、通过评论和时间线的协作,以及使用检索增强生成 (RAG) 的 AI 驱动的事件分析。该应用程序已完全容器化并部署在 AWS 上,展示了面向生产的架构。 # 技术栈 ## 后端 - Java 21 - Spring Boot - Spring Security - JWT 身份验证 - Spring Data JPA - Spring AI - Flyway - Docker ## 前端 - React - Vite - React Router - Axios - Tailwind CSS - Context API ## 数据库 - PostgreSQL - Redis - PgVector ## AI - Spring AI - Gemini - RAG ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/68/68d8587cdf48a5909da9212646eaa8406025bc9b913815d958c63609e24f13d1.png) ## 亮点 - 基于 OTP 邮件验证的 JWT 身份验证 - 基于角色的访问控制 (RBAC) - 事件生命周期管理 - AI 驱动的事件摘要与根因分析 - 使用 RAG 的语义搜索 - 使用 Docker Compose 的 Docker 化部署 - 在 AWS EC2 上的生产部署 - 使用 RAG 的 AI 驱动事件分析 # 已实现的功能 ## 身份验证 ### 用户注册 新用户使用其邮箱和密码进行注册。 流程: 1. 用户输入注册详情。 2. 后端验证请求。 3. 用户信息被临时存储。 4. 生成 OTP。 5. OTP 带有有效期存储在 Redis 中。 6. OTP 通过邮件发送给用户。 7. 前端重定向到验证页面。 ![注册](https://static.pigsec.cn/wp-content/uploads/repos/cas/09/09ae595a7b216ed0082217488b83aef8f9a824a6ffe1d6d4a18b759883661c14.png) ### 邮箱验证 流程: 1. 用户输入 OTP。 2. 后端针对 Redis 验证 OTP。 3. 如果有效: - 在 PostgreSQL 中创建用户。 - 移除 Redis 中的记录。 4. 用户被重定向到登录页面。 ![验证](https://static.pigsec.cn/wp-content/uploads/repos/cas/54/54d3cabf66dba6f21793c44535ac51ed70cc04bfe9a31f9665e532b6ed5f465e.png) ### 登录 流程: 1. 用户输入邮箱和密码。 2. 验证凭据。 3. 生成 JWT token。 4. Token 返回给前端。 5. 前端存储该 token。 6. 随后的每个 API 请求都会自动包含此 JWT。 ![登录](https://static.pigsec.cn/wp-content/uploads/repos/cas/83/83271198501dd2e501773bdbda4bb1ccf764eb8ce1be92844d48175bc55be2c8.png) ### 受保护的路由 已认证的用户可以访问: - 仪表板 - 事件 - 个人资料 未认证的用户将被重定向到登录页面。 ### 忘记密码 流程: 1. 用户输入已注册的邮箱。 2. 后端生成密码重置 OTP。 3. OTP 存储在 Redis 中。 4. OTP 通过邮件发送。 5. 前端重定向到重置密码页面。 ### 重置密码 流程: 1. 用户输入: - OTP - 新密码 2. 后端验证 OTP。 3. 更新密码。 4. 删除 Redis 中的记录。 5. 用户被重定向到登录页面。 # 事件管理 ## 事件列表 已实现: - 列出事件 - 服务端分页 - 服务端搜索 - 状态过滤 - 优先级过滤 - 排序 - 加载状态 - 空状态 - 错误处理 ## 所有的过滤和排序均由后端执行。 ![事件列表](https://static.pigsec.cn/wp-content/uploads/repos/cas/b8/b8c49bb1f3bbb318229fdf616b0baa122df5ff99e45ea1088184bcffc0ba512e.png) ## 创建事件 用户可以创建新的事件。 捕获的信息: - 标题 - 描述 - 优先级 - 处理人(如果有) 状态由后端自动初始化为 **OPEN**。 ![创建事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0c27f753d6687a148c386f2343b0666f2deff6932e7bd45b92072ce3b7f921c3.png) ## 查看事件 显示完整的事件信息,包括: - 标题 - 描述 - 状态 - 优先级 - 创建者 - 处理人 - 创建时间戳 - 更新时间戳 ![事件详情](https://static.pigsec.cn/wp-content/uploads/repos/cas/69/69e0ec1106cbee97edae6c59459dfca456561a276cec93e399dd60072a95508f.png) ## 更新事件 用户可以更新事件详情。 可编辑字段: - 标题 - 描述 - 优先级 - 状态 - 处理人 仅在编辑状态下可用保存操作。 ## 评论 已实现: - 查看评论 - 添加新评论 评论按时间顺序显示,包含: - 作者 - 时间戳 - 评论内容 评论无法被编辑。 ## 时间线 显示事件历史。 每个事件包含: - 事件类型 - 描述 - 时间戳 时间线是只读的。 ![评论/时间线](https://static.pigsec.cn/wp-content/uploads/repos/cas/dc/dc06357406c5eb1722e708ad69508f580372b72ee521dd88e6b540ee2e1a3761.png) # 个人资料 已实现: 显示已认证用户的: - 用户 ID - 邮箱 - 角色 ![个人资料](https://static.pigsec.cn/wp-content/uploads/repos/cas/62/620a4d67c0682286b4e1842b044233730ed4635c601e413162730331518a6577.png) 信息从以下位置获取: ``` GET /api/v1/auth/me ``` # 更新个人资料: 已实现 - 用户能够更新邮箱地址,OTP 将发送到新邮箱进行验证。 - 用户能够通过已注册邮箱完成的 OTP 验证来更新密码。 ![更新个人资料](https://static.pigsec.cn/wp-content/uploads/repos/cas/5b/5b71f8585ebf6390b5d24a11110a9ecdbd33ca231635aef1904885d344032bfc.png) # 前端架构 ## API 层 专门的 API 模块: - authApi - incidentApi - commentApi - timelineApi - profileApi - aiApi ## 身份验证 使用 React Context 实现。 职责: - 登录 - 登出 - 身份验证状态 - 当前用户 - 路由保护 ## 路由 公开路由 - 登录 - 注册 - 验证 OTP - 忘记密码 - 重置密码 受保护的路由 - 仪表板 - 事件 - 个人资料 ## 可复用组件 已实现的可复用组件: - Button - Card - Loader - EmptyState - Retrieval Pipeline # 后端基础设施 已实现 - PostgreSQL 持久化 - PgVector - Flyway 迁移 - Redis - JWT 身份验证 - Spring Security - Spring AI - Ollama - Docker Compose Redis 目前用于: - 注册 OTP - 密码重置 OTP # 部署 IncidentOps 在 AWS 上使用容器化架构进行部署。 ## 基础设施 - 后端部署在 AWS EC2 上 - PostgreSQL 在 Docker 内运行 - Redis 在 Docker 内运行 - Ollama 在 EC2 实例本地运行以进行 AI 推理 ## 部署工作流 1. 代码被推送到 GitHub。 2. 在 EC2 实例上构建 Docker 镜像。 3. Docker Compose 启动所有必需的服务。 4. AI 请求通过本地 Ollama 服务进行处理。 # 当前应用程序流程 ``` Register │ ▼ Email OTP Verification │ ▼ Login │ ▼ JWT Authentication │ ▼ Dashboard │ ├──────────────► Profile │ │ │ ├── Change Email │ └── Change Password │ └──────────────► Incidents │ ├── Create ├── Search ├── Filter ├── Update ├── Comments ├── Timeline ├── AI Summary ├── Similar Incidents └── AI Chat ``` # AI 模块 IncidentOps 现在包含一个使用 Spring AI、Ollama 和 PgVector 构建的检索增强生成 (RAG) pipeline。 ## AI 对话 功能: - 自然语言对话界面 - 检索增强生成 (RAG) - 对已索引事件进行语义搜索 - 使用检索到的事件提供结合上下文的响应 - 针对未知查询的幻觉防护机制 流程: 1. 用户提交问题。 2. 使用向量相似性搜索从 PgVector 中检索相关的事件文档。 3. 使用检索到的文档构建基础 prompt。 4. 将 prompt 发送给 LLM。 5. AI 仅使用检索到的上下文生成响应。 ![AI 对话](https://static.pigsec.cn/wp-content/uploads/repos/cas/f2/f2536a502104eafdaebc321704e6b9ec429ed8af367f0cc704e4047b9edf1bc6.png) ## 自动事件索引 每个新创建的事件都会被自动索引。 流程: 1. 将事件转换为结构化的 AI 文档。 2. 将元数据附加到文档中。 3. 将文档拆分为 chunks。 4. 使用 Ollama 生成 embeddings。 5. 将 chunks 和 embeddings 存储在 PgVector 中。 这使得向量数据库与事件数据库保持同步。 ## 相似事件检索 已实现: - 语义相似性搜索 - 使用 PgVector 进行向量搜索 - 检索相关的历史事件 相似的事件是基于语义含义检索的,而不是通过匹配关键字。 ![相似事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/fa/fa86566f91d957df34f2c77caf45e1242b3f1d08b50196cac31ef893f16890c0.png) ## AI 事件摘要 已实现: - AI 生成的事件摘要 - 利用相似事件进行结合上下文的摘要 - 仅使用检索到的文档生成有依据的响应 生成的摘要包括: - 发生了什么 - 受影响的组件 - 可能的影响 模型不会凭空捏造检索上下文之外的信息。 ![AI 摘要](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/9778d2d346ee2d5694bb76fd2991213af54463302e17f3c5d525a1736d553f35.png) ## AI 根因分析与解决建议 已实现: - AI 生成的根因分析 - 利用相似的历史事件进行结合上下文的分析 - 基于检索到的事件提供可操作的解决建议 - 仅使用检索到的文档生成有依据的响应 生成的分析包括: - 可能的根本原因 - 来自相似事件的支持性证据 - 建议的解决步骤 - 预防性建议(如适用) 模型不会凭空捏造检索上下文之外的原因或建议。 ![RCA](https://raw.githubusercontent.com/ArjunRai1/IncidentOps/main/assets/rca.png) ![RCA2](https://static.pigsec.cn/wp-content/uploads/repos/cas/fb/fb00416cffe6ca9fb081af272a80b41e884c5d1dfb43322589f321ab6ebe333d.png) # 项目状态 | 模块 | 状态 | |-----------------------------|--------| | 身份验证 | ✅ 完成 | | 注册 OTP | ✅ 完成 | | 密码重置 | ✅ 完成 | | JWT 身份验证 | ✅ 完成 | | 个人资料 | ✅ 完成 | | 事件 CRUD | ✅ 完成 | | 评论 | ✅ 完成 | | 时间线 | ✅ 完成 | | 搜索 | ✅ 完成 | | 过滤器 | ✅ 完成 | | 排序 | ✅ 完成 | | 分页 | ✅ 完成 | | AI 对话 (RAG) | ✅ 完成 | | 自动事件索引 | ✅ 完成 | | 语义搜索 | ✅ 完成 | | 相似事件检索 | ✅ 完成 | | AI 事件摘要 | ✅ 完成 | | 根因分析 | ✅ 完成 | | 解决建议 | ✅ 完成 | | 最终 UI 优化 | ✅ 完成 | | Docker 化 | ✅ 完成 | | 部署 (AWS EC2) | ✅ 完成 |
标签:AI风险缓解, DevOps运维, React, Spring Boot, Syscalls, 事件管理系统, 全栈应用, 搜索引擎查询, 检索增强生成 (RAG), 测试用例, 自定义脚本, 请求拦截