数据库设计完善1版,后端项目初始化

pull/37/head
echo 5 months ago
parent e5c344c844
commit 7e1afff64c

@ -4,7 +4,8 @@
### 1.1 设计目标
本ER图设计旨在为故障检测系统提供完整的数据模型支持
- Hadoop集群故障检测与自动修复
- 多集群管理与故障检测
- 用户与集群的权限分离
- 日志收集、存储和分析
- 用户权限管理和操作审计
- 系统配置和告警规则管理
@ -22,171 +23,158 @@
**实体说明**: 系统检测到的故障信息
**主要属性**:
- fault_id (故障标识) - 主标识符
- cluster_id (集群ID) - 外键
- fault_type (故障类型)
- fault_level (故障级别)
- title (故障标题)
- description (故障描述)
- status (处理状态)
- created_at (创建时间)
- resolved_at (解决时间)
**业务规则**:
- 每个故障必须有唯一的fault_id
- 故障级别分为: low, medium, high, critical
- 状态流转: detected → analyzing → repairing → resolved/failed
- 故障必须关联到一个集群
#### 实体2: 执行日志 (ExecutionLog)
**实体说明**: 自动修复脚本的执行记录
**主要属性**:
- exec_id (执行标识) - 主标识符
- command_type (命令类型)
- command_content (命令内容)
- execution_status (执行状态)
- start_time (开始时间)
- end_time (结束时间)
- exit_code (退出码)
**业务规则**:
- 每次执行必须关联一个故障记录
- 执行状态: pending → running → success/failed/timeout
- 高风险操作需要人工确认
#### 实体3: 集群状态 (ClusterStatus)
**实体说明**: Hadoop集群节点的状态信息
**实体说明**: 集群节点的状态信息
**主要属性**:
- node_id (节点标识) - 主标识符
- cluster_id (集群ID) - 外键
- node_name (节点名称)
- ip_address (IP地址)
- node_role (节点角色)
- node_status (节点状态)
- cpu_usage (CPU使用率)
- memory_usage (内存使用率)
- disk_usage (磁盘使用率)
- health_score (健康评分)
- last_heartbeat (最后心跳)
**业务规则**:
- 节点角色: NameNode, DataNode, ResourceManager, NodeManager
- 节点状态: online, offline, maintenance, unknown
- 健康评分范围: 0-100
- 每个节点状态记录必须关联到一个集群
#### 实体4: 系统日志 (SystemLog)
**实体说明**: 从Flume采集的原始日志数据
**主要属性**:
- log_id (日志标识) - 主标识符
- cluster_id (集群ID) - 外键
- fault_id (关联故障ID)
- timestamp (时间戳)
- host (主机名)
- service (服务名)
- log_level (日志级别)
- message (日志消息)
- processed (是否已处理)
**业务规则**:
- 日志级别: DEBUG, INFO, WARN, ERROR, FATAL
- 支持结构化和非结构化日志
- 日志保留期限: 90天
- 日志可以关联到特定集群和故障
### 2.2 配置管理实体
### 2.2 配置管理与用户实体
#### 实体5: 应用配置 (AppConfiguration)
**实体说明**: 存储系统各类配置信息
#### 实体5: 集群 (Cluster)
**实体说明**: 用户管理的集群信息
**主要属性**:
- config_type (配置类型) - 组合主标识符
- config_key (配置键) - 组合主标识符
- config_value (配置值)
- is_active (是否启用)
- cluster_id (集群ID) - 主标识符
- cluster_name (集群名称)
- cluster_type (集群类型)
- description (描述)
**业务规则**:
- config_type和config_key的组合必须唯一
- 配置类型: system, alert, notification
- 支持配置的热更新
### 2.3 用户管理实体
- 集群名称必须唯一
#### 实体6: 用户 (User)
**实体说明**: 系统用户信息
**主要属性**:
- username (用户名) - 主标识符
- user_id (用户ID) - 主标识符
- username (用户名)
- email (邮箱)
- password_hash (密码哈希)
- full_name (姓名)
- role (角色)
- department (部门)
- is_active (是否激活)
- last_login (最后登录)
- role (全局角色)
**业务规则**:
- 用户名和邮箱必须唯一
- 角色类型: admin, operator, viewer
- 密码必须加密存储
- 全局角色分为: admin, operator, viewer
#### 实体7: 用户集群映射 (UserClusterMapping)
**实体说明**: 用户和集群的多对多关系及角色定义
**主要属性**:
- user_id (用户ID) - 组合主标识符, 外键
- cluster_id (集群ID) - 组合主标识符, 外键
- role (集群角色)
**业务规则**:
- 定义用户在特定集群中的角色 (admin, operator, viewer)
#### 实体7: 操作审计 (AuditLog)
#### 实体8: 操作审计 (AuditLog)
**实体说明**: 用户操作审计记录
**主要属性**:
- username (用户名)
- user_id (用户ID) - 外键
- cluster_id (集群ID) - 外键
- action (操作动作)
- resource_type (资源类型)
- resource_id (资源ID)
- ip_address (IP地址)
- created_at (操作时间)
**业务规则**:
- 记录所有重要操作
- 审计日志不可删除
- 保留期限: 1年
- 记录所有重要操作,并关联到用户和集群
### 2.4 扩展实体
#### 实体9: 应用配置 (AppConfiguration)
**实体说明**: 存储系统各类配置信息
**主要属性**:
- config_type (配置类型) - 组合主标识符
- config_key (配置键) - 组合主标识符
- config_value (配置值)
#### 实体8: 修复模板 (RepairTemplate)
**业务规则**:
- config_type和config_key的组合必须唯一
### 2.3 扩展实体
#### 实体10: 修复模板 (RepairTemplate)
**实体说明**: 预定义的修复脚本模板
**主要属性**:
- template_name (模板名称)
- fault_type (适用故障类型)
- script_content (脚本内容)
- risk_level (风险级别)
## 3. 实体关系设计
### 3.1 主要关系
### 3.1 核心关系 (多对多)
#### 关系1: 用户 ↔ 集群 (N:M)
- **关系类型**: 多对多
- **实现方式**: 通过`UserClusterMapping`中间表实现
- **关系说明**: 一个用户可以管理多个集群,一个集群也可以被多个用户管理
- **外键**:
- UserClusterMapping.user_id → User.id
- UserClusterMapping.cluster_id → Cluster.id
#### 关系1: 故障记录 ↔ 执行日志 (1:N)
### 3.2 主要关系 (一对多)
#### 关系2: 集群 ↔ 故障记录 (1:N)
- **关系类型**: 一对多
- **关系说明**: 一个故障可能有多次修复执行记录
- **外键**: ExecutionLog.fault_id → FaultRecord.fault_id
- **约束**: 级联删除
- **外键**: FaultRecord.cluster_id → Cluster.id
#### 关系2: 用户 ↔ 操作审计 (1:N)
#### 关系3: 集群 ↔ 集群状态 (1:N)
- **关系类型**: 一对多
- **关系说明**: 一个用户可能有多条操作审计记录
- **外键**: AuditLog.user_id → User.id
- **约束**: 设置为NULL用户删除后保留审计记录
- **外键**: ClusterStatus.cluster_id → Cluster.id
#### 关系3: 故障记录 ↔ 系统日志 (1:N)
#### 关系4: 集群 ↔ 系统日志 (1:N)
- **关系类型**: 一对多
- **关系说明**: 一个故障可能关联多条日志
- **外键**: SystemLog.fault_id → FaultRecord.fault_id
- **约束**: 可选关联(日志可能不关联任何故障)
- **外键**: SystemLog.cluster_id → Cluster.id
#### 关系4: 集群状态 ↔ 故障记录 (1:N)
#### 关系5: 集群 ↔ 操作审计 (1:N)
- **关系类型**: 一对多
- **关系说明**: 一个节点可能产生多个故障
- **实现方式**: 通过JSON字段affected_nodes实现
- **备注**: 支持一个故障影响多个节点
- **外键**: AuditLog.cluster_id → Cluster.id
### 3.2 弱实体关系
#### 关系6: 故障记录 ↔ 执行日志 (1:N)
- **关系类型**: 一对多
- **外键**: ExecutionLog.fault_id → FaultRecord.fault_id
#### 关系5: 修复模板 ↔ 执行日志 (1:N)
- **关系类型**: 一对多(弱关系)
- **关系说明**: 执行日志可能基于某个修复模板
- **实现方式**: 通过script_path字段关联
- **备注**: 不强制外键约束
#### 关系7: 用户 ↔ 操作审计 (1:N)
- **关系类型**: 一对多
- **外键**: AuditLog.user_id → User.id
#### 关系6: 应用配置 ↔ 故障记录 (1:N)
- **关系类型**: 一对多(弱关系)
- **关系说明**: 故障可能由告警规则类型的配置触发
- **实现方式**: 通过业务逻辑关联
- **备注**: 不直接建立外键关系
#### 关系8: 故障记录 ↔ 系统日志 (1:N)
- **关系类型**: 一对多
- **外键**: SystemLog.fault_id → FaultRecord.fault_id
## 4. PowerDesigner建模步骤
@ -194,165 +182,68 @@
#### 步骤1: 创建实体
1. 打开PowerDesigner新建概念数据模型
2. 使用Entity工具创建8个核心实体
2. 使用Entity工具创建10个实体
3. 为每个实体添加标识符和属性
4. 设置属性的数据类型和约束
#### 步骤2: 建立关系
1. 使用Relationship工具连接相关实体
2. 设置关系的基数1:1, 1:N, N:M
3. 定义关系的角色名称
4. 设置关系的约束条件
#### 步骤3: 添加业务规则
1. 在实体上右键选择Properties
2. 在Business Rules标签页添加业务规则
3. 定义完整性约束和验证规则
### 4.2 逻辑数据模型(LDM)生成
#### 步骤1: CDM转换为LDM
1. 选择Tools → Generate Logical Data Model
2. 选择目标数据库类型MySQL
3. 配置转换选项和命名规则
4. 生成LDM
#### 步骤2: 优化逻辑模型
1. 检查表结构和字段定义
2. 优化数据类型和长度
3. 添加索引和约束
4. 验证外键关系
### 4.3 物理数据模型(PDM)生成
#### 步骤1: LDM转换为PDM
1. 选择Tools → Generate Physical Data Model
2. 选择MySQL 8.0数据库
3. 配置物理存储参数
4. 生成PDM
#### 步骤2: 物理优化
1. 设置表的存储引擎InnoDB
2. 配置字符集utf8mb4
3. 优化索引策略
4. 设置分区方案(如需要)
2. **重点**: 创建User和Cluster之间的N:M关系PowerDesigner会自动生成`UserClusterMapping`中间表
3. 设置其他1:N关系的基数和外键
### 4.2 逻辑与物理模型生成
(步骤与之前类似确保在生成PDM时所有外键和索引都已正确创建)
## 5. ER图布局建议
### 5.1 图形布局
```
核心业务区域(左侧:
中心区域(用户-集群关系):
┌─────────────────────────────────┐
│ FaultRecord ←→ ExecutionLog │
│ ↕ │
│ SystemLog ←→ ClusterStatus │
│ User ←- (N:M) -→ Cluster │
│ (UserClusterMapping) │
└─────────────────────────────────┘
管理区域(右侧:
集群关联实体(下方):
┌─────────────────────────────────┐
│ AppConfiguration │
│ ↕ │
│ User ←→ AuditLog │
│ ↕ │
│ RepairTemplate │
│ Cluster --→ FaultRecord │
│ --→ ClusterStatus │
│ --→ SystemLog │
│ --→ AuditLog │
└─────────────────────────────────┘
其他关联实体(两侧):
┌─────────────────────────────────┐
│ FaultRecord --→ ExecutionLog │
│ User --→ AuditLog │
└─────────────────────────────────┘
独立实体(顶部):
┌─────────────────────────────────┐
│ AppConfiguration, RepairTemplate│
└─────────────────────────────────┘
```
### 5.2 颜色编码建议
- **核心实体**: 蓝色系(#E3F2FD
- **管理实体**: 绿色系(#E8F5E8
### 5.3 关系线样式
- **强关系**: 实线,带箭头
- **弱关系**: 虚线,带箭头
- **一对多**: 单向箭头
- **核心实体**: 蓝色系 (FaultRecord, Cluster, User)
- **关联实体**: 绿色系 (ExecutionLog, ClusterStatus, SystemLog)
- **管理实体**: 灰色系 (AuditLog, AppConfiguration)
- **中间表**: 黄色系 (UserClusterMapping)
## 6. 数据完整性设计
### 6.1 实体完整性
- 每个实体必须有主键
- 主键不能为空且唯一
- 建议使用自增长ID作为代理键
### 6.2 参照完整性
- 外键必须引用存在的主键值
- 设置适当的级联操作
- 考虑孤儿记录的处理策略
### 6.3 域完整性
- 定义字段的数据类型和长度
- 设置NOT NULL约束
- 使用CHECK约束验证数据范围
- 定义枚举类型的有效值
### 6.1 参照完整性
- 确保所有外键都设置了正确的参照操作如ON DELETE CASCADE或ON DELETE SET NULL
- `UserClusterMapping`的`user_id`和`cluster_id`应设置为级联删除,确保主实体删除时,映射关系也被清理
### 6.4 用户定义完整性
- 业务规则约束
- 触发器实现复杂验证
- 存储过程封装业务逻辑
(其他完整性设计与之前类似)
## 7. 性能优化考虑
### 7.1 索引设计
- 为外键字段创建索引
- 为频繁查询字段创建索引
- 考虑复合索引的使用
- 避免过多索引影响写入性能
### 7.2 分区策略
- system_logs表按时间分区
- audit_logs表按时间分区
- 大表考虑水平分区
### 7.3 数据类型优化
- 选择合适的数据类型长度
- 使用ENUM代替VARCHAR固定值
- JSON字段用于半结构化数据
- 时间字段使用TIMESTAMP
## 8. 文档生成
### 8.1 自动生成文档
1. 在PDM中选择Report → Generate Report
2. 选择HTML或RTF格式
3. 配置报告内容和样式
4. 生成完整的数据库设计文档
### 8.2 导出SQL脚本
1. 选择Database → Generate Database
2. 配置生成选项
3. 生成CREATE TABLE脚本
4. 包含索引、约束和初始数据
## 9. 版本控制
### 9.1 模型版本管理
- 使用PowerDesigner的版本控制功能
- 定期备份模型文件
- 记录每次修改的变更日志
- 建立模型审核流程
### 9.2 数据库变更管理
- 使用数据库迁移脚本
- 记录结构变更历史
- 建立回滚机制
- 测试环境先行验证
## 10. 最佳实践
### 10.1 命名规范
- 表名使用复数形式
- 字段名使用下划线分隔
- 外键字段以_id结尾
- 索引名以idx_开头
### 10.2 设计原则
- 遵循第三范式
- 避免冗余数据
- 考虑查询性能
- 保持模型简洁
### 10.3 维护建议
- 定期审查模型设计
- 根据业务变化调整结构
- 监控数据库性能
- 及时优化慢查询
- 为所有外键字段创建索引,特别是`cluster_id`和`user_id`
- `UserClusterMapping`表的主键是`(user_id, cluster_id)`复合键,这本身就是一个高效的索引
- 考虑在`SystemLog`和`AuditLog`上创建基于`(cluster_id, created_at)`的复合索引,以优化按集群和时间范围的查询
(其他性能优化考虑与之前类似)
(8, 9, 10节内容与之前版本基本保持一致仅需确保命名规范和设计原则覆盖到新表即可)

@ -22,28 +22,31 @@
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | fault_id | VARCHAR | 32 | - | - | NOT NULL | - | 故障唯一标识 | 格式: FLT-YYYYMMDD-XXXX |
| 3 | fault_type | VARCHAR | 50 | - | - | NOT NULL | - | 故障类型 | DataNode离线/磁盘不足等 |
| 4 | fault_level | ENUM | - | - | - | NOT NULL | 'medium' | 故障级别 | low/medium/high/critical |
| 5 | title | VARCHAR | 200 | - | - | NOT NULL | - | 故障标题 | 简短描述 |
| 6 | description | TEXT | - | - | - | NULL | - | 故障详细描述 | 详细说明 |
| 7 | affected_nodes | JSON | - | - | - | NULL | - | 受影响的节点列表 | JSON数组格式 |
| 8 | root_cause | TEXT | - | - | - | NULL | - | 根本原因分析 | AI分析结果 |
| 9 | repair_suggestion | TEXT | - | - | - | NULL | - | 修复建议 | AI生成的修复建议 |
| 10 | status | ENUM | - | - | - | NOT NULL | 'detected' | 状态 | detected/analyzing/repairing/resolved/failed |
| 11 | assignee | VARCHAR | 50 | - | - | NULL | - | 负责人 | 处理人员 |
| 12 | reporter | VARCHAR | 50 | - | - | NULL | 'system' | 报告人 | 故障发现者 |
| 13 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 故障发现时间 |
| 14 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 最后修改时间 |
| 15 | resolved_at | TIMESTAMP | - | - | - | NULL | - | 解决时间 | 故障解决时间 |
| 3 | cluster_id | BIGINT | - | - | - | NULL | - | 关联集群ID | 外键关联clusters表 |
| 4 | fault_type | VARCHAR | 50 | - | - | NOT NULL | - | 故障类型 | DataNode离线/磁盘不足等 |
| 5 | fault_level | ENUM | - | - | - | NOT NULL | 'medium' | 故障级别 | low/medium/high/critical |
| 6 | title | VARCHAR | 200 | - | - | NOT NULL | - | 故障标题 | 简短描述 |
| 7 | description | TEXT | - | - | - | NULL | - | 故障详细描述 | 详细说明 |
| 8 | affected_nodes | JSON | - | - | - | NULL | - | 受影响的节点列表 | JSON数组格式 |
| 9 | root_cause | TEXT | - | - | - | NULL | - | 根本原因分析 | AI分析结果 |
| 10 | repair_suggestion | TEXT | - | - | - | NULL | - | 修复建议 | AI生成的修复建议 |
| 11 | status | ENUM | - | - | - | NOT NULL | 'detected' | 状态 | detected/analyzing/repairing/resolved/failed |
| 12 | assignee | VARCHAR | 50 | - | - | NULL | - | 负责人 | 处理人员 |
| 13 | reporter | VARCHAR | 50 | - | - | NULL | 'system' | 报告人 | 故障发现者 |
| 14 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 故障发现时间 |
| 15 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 最后修改时间 |
| 16 | resolved_at | TIMESTAMP | - | - | - | NULL | - | 解决时间 | 故障解决时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_fault_id (fault_id)
- INDEX: idx_cluster_id (cluster_id)
- INDEX: idx_fault_type (fault_type)
- INDEX: idx_fault_level (fault_level)
- INDEX: idx_status (status)
- INDEX: idx_created_at (created_at)
- INDEX: idx_assignee (assignee)
**外键约束**:
- fk_fault_records_cluster_id: cluster_id → clusters.id
#### 表名: exec_logs (执行日志表)
**表说明**: 记录自动修复脚本的执行过程和结果
@ -74,8 +77,6 @@
- UNIQUE KEY: uk_exec_id (exec_id)
- INDEX: idx_fault_id (fault_id)
- INDEX: idx_execution_status (execution_status)
- INDEX: idx_start_time (start_time)
- INDEX: idx_operator (operator)
**外键约束**:
- fk_exec_logs_fault_id: fault_id → fault_records.fault_id
@ -86,31 +87,29 @@
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | node_id | VARCHAR | 50 | - | - | NOT NULL | - | 节点标识 | 唯一标识节点 |
| 3 | node_name | VARCHAR | 100 | - | - | NOT NULL | - | 节点名称 | 节点的友好名称 |
| 4 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 节点的IP地址 |
| 5 | node_role | ENUM | - | - | - | NOT NULL | - | 节点角色 | NameNode/DataNode/ResourceManager/NodeManager |
| 6 | node_status | ENUM | - | - | - | NOT NULL | 'unknown' | 节点状态 | online/offline/maintenance/unknown |
| 7 | cpu_usage | DECIMAL | 5 | 2 | - | NULL | - | CPU使用率(%) | 0.00-100.00 |
| 8 | memory_usage | DECIMAL | 5 | 2 | - | NULL | - | 内存使用率(%) | 0.00-100.00 |
| 9 | disk_usage | DECIMAL | 5 | 2 | - | NULL | - | 磁盘使用率(%) | 0.00-100.00 |
| 10 | network_io | BIGINT | - | - | - | NULL | - | 网络IO(bytes/s) | 网络吞吐量 |
| 11 | disk_io | BIGINT | - | - | - | NULL | - | 磁盘IO(bytes/s) | 磁盘吞吐量 |
| 12 | load_average | DECIMAL | 5 | 2 | - | NULL | - | 系统负载 | 系统平均负载 |
| 13 | uptime | BIGINT | - | - | - | NULL | - | 运行时间(秒) | 节点运行时长 |
| 14 | last_heartbeat | TIMESTAMP | - | - | - | NULL | - | 最后心跳时间 | 最后一次心跳时间 |
| 15 | health_score | INT | - | - | - | NULL | 100 | 健康评分(0-100) | 节点健康度评分 |
| 16 | alerts_count | INT | - | - | - | NOT NULL | 0 | 告警数量 | 当前活跃告警数 |
| 17 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 18 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
| 2 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 集群ID | 外键关联clusters表 |
| 3 | node_id | VARCHAR | 50 | - | - | NOT NULL | - | 节点标识 | 唯一标识节点 |
| 4 | node_name | VARCHAR | 100 | - | - | NOT NULL | - | 节点名称 | 节点的友好名称 |
| 5 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 节点的IP地址 |
| 6 | node_role | ENUM | - | - | - | NOT NULL | - | 节点角色 | NameNode/DataNode/ResourceManager/NodeManager |
| 7 | node_status | ENUM | - | - | - | NOT NULL | 'unknown' | 节点状态 | online/offline/maintenance/unknown |
| 8 | cpu_usage | DECIMAL | 5 | 2 | - | NULL | - | CPU使用率(%) | 0.00-100.00 |
| 9 | memory_usage | DECIMAL | 5 | 2 | - | NULL | - | 内存使用率(%) | 0.00-100.00 |
| 10 | disk_usage | DECIMAL | 5 | 2 | - | NULL | - | 磁盘使用率(%) | 0.00-100.00 |
| 11 | health_score | INT | - | - | - | NULL | 100 | 健康评分(0-100) | 节点健康度评分 |
| 12 | last_heartbeat | TIMESTAMP | - | - | - | NULL | - | 最后心跳时间 | 最后一次心跳时间 |
| 13 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 14 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_node_id (node_id)
- INDEX: idx_node_role (node_role)
- INDEX: idx_cluster_id (cluster_id)
- INDEX: idx_node_status (node_status)
- INDEX: idx_last_heartbeat (last_heartbeat)
- INDEX: idx_health_score (health_score)
**外键约束**:
- fk_cluster_status_cluster_id: cluster_id → clusters.id
#### 表名: system_logs (系统日志表)
**表说明**: 存储从Flume采集的原始日志数据
@ -120,36 +119,66 @@
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | log_id | VARCHAR | 32 | - | - | NOT NULL | - | 日志唯一标识 | 格式: LOG-YYYYMMDD-XXXX |
| 3 | fault_id | VARCHAR | 32 | - | - | NULL | - | 关联故障ID | 外键关联fault_records |
| 4 | timestamp | TIMESTAMP | - | - | - | NOT NULL | - | 日志时间戳 | 日志产生的时间 |
| 5 | host | VARCHAR | 100 | - | - | NOT NULL | - | 主机名 | 产生日志的主机 |
| 6 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 主机IP地址 |
| 4 | cluster_id | BIGINT | - | - | - | NULL | - | 关联集群ID | 外键关联clusters表 |
| 5 | timestamp | TIMESTAMP | - | - | - | NOT NULL | - | 日志时间戳 | 日志产生的时间 |
| 6 | host | VARCHAR | 100 | - | - | NOT NULL | - | 主机名 | 产生日志的主机 |
| 7 | service | VARCHAR | 50 | - | - | NOT NULL | - | 服务名 | HDFS/YARN/MapReduce等 |
| 8 | component | VARCHAR | 50 | - | - | NULL | - | 组件名 | 具体的组件名称 |
| 9 | log_level | ENUM | - | - | - | NOT NULL | - | 日志级别 | DEBUG/INFO/WARN/ERROR/FATAL |
| 10 | thread | VARCHAR | 100 | - | - | NULL | - | 线程名 | 产生日志的线程 |
| 11 | logger | VARCHAR | 200 | - | - | NULL | - | Logger名称 | 日志记录器名称 |
| 12 | message | LONGTEXT | - | - | - | NOT NULL | - | 日志消息 | 日志的主要内容 |
| 13 | exception | LONGTEXT | - | - | - | NULL | - | 异常堆栈 | 异常的堆栈信息 |
| 14 | raw_log | LONGTEXT | - | - | - | NULL | - | 原始日志内容 | 未处理的原始日志 |
| 15 | tags | JSON | - | - | - | NULL | - | 标签信息 | 日志的标签和元数据 |
| 16 | processed | BOOLEAN | - | - | - | NOT NULL | FALSE | 是否已处理 | 标记是否已被分析处理 |
| 17 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 8 | log_level | ENUM | - | - | - | NOT NULL | - | 日志级别 | DEBUG/INFO/WARN/ERROR/FATAL |
| 9 | message | LONGTEXT | - | - | - | NOT NULL | - | 日志消息 | 日志的主要内容 |
| 10 | exception | LONGTEXT | - | - | - | NULL | - | 异常堆栈 | 异常的堆栈信息 |
| 11 | raw_log | LONGTEXT | - | - | - | NULL | - | 原始日志内容 | 未处理的原始日志 |
| 12 | processed | BOOLEAN | - | - | - | NOT NULL | FALSE | 是否已处理 | 标记是否已被分析处理 |
| 13 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_log_id (log_id)
- INDEX: idx_fault_id (fault_id)
- INDEX: idx_cluster_id (cluster_id)
- INDEX: idx_timestamp (timestamp)
- INDEX: idx_host (host)
- INDEX: idx_service (service)
- INDEX: idx_log_level (log_level)
- INDEX: idx_processed (processed)
- INDEX: idx_timestamp_level (timestamp, log_level) - 复合索引
**外键约束**:
- fk_system_logs_fault_id: fault_id → fault_records.fault_id
- fk_system_logs_cluster_id: cluster_id → clusters.id
### 2.2 配置管理与用户表
#### 表名: clusters (集群信息表)
**表说明**: 存储用户管理的集群信息
### 2.2 配置管理表
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | cluster_name | VARCHAR | 100 | - | - | NOT NULL | - | 集群名称 | 集群的唯一名称 |
| 3 | cluster_type | VARCHAR | 50 | - | - | NOT NULL | - | 集群类型 | e.g., Hadoop, Kubernetes |
| 4 | description | TEXT | - | - | - | NULL | - | 集群描述 | 集群的详细说明 |
| 5 | config_info | JSON | - | - | - | NULL | - | 集群配置信息 | e.g., NameNode地址, Zookeeper地址等 |
| 6 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 7 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_cluster_name (cluster_name)
#### 表名: user_cluster_mapping (用户与集群映射表)
**表说明**: 管理用户和集群的多对多关系
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | user_id | BIGINT | - | - | - | NOT NULL | - | 用户ID | 外键关联users表 |
| 3 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 集群ID | 外键关联clusters表 |
| 4 | role | ENUM | - | - | - | NOT NULL | 'operator' | 用户在该集群的角色 | admin/operator/viewer |
| 5 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_user_cluster (user_id, cluster_id)
**外键约束**:
- fk_mapping_user_id: user_id → users.id
- fk_mapping_cluster_id: cluster_id → clusters.id
#### 表名: app_configurations (应用配置表)
**表说明**: 存储系统各类配置信息,包括系统参数、告警规则和通知设置
@ -157,20 +186,18 @@
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | config_type | VARCHAR | 50 | - | - | NOT NULL | - | 配置类型 | system/alert/notification |
| 2 | config_type | ENUM | - | - | - | NOT NULL | - | 配置类型 | system/alert_rule/notification/llm |
| 3 | config_key | VARCHAR | 100 | - | - | NOT NULL | - | 配置键 | 配置的唯一标识 |
| 4 | config_value | JSON | - | - | - | NULL | - | 配置值 | JSON格式的配置内容 |
| 4 | config_value | JSON | - | - | - | NOT NULL | - | 配置值 | JSON格式的配置内容 |
| 5 | description | VARCHAR | 500 | - | - | NULL | - | 配置描述 | 配置项的说明 |
| 6 | is_active | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否启用 | 配置是否生效 |
| 6 | is_enabled | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否启用 | 配置是否生效 |
| 7 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 8 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_config_type_key (config_type, config_key)
- INDEX: idx_is_active (is_active)
### 2.3 用户管理表
- INDEX: idx_is_enabled (is_enabled)
#### 表名: users (用户表)
**表说明**: 系统用户信息
@ -182,20 +209,16 @@
| 3 | email | VARCHAR | 100 | - | - | NOT NULL | - | 邮箱 | 用户邮箱地址 |
| 4 | password_hash | VARCHAR | 255 | - | - | NOT NULL | - | 密码哈希 | 加密后的密码 |
| 5 | full_name | VARCHAR | 100 | - | - | NOT NULL | - | 姓名 | 用户真实姓名 |
| 6 | role | ENUM | - | - | - | NOT NULL | 'operator' | 角色 | admin/operator/viewer |
| 7 | department | VARCHAR | 100 | - | - | NULL | - | 部门 | 用户所属部门 |
| 8 | phone | VARCHAR | 20 | - | - | NULL | - | 电话 | 联系电话 |
| 9 | is_active | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否激活 | 账号是否可用 |
| 10 | last_login | TIMESTAMP | - | - | - | NULL | - | 最后登录时间 | 最后一次登录时间 |
| 11 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 账号创建时间 |
| 12 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 账号更新时间 |
| 6 | role | ENUM | - | - | - | NOT NULL | 'operator' | 全局角色 | admin/operator/viewer |
| 7 | is_active | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否激活 | 账号是否可用 |
| 8 | last_login | TIMESTAMP | - | - | - | NULL | - | 最后登录时间 | 最后一次登录时间 |
| 9 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 账号创建时间 |
| 10 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 账号更新时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_username (username)
- UNIQUE KEY: uk_email (email)
- INDEX: idx_role (role)
- INDEX: idx_is_active (is_active)
#### 表名: audit_logs (操作审计表)
**表说明**: 记录用户操作审计日志
@ -204,27 +227,28 @@
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | user_id | BIGINT | - | - | - | NULL | - | 用户ID | 关联users表 |
| 3 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 操作用户名 |
| 4 | action | VARCHAR | 100 | - | - | NOT NULL | - | 操作动作 | 具体的操作类型 |
| 5 | resource_type | VARCHAR | 50 | - | - | NOT NULL | - | 资源类型 | 操作的资源类型 |
| 6 | resource_id | VARCHAR | 100 | - | - | NULL | - | 资源ID | 操作的资源标识 |
| 7 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 操作来源IP |
| 8 | user_agent | TEXT | - | - | - | NULL | - | 用户代理 | 浏览器信息 |
| 3 | cluster_id | BIGINT | - | - | - | NULL | - | 集群ID | 关联clusters表 |
| 4 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 操作用户名 |
| 5 | action | VARCHAR | 100 | - | - | NOT NULL | - | 操作动作 | 具体的操作类型 |
| 6 | resource_type | VARCHAR | 50 | - | - | NOT NULL | - | 资源类型 | 操作的资源类型 |
| 7 | resource_id | VARCHAR | 100 | - | - | NULL | - | 资源ID | 操作的资源标识 |
| 8 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 操作来源IP |
| 9 | request_data | JSON | - | - | - | NULL | - | 请求数据 | 请求的详细数据 |
| 10 | response_status | INT | - | - | - | NULL | - | 响应状态码 | HTTP响应状态 |
| 11 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 操作发生时间 |
| 11 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 操作发生时间 | |
**索引信息**:
- PRIMARY KEY: id
- INDEX: idx_user_id (user_id)
- INDEX: idx_username (username)
- INDEX: idx_cluster_id (cluster_id)
- INDEX: idx_action (action)
- INDEX: idx_created_at (created_at)
**外键约束**:
- fk_audit_logs_user_id: user_id → users.id
- fk_audit_logs_cluster_id: cluster_id → clusters.id
### 2.4 扩展业务
### 2.3 扩展
#### 表名: repair_templates (修复模板表)
**表说明**: 存储常见故障的修复模板
@ -234,11 +258,11 @@
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | template_name | VARCHAR | 100 | - | - | NOT NULL | - | 模板名称 | 模板的唯一名称 |
| 3 | fault_type | VARCHAR | 50 | - | - | NOT NULL | - | 适用故障类型 | 模板适用的故障类型 |
| 4 | risk_level | ENUM | - | - | - | NOT NULL | 'medium' | 风险级别 | low/medium/high |
| 5 | script_content | TEXT | - | - | - | NOT NULL | - | 脚本内容 | 修复脚本或命令 |
| 4 | script_content | TEXT | - | - | - | NOT NULL | - | 脚本内容 | 修复脚本或命令 |
| 5 | risk_level | ENUM | - | - | - | NOT NULL | 'medium' | 风险级别 | low/medium/high |
| 6 | description | TEXT | - | - | - | NULL | - | 模板描述 | 模板的功能说明 |
| 7 | version | VARCHAR | 20 | - | - | NOT NULL | '1.0' | 版本号 | 模板的版本 |
| 8 | author | VARCHAR | 50 | - | - | NULL | - | 创建者 | 模板的创建者 |
| 7 | parameters | JSON | - | - | - | NULL | - | 参数定义 | 脚本所需参数的定义 |
| 8 | created_by | VARCHAR | 50 | - | - | NULL | - | 创建者 | 模板的创建者 |
| 9 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 10 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
@ -289,9 +313,14 @@
- `timeout`: 执行超时
### 3.7 用户角色 (role)
- `admin`: 系统管理员,拥有所有权限
- `operator`: 运维工程师,可以执行修复操作
- `viewer`: 查看者,只能查看信息
- **全局角色 (users.role)**
- `admin`: 系统管理员,拥有所有权限
- `operator`: 运维工程师,可以执行修复操作
- `viewer`: 查看者,只能查看信息
- **集群角色 (user_cluster_mapping.role)**
- `admin`: 集群管理员
- `operator`: 集群操作员
- `viewer`: 集群查看者
## 4. JSON字段结构说明
@ -317,17 +346,28 @@
]
```
### 4.3 tags (日志标签)
### 4.3 parameters (模板参数)
```json
[
{
"name": "target_directory",
"type": "string",
"description": "The target directory for the cleanup script.",
"required": true
}
]
```
### 4.4 config_info (集群配置信息)
```json
{
"environment": "production",
"cluster": "hadoop-cluster-01",
"severity": "high",
"category": "system"
"namenode_rpc_address": "hdfs://namenode:8020",
"resourcemanager_address": "yarn-rm:8032",
"zookeeper_quorum": "zk1:2181,zk2:2181"
}
```
### 4.4 app_configurations.config_value (配置值)
### 4.5 app_configurations.config_value (配置值)
**config_type: 'system'**
```json
{
@ -336,7 +376,7 @@
}
```
**config_type: 'alert'**
**config_type: 'alert_rule'**
```json
{
"metric": "cpu_usage",
@ -356,49 +396,42 @@
}
```
## 5. 视图定义
### 5.1 v_fault_statistics (故障统计视图)
提供故障的统计信息,包括按日期、级别、类型的分组统计。
### 5.2 v_cluster_health (集群健康度视图)
提供集群各角色节点的健康状况汇总。
### 5.3 v_execution_success_rate (执行成功率视图)
提供修复执行的成功率统计。
## 6. 存储过程
### 6.1 sp_create_fault_record
创建故障记录的存储过程自动生成故障ID。
### 6.2 sp_update_cluster_status
更新集群状态的存储过程,支持插入或更新操作。
## 7. 触发器
### 7.1 tr_fault_status_change
故障状态变更触发器,自动记录解决时间和审计日志。
**config_type: 'llm'**
```json
{
"provider": "openai",
"api_key": "sk-xxxxxxxx",
"model": "gpt-4"
}
```
## 8. 数据完整性约束
## 5. 数据完整性约束
### 8.1 主键约束
### 5.1 主键约束
所有表都有自增长的主键ID。
### 8.2 唯一性约束
### 5.2 唯一性约束
- fault_records.fault_id
- exec_logs.exec_id
- cluster_status.node_id
- system_logs.log_id
- clusters.cluster_name
- user_cluster_mapping.user_id, cluster_id
- app_configurations.config_type, config_key
- users.username
- users.email
- repair_templates.template_name
### 8.3 外键约束
### 5.3 外键约束
- fault_records.cluster_id → clusters.id
- exec_logs.fault_id → fault_records.fault_id
- system_logs.fault_id → fault_records.fault_id
- system_logs.cluster_id → clusters.id
- cluster_status.cluster_id → clusters.id
- user_cluster_mapping.user_id → users.id
- user_cluster_mapping.cluster_id → clusters.id
- audit_logs.user_id → users.id
- audit_logs.cluster_id → clusters.id
### 8.4 检查约束
- health_score: 0 <= health_score <= 100

@ -74,6 +74,7 @@ CREATE TABLE exec_logs (
DROP TABLE IF EXISTS cluster_status;
CREATE TABLE cluster_status (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
cluster_id BIGINT NOT NULL COMMENT '集群ID',
node_id VARCHAR(50) NOT NULL COMMENT '节点标识',
node_name VARCHAR(100) NOT NULL COMMENT '节点名称',
ip_address VARCHAR(15) NOT NULL COMMENT 'IP地址',
@ -89,6 +90,7 @@ CREATE TABLE cluster_status (
PRIMARY KEY (id),
UNIQUE KEY uk_node_id (node_id),
KEY idx_cluster_id (cluster_id),
KEY idx_node_status (node_status),
KEY idx_last_heartbeat (last_heartbeat)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='集群状态表';
@ -99,6 +101,7 @@ CREATE TABLE system_logs (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
log_id VARCHAR(32) NOT NULL COMMENT '日志唯一标识',
fault_id VARCHAR(32) COMMENT '关联故障ID',
cluster_id BIGINT COMMENT '关联集群ID',
timestamp TIMESTAMP NOT NULL COMMENT '日志时间戳',
host VARCHAR(100) NOT NULL COMMENT '主机名',
service VARCHAR(50) NOT NULL COMMENT '服务名',
@ -112,6 +115,7 @@ CREATE TABLE system_logs (
PRIMARY KEY (id),
UNIQUE KEY uk_log_id (log_id),
KEY idx_fault_id (fault_id),
KEY idx_cluster_id (cluster_id),
KEY idx_timestamp (timestamp),
KEY idx_log_level (log_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统日志表';
@ -120,7 +124,81 @@ CREATE TABLE system_logs (
-- 2. 配置管理与用户表
-- =====================================================
-- 2.1 应用统一配置表
-- 2.1 集群信息表
DROP TABLE IF EXISTS clusters;
CREATE TABLE clusters (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
cluster_name VARCHAR(100) NOT NULL COMMENT '集群名称',
cluster_type VARCHAR(50) NOT NULL COMMENT '集群类型 (e.g., Hadoop, Kubernetes)',
description TEXT COMMENT '集群描述',
config_info JSON COMMENT '集群配置信息 (e.g., NameNode地址)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_cluster_name (cluster_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='集群信息表';
-- 2.2 角色表
DROP TABLE IF EXISTS roles;
CREATE TABLE roles (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
role_key VARCHAR(50) NOT NULL COMMENT '角色唯一标识',
description VARCHAR(255) COMMENT '角色描述',
is_system_role BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为系统内置角色',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_role_key (role_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
-- 2.3 权限表
DROP TABLE IF EXISTS permissions;
CREATE TABLE permissions (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
permission_name VARCHAR(100) NOT NULL COMMENT '权限名称',
permission_key VARCHAR(100) NOT NULL COMMENT '权限唯一标识',
description VARCHAR(255) COMMENT '权限描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_permission_key (permission_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
-- 2.4 角色-权限映射表
DROP TABLE IF EXISTS role_permission_mapping;
CREATE TABLE role_permission_mapping (
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
PRIMARY KEY (role_id, permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色-权限映射表';
-- 2.5 用户-角色映射表
DROP TABLE IF EXISTS user_role_mapping;
CREATE TABLE user_role_mapping (
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
PRIMARY KEY (user_id, role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户-角色映射表';
-- 2.6 用户与集群映射表
DROP TABLE IF EXISTS user_cluster_mapping;
CREATE TABLE user_cluster_mapping (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
cluster_id BIGINT NOT NULL COMMENT '集群ID',
role_id BIGINT NOT NULL COMMENT '用户在该集群的角色ID',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_user_cluster (user_id, cluster_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户与集群映射表';
-- 2.7 应用统一配置表
DROP TABLE IF EXISTS app_configurations;
CREATE TABLE app_configurations (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
@ -137,7 +215,7 @@ CREATE TABLE app_configurations (
KEY idx_is_enabled (is_enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用统一配置表';
-- 2.2 用户表
-- 2.8 用户表
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
@ -145,7 +223,6 @@ CREATE TABLE users (
email VARCHAR(100) NOT NULL COMMENT '邮箱',
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希',
full_name VARCHAR(100) NOT NULL COMMENT '姓名',
role ENUM('admin', 'operator', 'viewer') NOT NULL DEFAULT 'operator' COMMENT '角色',
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否激活',
last_login TIMESTAMP NULL COMMENT '最后登录时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@ -156,11 +233,13 @@ CREATE TABLE users (
UNIQUE KEY uk_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 2.3 操作审计表
-- 2.9 操作审计表
DROP TABLE IF EXISTS audit_logs;
CREATE TABLE audit_logs (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
user_id BIGINT COMMENT '用户ID',
cluster_id BIGINT COMMENT '集群ID',
role_id BIGINT COMMENT '角色ID',
username VARCHAR(50) NOT NULL COMMENT '用户名',
action VARCHAR(100) NOT NULL COMMENT '操作动作',
resource_type VARCHAR(50) NOT NULL COMMENT '资源类型',
@ -172,6 +251,8 @@ CREATE TABLE audit_logs (
PRIMARY KEY (id),
KEY idx_user_id (user_id),
KEY idx_cluster_id (cluster_id),
KEY idx_role_id (role_id),
KEY idx_action (action),
KEY idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作审计表';
@ -203,6 +284,13 @@ CREATE TABLE repair_templates (
-- 4. 外键约束
-- =====================================================
-- 故障记录表关联集群
ALTER TABLE fault_records
ADD COLUMN cluster_id BIGINT COMMENT '关联集群ID' AFTER fault_id,
ADD CONSTRAINT fk_fault_records_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 执行日志表关联故障记录表
ALTER TABLE exec_logs
ADD CONSTRAINT fk_exec_logs_fault_id
@ -215,16 +303,149 @@ ADD CONSTRAINT fk_system_logs_fault_id
FOREIGN KEY (fault_id) REFERENCES fault_records(fault_id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 系统日志表关联集群
ALTER TABLE system_logs
ADD CONSTRAINT fk_system_logs_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 集群状态表关联集群
ALTER TABLE cluster_status
ADD CONSTRAINT fk_cluster_status_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 角色-权限映射表关联
ALTER TABLE role_permission_mapping
ADD CONSTRAINT fk_rp_mapping_role_id
FOREIGN KEY (role_id) REFERENCES roles(id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE role_permission_mapping
ADD CONSTRAINT fk_rp_mapping_permission_id
FOREIGN KEY (permission_id) REFERENCES permissions(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 用户-角色映射表关联
ALTER TABLE user_role_mapping
ADD CONSTRAINT fk_ur_mapping_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE user_role_mapping
ADD CONSTRAINT fk_ur_mapping_role_id
FOREIGN KEY (role_id) REFERENCES roles(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 用户与集群映射表关联
ALTER TABLE user_cluster_mapping
ADD CONSTRAINT fk_mapping_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE user_cluster_mapping
ADD CONSTRAINT fk_mapping_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE user_cluster_mapping
ADD CONSTRAINT fk_mapping_role_id
FOREIGN KEY (role_id) REFERENCES roles(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 审计日志表关联用户表
ALTER TABLE audit_logs
ADD CONSTRAINT fk_audit_logs_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 审计日志表关联集群
ALTER TABLE audit_logs
ADD CONSTRAINT fk_audit_logs_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 审计日志表关联角色
ALTER TABLE audit_logs
ADD CONSTRAINT fk_audit_logs_role_id
FOREIGN KEY (role_id) REFERENCES roles(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- =====================================================
-- 5. 初始化数据
-- =====================================================
-- 插入默认集群
INSERT INTO clusters (cluster_name, cluster_type, description, config_info) VALUES
('Hadoop主集群', 'Hadoop', '生产环境主Hadoop集群', '{"namenode_uri": "hdfs://nn1.hadoop.prod:8020"}'),
('Hadoop测试集群', 'Hadoop', '用于测试的Hadoop集群', '{"namenode_uri": "hdfs://nn.hadoop.test:8020"}');
-- 插入默认系统角色
INSERT INTO roles (role_name, role_key, description, is_system_role) VALUES
('超级管理员', 'super_admin', '拥有系统所有权限', TRUE),
('集群管理员', 'cluster_admin', '管理指定集群的所有功能', TRUE),
('普通操作员', 'operator', '执行常规操作,如查看和执行修复任务', TRUE),
('只读观察员', 'viewer', '只能查看数据,不能进行任何修改操作', TRUE);
-- 插入默认权限
INSERT INTO permissions (permission_name, permission_key, description) VALUES
-- 用户管理
('查看用户', 'user:read', '查看用户列表和详情'),
('创建用户', 'user:create', '创建新用户'),
('编辑用户', 'user:update', '修改用户信息'),
('删除用户', 'user:delete', '删除用户'),
-- 角色管理
('查看角色', 'role:read', '查看角色列表和详情'),
('创建角色', 'role:create', '创建自定义角色'),
('编辑角色', 'role:update', '修改角色信息'),
('删除角色', 'role:delete', '删除自定义角色'),
('分配权限', 'role:assign_permissions', '为角色分配权限'),
-- 集群管理
('查看集群', 'cluster:read', '查看集群列表和状态'),
('添加集群', 'cluster:create', '添加新集群'),
('编辑集群', 'cluster:update', '修改集群配置'),
('删除集群', 'cluster:delete', '删除集群'),
-- 故障管理
('查看故障', 'fault:read', '查看故障记录'),
('分析故障', 'fault:analyze', '执行故障分析'),
('修复故障', 'fault:repair', '执行修复操作'),
-- 日志审计
('查看系统日志', 'log:read', '查看系统运行日志'),
('查看审计日志', 'audit:read', '查看用户操作审计');
-- 为系统角色分配权限
-- 超级管理员拥有所有权限
INSERT INTO role_permission_mapping (role_id, permission_id)
SELECT r.id, p.id
FROM roles r, permissions p
WHERE r.role_key = 'super_admin';
-- 集群管理员权限
INSERT INTO role_permission_mapping (role_id, permission_id)
SELECT r.id, p.id
FROM roles r, permissions p
WHERE r.role_key = 'cluster_admin' AND p.permission_key IN (
'cluster:read', 'cluster:update',
'fault:read', 'fault:analyze', 'fault:repair',
'log:read'
);
-- 普通操作员权限
INSERT INTO role_permission_mapping (role_id, permission_id)
SELECT r.id, p.id
FROM roles r, permissions p
WHERE r.role_key = 'operator' AND p.permission_key IN (
'fault:read', 'fault:repair', 'log:read'
);
-- 只读观察员权限
INSERT INTO role_permission_mapping (role_id, permission_id)
SELECT r.id, p.id
FROM roles r, permissions p
WHERE r.role_key = 'viewer' AND p.permission_key IN (
'user:read', 'role:read', 'cluster:read', 'fault:read', 'log:read', 'audit:read'
);
-- 插入默认系统配置
INSERT INTO app_configurations (config_type, config_key, config_value, description, is_enabled) VALUES
('system', 'system.name', '{"value": "故障检测系统"}', '系统名称', TRUE),
@ -243,8 +464,25 @@ INSERT INTO app_configurations (config_type, config_key, config_value, descripti
('notification', '默认邮件通知', '{"type": "email", "triggers": ["high", "critical"], "recipients": ["admin@example.com"]}', '向管理员发送高危和严重故障的邮件通知', TRUE);
-- 插入默认管理员用户 (密码: admin123)
INSERT INTO users (username, email, password_hash, full_name, role, is_active) VALUES
('admin', 'admin@example.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj/RK.s5uDjS', '系统管理员', 'admin', TRUE);
INSERT INTO users (username, email, password_hash, full_name, is_active) VALUES
('admin', 'admin@example.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj/RK.s5uDjS', '系统管理员', TRUE);
-- 为管理员分配全局角色
INSERT INTO user_role_mapping (user_id, role_id)
SELECT u.id, r.id
FROM users u, roles r
WHERE u.username = 'admin' AND r.role_key = 'super_admin';
-- 插入用户与集群的映射关系
INSERT INTO user_cluster_mapping (user_id, cluster_id, role_id)
SELECT u.id, c.id, r.id
FROM users u, clusters c, roles r
WHERE u.username = 'admin' AND c.cluster_name = 'Hadoop主集群' AND r.role_key = 'cluster_admin';
INSERT INTO user_cluster_mapping (user_id, cluster_id, role_id)
SELECT u.id, c.id, r.id
FROM users u, clusters c, roles r
WHERE u.username = 'admin' AND c.cluster_name = 'Hadoop测试集群' AND r.role_key = 'cluster_admin';
-- 插入修复脚本模板
INSERT INTO repair_templates (template_name, fault_type, script_content, risk_level, description, parameters) VALUES

@ -51,6 +51,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| fault_id | VARCHAR | 32 | NOT NULL | - | 故障唯一标识 |
| cluster_id | BIGINT | - | NULL | - | 关联集群ID |
| fault_type | VARCHAR | 50 | NOT NULL | - | 故障类型 |
| fault_level | ENUM | - | NOT NULL | 'medium' | 故障级别(low/medium/high/critical) |
| title | VARCHAR | 200 | NOT NULL | - | 故障标题 |
@ -68,6 +69,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_fault_id (fault_id)
- KEY idx_cluster_id (cluster_id)
- KEY idx_fault_type (fault_type)
- KEY idx_status (status)
- KEY idx_created_at (created_at)
@ -108,6 +110,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| cluster_id | BIGINT | - | NOT NULL | - | 集群ID |
| node_id | VARCHAR | 50 | NOT NULL | - | 节点标识 |
| node_name | VARCHAR | 100 | NOT NULL | - | 节点名称 |
| ip_address | VARCHAR | 15 | NOT NULL | - | IP地址 |
@ -124,6 +127,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_node_id (node_id)
- KEY idx_cluster_id (cluster_id)
- KEY idx_node_status (node_status)
- KEY idx_last_heartbeat (last_heartbeat)
@ -135,6 +139,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| log_id | VARCHAR | 32 | NOT NULL | - | 日志唯一标识 |
| fault_id | VARCHAR | 32 | NULL | - | 关联故障ID |
| cluster_id | BIGINT | - | NULL | - | 关联集群ID |
| timestamp | TIMESTAMP | - | NOT NULL | - | 日志时间戳 |
| host | VARCHAR | 100 | NOT NULL | - | 主机名 |
| service | VARCHAR | 50 | NOT NULL | - | 服务名 |
@ -149,12 +154,45 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- PRIMARY KEY (id)
- UNIQUE KEY uk_log_id (log_id)
- KEY idx_fault_id (fault_id)
- KEY idx_cluster_id (cluster_id)
- KEY idx_timestamp (timestamp)
- KEY idx_log_level (log_level)
### 2.2 配置管理与用户表
#### 2.2.1 应用统一配置表 (app_configurations)
#### 2.2.1 集群信息表 (clusters)
存储用户管理的集群信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| cluster_name | VARCHAR | 100 | NOT NULL | - | 集群名称 |
| cluster_type | VARCHAR | 50 | NOT NULL | - | 集群类型 (e.g., Hadoop, Kubernetes) |
| description | TEXT | - | NULL | - | 集群描述 |
| config_info | JSON | - | NULL | - | 集群配置信息 (e.g., NameNode地址) |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_cluster_name (cluster_name)
#### 2.2.2 用户与集群映射表 (user_cluster_mapping)
管理用户和集群的多对多关系
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| cluster_id | BIGINT | - | NOT NULL | - | 集群ID |
| role | ENUM | - | NOT NULL | 'operator' | 用户在该集群的角色(admin/operator/viewer) |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_user_cluster (user_id, cluster_id)
#### 2.2.3 应用统一配置表 (app_configurations)
统一管理系统配置、告警规则和通知设置
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
@ -173,7 +211,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- UNIQUE KEY uk_config_type_key (config_type, config_key)
- KEY idx_is_enabled (is_enabled)
#### 2.2.2 用户表 (users)
#### 2.2.4 用户表 (users)
系统用户信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
@ -183,7 +221,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| email | VARCHAR | 100 | NOT NULL | - | 邮箱 |
| password_hash | VARCHAR | 255 | NOT NULL | - | 密码哈希 |
| full_name | VARCHAR | 100 | NOT NULL | - | 姓名 |
| role | ENUM | - | NOT NULL | 'operator' | 角色(admin/operator/viewer) |
| role | ENUM | - | NOT NULL | 'operator' | 全局角色(admin/operator/viewer) |
| is_active | BOOLEAN | - | NOT NULL | TRUE | 是否激活 |
| last_login | TIMESTAMP | - | NULL | - | 最后登录时间 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
@ -194,13 +232,14 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- UNIQUE KEY uk_username (username)
- UNIQUE KEY uk_email (email)
#### 2.2.3 操作审计表 (audit_logs)
#### 2.2.5 操作审计表 (audit_logs)
记录用户操作审计日志
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NULL | - | 用户ID |
| cluster_id | BIGINT | - | NULL | - | 集群ID |
| username | VARCHAR | 50 | NOT NULL | - | 用户名 |
| action | VARCHAR | 100 | NOT NULL | - | 操作动作 |
| resource_type | VARCHAR | 50 | NOT NULL | - | 资源类型 |
@ -213,6 +252,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
**索引设计:**
- PRIMARY KEY (id)
- KEY idx_user_id (user_id)
- KEY idx_cluster_id (cluster_id)
- KEY idx_action (action)
- KEY idx_created_at (created_at)
@ -243,6 +283,12 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
### 3.1 外键关系
```sql
-- 故障记录表关联集群
ALTER TABLE fault_records
ADD CONSTRAINT fk_fault_records_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 执行日志表关联故障记录表
ALTER TABLE exec_logs
ADD CONSTRAINT fk_exec_logs_fault_id
@ -255,18 +301,50 @@ ADD CONSTRAINT fk_system_logs_fault_id
FOREIGN KEY (fault_id) REFERENCES fault_records(fault_id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 系统日志表关联集群
ALTER TABLE system_logs
ADD CONSTRAINT fk_system_logs_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 集群状态表关联集群
ALTER TABLE cluster_status
ADD CONSTRAINT fk_cluster_status_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 用户与集群映射表关联
ALTER TABLE user_cluster_mapping
ADD CONSTRAINT fk_mapping_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE user_cluster_mapping
ADD CONSTRAINT fk_mapping_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 审计日志表关联用户表
ALTER TABLE audit_logs
ADD CONSTRAINT fk_audit_logs_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- 审计日志表关联集群
ALTER TABLE audit_logs
ADD CONSTRAINT fk_audit_logs_cluster_id
FOREIGN KEY (cluster_id) REFERENCES clusters(id)
ON DELETE SET NULL ON UPDATE CASCADE;
```
### 3.2 关系说明
- **users****clusters**: 多对多关系,通过 `user_cluster_mapping` 表连接。一个用户可以管理多个集群,一个集群也可以被多个用户管理。
- **clusters****cluster_status**: 一对多关系,一个集群包含多个节点状态记录。
- **clusters****fault_records**: 一对多关系(可选),一个集群可能发生多个故障。
- **fault_records****exec_logs**: 一对多关系,一个故障可能有多次修复执行记录。
- **fault_records****system_logs**: 一对多关系(可选),一个故障可能关联多条系统日志。
- **users****audit_logs**: 一对多关系,一个用户可能有多条操作审计记录。
- **cluster_status**: 独立表,记录集群节点状态。
- **clusters** ↔ **audit_logs**: 一对多关系(可选),一个集群上的操作会产生审计日志
- **app_configurations**: 独立表,统一管理所有配置。
- **repair_templates**: 独立表,存储修复脚本模板。

@ -0,0 +1,7 @@
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}

@ -0,0 +1,3 @@
fastapi
uvicorn[standard]
psycopg2-binary
Loading…
Cancel
Save