# AlertFlow-轻量级智能告警与工单协同平台 **Repository Path**: akatini/AlertFlow ## Basic Information - **Project Name**: AlertFlow-轻量级智能告警与工单协同平台 - **Description**: 基于 Spring Boot + MyBatis-Plus + Vue 3 的告警与工单协同平台,提供告警规则管理、Redis 去重、RabbitMQ 异步处理、自动建单、工单协同、站内通知与 Dashboard 统计。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-06-10 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README # AlertFlow v1.0.0 > 面向中小团队的轻量级智能告警与工单协同平台。 > 覆盖“指标事件接入 → 告警生成 → 工单处理 → 通知协同 → 数据统计”的完整闭环。 AlertFlow 用于接收外部监控系统、业务系统或 Agent 上报的指标事件,结合告警规则、Redis 去重、RabbitMQ 异步处理、工单协同与站内通知,帮助团队更高效地处理告警问题。 --- ## 核心能力 * **告警规则配置**:支持按服务、指标、比较符和阈值定义告警规则。 * **外部事件接入**:支持后台接口接入和 Open API 安全接入。 * **Redis 去重**:在冷却窗口内合并重复告警,避免告警风暴。 * **RabbitMQ 异步处理**:将事件接入与规则匹配、告警生成解耦。 * **自动建单**:规则开启 `autoCreateTicket` 后,新告警可自动生成工单。 * **工单协同**:支持创建、分配、处理、解决、关闭、取消、评论和操作日志。 * **站内通知**:自动建单、工单分配、状态变更时通知相关用户。 * **Dashboard 统计**:展示告警与工单的统计概览、状态分布和最近记录。 * **Open API 接入**:外部系统通过 Access Key + HMAC-SHA256 安全上报事件。 --- ## 核心业务链路 ```text 外部监控系统 / Agent / 业务系统 │ ▼ Open API(Access Key + HMAC 签名) │ ▼ 告警事件接入 ──→ RabbitMQ 异步处理 │ ▼ 规则匹配 ──→ Redis 去重与冷却窗口 │ ▼ 生成告警记录 ───────────────→ Dashboard 数据聚合 │ ▼ 自动建单 / 手动建单 │ ▼ 工单分配、处理、解决、关闭 │ ▼ 站内通知、评论、操作日志 ``` > Redis 去重命中后不会重复创建告警记录,而是更新已有记录的触发次数和最后触发时间;因此也不会重复自动建单。 --- ## 项目结构 | 模块 | 职责 | | ------------------------ | --------------------------------------------- | | `alertflow-common` | 通用基础模块:统一响应 `Result`、业务异常、基础实体、常量等 | | `alertflow-security` | 安全模块:Spring Security、JWT、RBAC、Open API 认证 SPI | | `alertflow-system` | 系统管理:登录认证、用户管理、角色管理、用户角色分配 | | `alertflow-alert` | 告警业务:规则管理、事件接入、规则匹配、Redis 去重、RabbitMQ 消费、告警记录 | | `alertflow-ticket` | 工单协同:工单创建、分配、状态流转、评论、操作日志、自动建单 | | `alertflow-notification` | 站内通知:通知创建、查询、已读标记、未读数统计 | | `alertflow-dashboard` | 首页统计:告警统计、工单统计、最近告警、最近工单 | | `alertflow-integration` | 外部接入:接入客户端管理、HMAC 验签、防重放、外部事件幂等 | | `alertflow-admin` | Spring Boot 启动模块:全局配置、异常处理、Knife4j 配置 | | `alertflow-ui` | Vue 3 前端管理后台:Dashboard、告警、工单、通知、接入客户端管理 | --- ## 功能清单 ### 系统管理 * JWT 登录认证 * 用户管理 * 角色管理 * 用户角色分配 * 基于角色的 RBAC 权限控制 ### 告警管理 * 告警规则 CRUD * 规则启用、禁用与匹配测试 * 告警事件接入 * 告警记录查询、确认、关闭 * Redis 去重与冷却窗口 * RabbitMQ 异步处理 * 外部事件幂等处理 ### 工单协同 * 手动创建工单 * 从告警记录创建工单 * 告警规则自动建单 * 工单分配处理人 * 工单状态流转 ```text 待处理 → 处理中 → 已解决 → 已关闭 待处理 / 处理中 → 已取消 ``` * 工单评论 * 工单操作日志 ### 通知中心 * 自动建单通知 * 工单分配通知 * 工单状态变更通知 * 未读通知数量统计 * 单条或全部标记已读 * 从通知跳转至对应工单详情 ### Open API 集成 * 接入客户端创建、编辑、启用、禁用、密钥轮换 * Access Key + HMAC-SHA256 签名认证 * AES-256-GCM 加密保存 Secret * Timestamp 时间窗口校验 * Redis Nonce 防重放 * `externalEventId` 业务幂等 * 外部事件接收接口: ```text POST /api/open/v1/alert-events ``` --- ## 前端页面 | 页面 | 路由 | 说明 | | --------- | ---------------------- | ----------------- | | 登录页 | `/login` | 用户名密码登录 | | Dashboard | `/dashboard` | 告警、工单统计与最近记录 | | 用户管理 | `/system/users` | 用户 CRUD、分配角色 | | 角色管理 | `/system/roles` | 角色 CRUD | | 告警规则 | `/alert/rules` | 规则 CRUD、启停、匹配测试 | | 告警事件 | `/alert/events` | 事件列表与详情 | | 告警记录 | `/alert/records` | 记录查询、确认、关闭、创建工单 | | 工单管理 | `/tickets/work-orders` | 创建、分配、处理、详情、评论、日志 | | 接入客户端 | `/integration/clients` | 创建、启停、编辑、密钥轮换 | | 通知中心 | `/notifications` | 通知查询、已读标记、跳转工单 | --- ## 技术栈 ### 后端 | 技术 | 版本 | 说明 | | ---------------- | ------: | -------------------------- | | Java | 17 | 开发语言 | | Spring Boot | 3.3.7 | 基础框架 | | Spring Security | 6.3.6 | 认证与授权 | | MyBatis-Plus | 3.5.9 | 数据访问层 | | MySQL | 8.x | 关系型数据库 | | MySQL Connector/J | 8.3.0 | MySQL JDBC 驱动 | | Redis | 7 | 去重、防重放、缓存 | | RabbitMQ | 3.12 | 异步事件处理 | | Lombok | 1.18.36 | 简化代码(日志、数据类、元注解) | | JJWT | 0.13.0 | JWT 支持 | | Knife4j | 4.5.0 | API 文档 | | Maven | 3.9 | 项目构建与依赖管理 | ### 前端 | 技术 | 版本 | 说明 | | ------------ | -----: | ------- | | Vue | 3.5.34 | 前端框架 | | Vite | 8.0.12 | 构建工具 | | TypeScript | 6.0.2 | 类型支持 | | Element Plus | 2.14.2 | UI 组件库 | | Pinia | 3.0.4 | 状态管理 | | Vue Router | 5.1.0 | 路由管理 | | Axios | 1.18.0 | HTTP 请求 | | ECharts | 6.1.0 | 数据可视化 | --- ## 快速启动 ### 1. 启动基础设施 推荐使用 Docker Compose 启动 MySQL、Redis 和 RabbitMQ。 首次启动时,MySQL 会自动执行 `docs/sql/init.sql` 初始化数据库。 ```bash docker compose up -d docker compose ps ``` 需要重新初始化数据库时: ```bash docker compose down -v docker compose up -d ``` 如果你使用的是旧版 Docker Compose,也可以使用: ```bash docker-compose up -d ``` ### 2. 配置 Open API 主密钥 v1.0.0 默认开启 Open API,需要配置主密钥。 ```bash openssl rand -base64 32 ``` 将生成结果保存为环境变量: ```bash export ALERTFLOW_INTEGRATION_MASTER_KEY='你的 Base64 主密钥' ``` > 已创建接入客户端后,不要随意更换该主密钥;否则数据库中已加密保存的客户端 Secret 将无法解密。 ### 3. 启动后端 ```bash mvn clean test mvn -pl alertflow-admin -am spring-boot:run ``` ### 4. 启动前端 ```bash cd alertflow-ui npm install npm run dev ``` ### 5. 访问地址 | 服务 | 地址 | | -------------- | ------------------------------ | | 前端管理后台 | http://localhost:5173 | | Knife4j API 文档 | http://localhost:8080/doc.html | | RabbitMQ 管理后台 | http://localhost:15672 | --- ## 演示账号 | 用户名 | 密码 | 角色 | 说明 | | ---------- | -------- | ----- | -------- | | `admin` | `123456` | 系统管理员 | 拥有全部管理权限 | | `operator` | `123456` | 运维人员 | 可处理告警与工单 | | `viewer` | `123456` | 只读用户 | 仅查看业务数据 | --- ## 推荐演示流程 ### 场景一:告警规则与自动建单 1. 使用 `admin / 123456` 登录。 2. 进入「告警规则管理」,创建或启用一条规则。 3. 设置规则示例: ```text 服务名称:demo-service 指标名称:cpu_usage 比较符:GE 阈值:80 告警等级:P2 自动建单:开启 ``` 4. 进入「接入客户端」,创建一个外部接入客户端。 5. 保存创建时返回的 Access Key 和 Secret。 6. 按照 [Open API 接入文档](docs/open-api.md) 中的 Python 示例发送签名请求。 7. 进入「告警事件」和「告警记录」查看处理结果。 8. 进入「工单管理」查看自动创建的工单。 9. 进入「通知中心」查看自动建单通知。 ### 场景二:工单协同 1. 使用 `admin` 将工单分配给 `operator`。 2. 退出并使用 `operator / 123456` 登录。 3. 在「工单管理」中执行: ```text 开始处理 → 标记解决 ``` 4. 切换回 `admin`,查看工单状态变更通知。 5. 由 `admin` 或符合权限的用户关闭工单。 6. 在 Dashboard 查看告警和工单统计变化。 ### 场景三:Open API 幂等与防重放 1. 使用相同 `externalEventId`、不同 `nonce` 重复请求。 2. 系统返回已有事件信息,不会重复投递或重复创建工单。 3. 使用相同 `nonce` 重放请求。 4. 系统拒绝请求,防止重放攻击。 --- ## 项目文档 | 文档 | 说明 | | ----------------------------------- | -------------------------------- | | [系统架构设计](docs/architecture.md) | 模块依赖、自动建单、Redis 去重、RabbitMQ 使用说明 | | [部署文档](docs/deployment.md) | 本地运行、Docker Compose、常见问题 | | [演示指南](docs/demo-guide.md) | 项目演示步骤与预期结果 | | [API 概览](docs/api-overview.md) | 核心接口与权限说明 | | [Open API 接入指南](docs/open-api.md) | HMAC 签名、Nonce 防重放、幂等调用示例 | | [事件接入指南](docs/event-integration.md) | 告警事件数据格式与接入说明 | | [最终验收清单](docs/final-checklist.md) | 发布前检查项 | --- ## 版权声明 本项目仅用于学习、交流与作品展示。