数据库设计优化及pdm文件上传

pull/38/head
echo 6 months ago
parent c708f78afb
commit 1623707516

@ -74,6 +74,7 @@
**实体说明**: 从Flume采集的原始日志数据
**主要属性**:
- log_id (日志标识) - 主标识符
- fault_id (关联故障ID)
- timestamp (时间戳)
- host (主机名)
- service (服务名)
@ -88,39 +89,22 @@
### 2.2 配置管理实体
#### 实体5: 系统配置 (SystemConfig)
**实体说明**: 系统运行参数配置
#### 实体5: 应用配置 (AppConfiguration)
**实体说明**: 存储系统各类配置信息
**主要属性**:
- config_key (配置键) - 主标识符
- config_type (配置类型) - 组合主标识符
- config_key (配置键) - 组合主标识符
- config_value (配置值)
- config_type (配置类型)
- category (配置分类)
- is_active (是否启用)
**业务规则**:
- 配置键必须唯一
- 配置类型: string, int, boolean, json
- config_type和config_key的组合必须唯一
- 配置类型: system, alert, notification
- 支持配置的热更新
#### 实体6: 告警规则 (AlertRule)
**实体说明**: 系统告警规则定义
**主要属性**:
- rule_name (规则名称)
- rule_type (规则类型)
- metric_name (指标名称)
- condition_expr (条件表达式)
- threshold_value (阈值)
- severity (严重级别)
- is_enabled (是否启用)
**业务规则**:
- 规则类型: threshold, pattern, anomaly
- 严重级别: low, medium, high, critical
- 支持复杂的条件表达式
### 2.3 用户管理实体
#### 实体7: 用户 (User)
#### 实体6: 用户 (User)
**实体说明**: 系统用户信息
**主要属性**:
- username (用户名) - 主标识符
@ -137,7 +121,7 @@
- 角色类型: admin, operator, viewer
- 密码必须加密存储
#### 实体8: 操作审计 (AuditLog)
#### 实体7: 操作审计 (AuditLog)
**实体说明**: 用户操作审计记录
**主要属性**:
- username (用户名)
@ -154,23 +138,13 @@
### 2.4 扩展实体
#### 实体9: 修复模板 (RepairTemplate)
#### 实体8: 修复模板 (RepairTemplate)
**实体说明**: 预定义的修复脚本模板
**主要属性**:
- template_name (模板名称)
- fault_type (适用故障类型)
- script_content (脚本内容)
- risk_level (风险级别)
- parameters (参数定义)
#### 实体10: 通知配置 (NotificationConfig)
**实体说明**: 告警通知配置
**主要属性**:
- config_name (配置名称)
- notification_type (通知类型)
- trigger_conditions (触发条件)
- recipients (接收人)
- template_content (通知模板)
## 3. 实体关系设计
@ -188,11 +162,11 @@
- **外键**: AuditLog.user_id → User.id
- **约束**: 设置为NULL用户删除后保留审计记录
#### 关系3: 故障记录 ↔ 系统日志 (N:M)
- **关系类型**: 对多
- **关系说明**: 一个故障可能关联多条日志,一条日志可能关联多个故障
- **实现方式**: 通过JSON字段source_logs实现
- **备注**: 考虑性能使用JSON而非关联表
#### 关系3: 故障记录 ↔ 系统日志 (1:N)
- **关系类型**: 对多
- **关系说明**: 一个故障可能关联多条日志
- **外键**: SystemLog.fault_id → FaultRecord.fault_id
- **约束**: 可选关联(日志可能不关联任何故障)
#### 关系4: 集群状态 ↔ 故障记录 (1:N)
- **关系类型**: 一对多
@ -208,9 +182,9 @@
- **实现方式**: 通过script_path字段关联
- **备注**: 不强制外键约束
#### 关系6: 告警规则 ↔ 故障记录 (1:N)
#### 关系6: 应用配置 ↔ 故障记录 (1:N)
- **关系类型**: 一对多(弱关系)
- **关系说明**: 故障可能由某个告警规则触发
- **关系说明**: 故障可能由告警规则类型的配置触发
- **实现方式**: 通过业务逻辑关联
- **备注**: 不直接建立外键关系
@ -220,7 +194,7 @@
#### 步骤1: 创建实体
1. 打开PowerDesigner新建概念数据模型
2. 使用Entity工具创建10个核心实体
2. 使用Entity工具创建8个核心实体
3. 为每个实体添加标识符和属性
4. 设置属性的数据类型和约束
@ -267,43 +241,30 @@
### 5.1 图形布局
```
核心业务区域(左:
核心业务区域(左:
┌─────────────────────────────────┐
│ FaultRecord ←→ ExecutionLog │
│ ↕ │
│ SystemLog ←→ ClusterStatus │
└─────────────────────────────────┘
配置管理区域(右上:
管理区域(右侧:
┌─────────────────────────────────┐
SystemConfig
AppConfiguration
│ ↕ │
│ AlertRule │
└─────────────────────────────────┘
用户管理区域(左下):
┌─────────────────────────────────┐
│ User ←→ AuditLog │
└─────────────────────────────────┘
扩展功能区域(右下):
┌─────────────────────────────────┐
│ RepairTemplate │
│ ↕ │
NotificationConfig
│ RepairTemplate │
└─────────────────────────────────┘
```
### 5.2 颜色编码建议
- **核心实体**: 蓝色系(#E3F2FD
- **配置实体**: 绿色系(#E8F5E8
- **用户实体**: 橙色系(#FFF3E0
- **扩展实体**: 紫色系(#F3E5F5
- **管理实体**: 绿色系(#E8F5E8
### 5.3 关系线样式
- **强关系**: 实线,带箭头
- **弱关系**: 虚线,带箭头
- **多对多**: 双向箭头
- **一对多**: 单向箭头
## 6. 数据完整性设计

File diff suppressed because it is too large Load Diff

@ -0,0 +1,135 @@
@startuml
title 故障检测系统 ER 图
skinparam shadowing false
skinparam class {
BackgroundColor #FFFDF7
BorderColor #888888
}
hide methods
' 核心业务表
class fault_records << (T,#AEE) table >> {
+ id : BIGINT {PK}
+ fault_id : VARCHAR(32) {UK}
fault_type : VARCHAR(50)
fault_level : ENUM
title : VARCHAR(200)
status : ENUM
assignee : VARCHAR(50)
reporter : VARCHAR(50)
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class exec_logs << (T,#AEE) table >> {
+ id : BIGINT {PK}
+ exec_id : VARCHAR(32) {UK}
fault_id : VARCHAR(32) {FK}
command_type : VARCHAR(50)
execution_status : ENUM
start_time : TIMESTAMP
end_time : TIMESTAMP
operator : VARCHAR(50)
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class cluster_status << (T,#AEE) table >> {
+ id : BIGINT {PK}
+ node_id : VARCHAR(50) {UK}
node_role : ENUM
node_status : ENUM
cpu_usage : DECIMAL(5,2)
memory_usage : DECIMAL(5,2)
disk_usage : DECIMAL(5,2)
last_heartbeat : TIMESTAMP
health_score : INT
alerts_count : INT
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class system_logs << (T,#AEE) table >> {
+ id : BIGINT {PK}
+ log_id : VARCHAR(32) {UK}
timestamp : TIMESTAMP
host : VARCHAR(100)
ip_address : VARCHAR(15)
service : VARCHAR(50)
log_level : ENUM
processed : BOOLEAN
created_at : TIMESTAMP
}
' 配置管理表
class system_configs << (T,#CEA) table >> {
+ id : BIGINT {PK}
+ config_key : VARCHAR(100) {UK}
config_type : VARCHAR(20)
category : VARCHAR(50)
is_active : BOOLEAN
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class alert_rules << (T,#CEA) table >> {
+ id : BIGINT {PK}
rule_name : VARCHAR(100)
rule_type : VARCHAR(50)
metric_name : VARCHAR(100)
severity : ENUM
is_enabled : BOOLEAN
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
' 用户管理表
class users << (T,#EAC) table >> {
+ id : BIGINT {PK}
username : VARCHAR(50) {UK}
email : VARCHAR(100) {UK}
role : ENUM
is_active : BOOLEAN
last_login : TIMESTAMP
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class audit_logs << (T,#EAC) table >> {
+ id : BIGINT {PK}
user_id : BIGINT {FK}
username : VARCHAR(50)
action : VARCHAR(100)
resource_type : VARCHAR(50)
resource_id : VARCHAR(100)
ip_address : VARCHAR(15)
created_at : TIMESTAMP
}
' 扩展表
class repair_templates << (T,#DFE) table >> {
+ id : BIGINT {PK}
template_name : VARCHAR(100)
fault_type : VARCHAR(50)
risk_level : ENUM
is_active : BOOLEAN
created_by : VARCHAR(50)
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
class notification_configs << (T,#DFE) table >> {
+ id : BIGINT {PK}
config_name : VARCHAR(100)
notification_type : ENUM
is_enabled : BOOLEAN
created_at : TIMESTAMP
updated_at : TIMESTAMP
}
' 关系(基于外键约束与业务关联)
fault_records "1" -- "*" exec_logs : fault_id -> fault_records.fault_id
users "1" -- "*" audit_logs : id -> audit_logs.user_id
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

@ -6,7 +6,7 @@
本文档详细描述了故障检测系统数据库中所有表、字段、索引、约束等数据库对象的定义和说明为PowerDesigner建模和系统开发提供参考。
### 1.2 版本信息
- **版本**: v1.0
- **版本**: v1.1
- **创建日期**: 2025年
- **数据库**: MySQL 8.0+
- **字符集**: utf8mb4
@ -19,7 +19,7 @@
**表说明**: 存储系统检测到的所有故障信息,是系统的核心业务表
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 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离线/磁盘不足等 |
@ -27,15 +27,14 @@
| 5 | title | VARCHAR | 200 | - | - | NOT NULL | - | 故障标题 | 简短描述 |
| 6 | description | TEXT | - | - | - | NULL | - | 故障详细描述 | 详细说明 |
| 7 | affected_nodes | JSON | - | - | - | NULL | - | 受影响的节点列表 | JSON数组格式 |
| 8 | source_logs | JSON | - | - | - | NULL | - | 相关日志ID列表 | 关联system_logs表 |
| 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 | - | 解决时间 | 故障解决时间 |
| 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 | - | 解决时间 | 故障解决时间 |
**索引信息**:
- PRIMARY KEY: id
@ -50,7 +49,7 @@
**表说明**: 记录自动修复脚本的执行过程和结果
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | exec_id | VARCHAR | 32 | - | - | NOT NULL | - | 执行唯一标识 | 格式: EXE-YYYYMMDD-XXXX |
| 3 | fault_id | VARCHAR | 32 | - | - | NOT NULL | - | 关联故障ID | 外键关联fault_records |
@ -85,7 +84,7 @@
**表说明**: 记录Hadoop集群各节点的实时状态信息
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | node_id | VARCHAR | 50 | - | - | NOT NULL | - | 节点标识 | 唯一标识节点 |
| 3 | node_name | VARCHAR | 100 | - | - | NOT NULL | - | 节点名称 | 节点的友好名称 |
@ -117,27 +116,29 @@
**表说明**: 存储从Flume采集的原始日志数据
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | log_id | VARCHAR | 32 | - | - | NOT NULL | - | 日志唯一标识 | 格式: LOG-YYYYMMDD-XXXX |
| 3 | timestamp | TIMESTAMP | - | - | - | NOT NULL | - | 日志时间戳 | 日志产生的时间 |
| 4 | host | VARCHAR | 100 | - | - | NOT NULL | - | 主机名 | 产生日志的主机 |
| 5 | ip_address | VARCHAR | 15 | - | - | NOT NULL | - | IP地址 | 主机IP地址 |
| 6 | service | VARCHAR | 50 | - | - | NOT NULL | - | 服务名 | HDFS/YARN/MapReduce等 |
| 7 | component | VARCHAR | 50 | - | - | NULL | - | 组件名 | 具体的组件名称 |
| 8 | log_level | ENUM | - | - | - | NOT NULL | - | 日志级别 | DEBUG/INFO/WARN/ERROR/FATAL |
| 9 | thread | VARCHAR | 100 | - | - | NULL | - | 线程名 | 产生日志的线程 |
| 10 | logger | VARCHAR | 200 | - | - | NULL | - | Logger名称 | 日志记录器名称 |
| 11 | message | LONGTEXT | - | - | - | NOT NULL | - | 日志消息 | 日志的主要内容 |
| 12 | exception | LONGTEXT | - | - | - | NULL | - | 异常堆栈 | 异常的堆栈信息 |
| 13 | raw_log | LONGTEXT | - | - | - | NULL | - | 原始日志内容 | 未处理的原始日志 |
| 14 | tags | JSON | - | - | - | NULL | - | 标签信息 | 日志的标签和元数据 |
| 15 | processed | BOOLEAN | - | - | - | NOT NULL | FALSE | 是否已处理 | 标记是否已被分析处理 |
| 16 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 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地址 |
| 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 | 创建时间 | 记录创建时间 |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_log_id (log_id)
- INDEX: idx_fault_id (fault_id)
- INDEX: idx_timestamp (timestamp)
- INDEX: idx_host (host)
- INDEX: idx_service (service)
@ -145,60 +146,37 @@
- INDEX: idx_processed (processed)
- INDEX: idx_timestamp_level (timestamp, log_level) - 复合索引
**外键约束**:
- fk_system_logs_fault_id: fault_id → fault_records.fault_id
### 2.2 配置管理表
#### 表名: system_configs (系统配置表)
**表说明**: 存储系统配置参数
#### 表名: app_configurations (应用配置表)
**表说明**: 存储系统各类配置信息,包括系统参数、告警规则和通知设置
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | config_key | VARCHAR | 100 | - | - | NOT NULL | - | 配置键 | 配置项的唯一标识 |
| 3 | config_value | TEXT | - | - | - | NULL | - | 配置值 | 配置项的值 |
| 4 | config_type | VARCHAR | 20 | - | - | NOT NULL | 'string' | 配置类型 | string/int/boolean/json |
| 5 | category | VARCHAR | 50 | - | - | NOT NULL | - | 配置分类 | 配置项的分类 |
| 6 | description | VARCHAR | 500 | - | - | NULL | - | 配置描述 | 配置项的说明 |
| 7 | is_active | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否启用 | 配置是否生效 |
| 8 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 9 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
| 2 | config_type | VARCHAR | 50 | - | - | NOT NULL | - | 配置类型 | system/alert/notification |
| 3 | config_key | VARCHAR | 100 | - | - | NOT NULL | - | 配置键 | 配置的唯一标识 |
| 4 | config_value | JSON | - | - | - | NULL | - | 配置值 | JSON格式的配置内容 |
| 5 | description | VARCHAR | 500 | - | - | NULL | - | 配置描述 | 配置项的说明 |
| 6 | is_active | 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_key (config_key)
- INDEX: idx_category (category)
- UNIQUE KEY: uk_config_type_key (config_type, config_key)
- INDEX: idx_is_active (is_active)
#### 表名: alert_rules (告警规则表)
**表说明**: 定义各种告警规则和阈值
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | rule_name | VARCHAR | 100 | - | - | NOT NULL | - | 规则名称 | 告警规则的名称 |
| 3 | rule_type | VARCHAR | 50 | - | - | NOT NULL | - | 规则类型 | threshold/pattern/anomaly |
| 4 | metric_name | VARCHAR | 100 | - | - | NOT NULL | - | 监控指标名 | 监控的指标名称 |
| 5 | condition_expr | TEXT | - | - | - | NOT NULL | - | 条件表达式 | 告警触发条件 |
| 6 | threshold_value | DECIMAL | 10 | 2 | - | NULL | - | 阈值 | 告警阈值 |
| 7 | severity | ENUM | - | - | - | NOT NULL | 'medium' | 严重级别 | low/medium/high/critical |
| 8 | description | TEXT | - | - | - | NULL | - | 规则描述 | 规则的详细说明 |
| 9 | is_enabled | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否启用 | 规则是否生效 |
| 10 | created_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | 记录创建时间 |
| 11 | updated_at | TIMESTAMP | - | - | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 | 记录更新时间 |
**索引信息**:
- PRIMARY KEY: id
- INDEX: idx_rule_type (rule_type)
- INDEX: idx_metric_name (metric_name)
- INDEX: idx_severity (severity)
- INDEX: idx_is_enabled (is_enabled)
### 2.3 用户管理表
#### 表名: users (用户表)
**表说明**: 系统用户信息
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 登录用户名 |
| 3 | email | VARCHAR | 100 | - | - | NOT NULL | - | 邮箱 | 用户邮箱地址 |
@ -223,7 +201,7 @@
**表说明**: 记录用户操作审计日志
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|------|--------|----------|------|------|----------|----------|--------|----------|------|
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | AUTO_INCREMENT | 主键ID | 自增长 |
| 2 | user_id | BIGINT | - | - | - | NULL | - | 用户ID | 关联users表 |
| 3 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 操作用户名 |
@ -246,6 +224,29 @@
**外键约束**:
- fk_audit_logs_user_id: user_id → users.id
### 2.4 扩展业务表
#### 表名: repair_templates (修复模板表)
**表说明**: 存储常见故障的修复模板
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 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 | - | 脚本内容 | 修复脚本或命令 |
| 6 | description | TEXT | - | - | - | NULL | - | 模板描述 | 模板的功能说明 |
| 7 | version | VARCHAR | 20 | - | - | NOT NULL | '1.0' | 版本号 | 模板的版本 |
| 8 | author | VARCHAR | 50 | - | - | 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_template_name (template_name)
- INDEX: idx_fault_type (fault_type)
## 3. 枚举值定义
### 3.1 故障级别 (fault_level)
@ -305,17 +306,7 @@
]
```
### 4.2 source_logs (相关日志)
```json
[
{
"log_id": "LOG-20241201-0001",
"relevance_score": 0.95
}
]
```
### 4.3 target_nodes (目标节点)
### 4.2 target_nodes (目标节点)
```json
[
{
@ -326,7 +317,7 @@
]
```
### 4.4 tags (日志标签)
### 4.3 tags (日志标签)
```json
{
"environment": "production",
@ -336,6 +327,35 @@
}
```
### 4.4 app_configurations.config_value (配置值)
**config_type: 'system'**
```json
{
"max_concurrent_repairs": 5,
"log_retention_days": 30
}
```
**config_type: 'alert'**
```json
{
"metric": "cpu_usage",
"threshold": 90,
"operator": ">",
"duration_sec": 300,
"severity": "high"
}
```
**config_type: 'notification'**
```json
{
"channel": "email",
"recipients": ["admin@example.com"],
"template_id": "fault_notification_template"
}
```
## 5. 视图定义
### 5.1 v_fault_statistics (故障统计视图)
@ -370,12 +390,14 @@
- exec_logs.exec_id
- cluster_status.node_id
- system_logs.log_id
- system_configs.config_key
- app_configurations.config_type, config_key
- users.username
- users.email
- repair_templates.template_name
### 8.3 外键约束
- exec_logs.fault_id → fault_records.fault_id
- system_logs.fault_id → fault_records.fault_id
- audit_logs.user_id → users.id
### 8.4 检查约束

@ -1,8 +1,8 @@
-- =====================================================
-- 故障检测系统数据库建表脚本
-- 故障检测系统数据库建表脚本 (简化版)
-- 数据库: MySQL 8.0+
-- 字符集: utf8mb4
-- 创建时间: 2024
-- 创建时间: 2025
-- =====================================================
-- 创建数据库
@ -26,7 +26,6 @@ CREATE TABLE fault_records (
title VARCHAR(200) NOT NULL COMMENT '故障标题',
description TEXT COMMENT '故障详细描述',
affected_nodes JSON COMMENT '受影响的节点列表',
source_logs JSON COMMENT '相关日志ID列表',
root_cause TEXT COMMENT '根本原因分析',
repair_suggestion TEXT COMMENT '修复建议',
status ENUM('detected', 'analyzing', 'repairing', 'resolved', 'failed') NOT NULL DEFAULT 'detected' COMMENT '状态',
@ -39,10 +38,8 @@ CREATE TABLE fault_records (
PRIMARY KEY (id),
UNIQUE KEY uk_fault_id (fault_id),
KEY idx_fault_type (fault_type),
KEY idx_fault_level (fault_level),
KEY idx_status (status),
KEY idx_created_at (created_at),
KEY idx_assignee (assignee)
KEY idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='故障记录表';
-- 1.2 执行日志表
@ -70,9 +67,7 @@ CREATE TABLE exec_logs (
PRIMARY KEY (id),
UNIQUE KEY uk_exec_id (exec_id),
KEY idx_fault_id (fault_id),
KEY idx_execution_status (execution_status),
KEY idx_start_time (start_time),
KEY idx_operator (operator)
KEY idx_execution_status (execution_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='执行日志表';
-- 1.3 集群状态表
@ -87,22 +82,15 @@ CREATE TABLE cluster_status (
cpu_usage DECIMAL(5,2) COMMENT 'CPU使用率(%)',
memory_usage DECIMAL(5,2) COMMENT '内存使用率(%)',
disk_usage DECIMAL(5,2) COMMENT '磁盘使用率(%)',
network_io BIGINT COMMENT '网络IO(bytes/s)',
disk_io BIGINT COMMENT '磁盘IO(bytes/s)',
load_average DECIMAL(5,2) COMMENT '系统负载',
uptime BIGINT COMMENT '运行时间(秒)',
last_heartbeat TIMESTAMP COMMENT '最后心跳时间',
health_score INT DEFAULT 100 COMMENT '健康评分(0-100)',
alerts_count INT NOT NULL DEFAULT 0 COMMENT '告警数量',
last_heartbeat TIMESTAMP 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_node_id (node_id),
KEY idx_node_role (node_role),
KEY idx_node_status (node_status),
KEY idx_last_heartbeat (last_heartbeat),
KEY idx_health_score (health_score)
KEY idx_last_heartbeat (last_heartbeat)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='集群状态表';
-- 1.4 系统日志表
@ -110,81 +98,46 @@ DROP TABLE IF EXISTS system_logs;
CREATE TABLE system_logs (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
log_id VARCHAR(32) NOT NULL COMMENT '日志唯一标识',
fault_id VARCHAR(32) COMMENT '关联故障ID',
timestamp TIMESTAMP NOT NULL COMMENT '日志时间戳',
host VARCHAR(100) NOT NULL COMMENT '主机名',
ip_address VARCHAR(15) NOT NULL COMMENT 'IP地址',
service VARCHAR(50) NOT NULL COMMENT '服务名',
component VARCHAR(50) COMMENT '组件名',
log_level ENUM('DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL') NOT NULL COMMENT '日志级别',
thread VARCHAR(100) COMMENT '线程名',
logger VARCHAR(200) COMMENT 'Logger名称',
message LONGTEXT NOT NULL COMMENT '日志消息',
exception LONGTEXT COMMENT '异常堆栈',
raw_log LONGTEXT COMMENT '原始日志内容',
tags JSON COMMENT '标签信息',
processed BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否已处理',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_log_id (log_id),
KEY idx_fault_id (fault_id),
KEY idx_timestamp (timestamp),
KEY idx_host (host),
KEY idx_service (service),
KEY idx_log_level (log_level),
KEY idx_processed (processed),
KEY idx_timestamp_level (timestamp, log_level)
KEY idx_log_level (log_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统日志表';
-- =====================================================
-- 2. 配置管理
-- 2. 配置管理与用户表
-- =====================================================
-- 2.1 系统配置表
DROP TABLE IF EXISTS system_configs;
CREATE TABLE system_configs (
-- 2.1 应用统一配置表
DROP TABLE IF EXISTS app_configurations;
CREATE TABLE app_configurations (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
config_key VARCHAR(100) NOT NULL COMMENT '配置键',
config_value TEXT COMMENT '配置值',
config_type VARCHAR(20) NOT NULL DEFAULT 'string' COMMENT '配置类型',
category VARCHAR(50) NOT NULL COMMENT '配置分类',
config_type ENUM('system', 'alert_rule', 'notification', 'llm') NOT NULL COMMENT '配置类型',
config_key VARCHAR(100) NOT NULL COMMENT '配置键, 如规则名、系统参数名',
config_value JSON NOT NULL COMMENT '配置值 (JSON格式)',
description VARCHAR(500) COMMENT '配置描述',
is_active BOOLEAN NOT NULL DEFAULT TRUE 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_config_key (config_key),
KEY idx_category (category),
KEY idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
-- 2.2 告警规则表
DROP TABLE IF EXISTS alert_rules;
CREATE TABLE alert_rules (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
rule_type VARCHAR(50) NOT NULL COMMENT '规则类型',
metric_name VARCHAR(100) NOT NULL COMMENT '监控指标名',
condition_expr TEXT NOT NULL COMMENT '条件表达式',
threshold_value DECIMAL(10,2) COMMENT '阈值',
severity ENUM('low', 'medium', 'high', 'critical') NOT NULL DEFAULT 'medium' COMMENT '严重级别',
description TEXT COMMENT '规则描述',
is_enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
KEY idx_rule_type (rule_type),
KEY idx_metric_name (metric_name),
KEY idx_severity (severity),
UNIQUE KEY uk_config_type_key (config_type, config_key),
KEY idx_is_enabled (is_enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='告警规则';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用统一配置表';
-- =====================================================
-- 3. 用户管理表
-- =====================================================
-- 3.1 用户表
-- 2.2 用户表
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
@ -193,8 +146,6 @@ CREATE TABLE users (
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希',
full_name VARCHAR(100) NOT NULL COMMENT '姓名',
role ENUM('admin', 'operator', 'viewer') NOT NULL DEFAULT 'operator' COMMENT '角色',
department VARCHAR(100) COMMENT '部门',
phone VARCHAR(20) COMMENT '电话',
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否激活',
last_login TIMESTAMP NULL COMMENT '最后登录时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@ -202,12 +153,10 @@ CREATE TABLE users (
PRIMARY KEY (id),
UNIQUE KEY uk_username (username),
UNIQUE KEY uk_email (email),
KEY idx_role (role),
KEY idx_is_active (is_active)
UNIQUE KEY uk_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 3.2 操作审计表
-- 2.3 操作审计表
DROP TABLE IF EXISTS audit_logs;
CREATE TABLE audit_logs (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
@ -217,23 +166,21 @@ CREATE TABLE audit_logs (
resource_type VARCHAR(50) NOT NULL COMMENT '资源类型',
resource_id VARCHAR(100) COMMENT '资源ID',
ip_address VARCHAR(15) NOT NULL COMMENT 'IP地址',
user_agent TEXT COMMENT '用户代理',
request_data JSON COMMENT '请求数据',
response_status INT COMMENT '响应状态码',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_user_id (user_id),
KEY idx_username (username),
KEY idx_action (action),
KEY idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作审计表';
-- =====================================================
-- 4. 扩展表
-- 3. 扩展表
-- =====================================================
-- 4.1 修复脚本模板表
-- 3.1 修复脚本模板表
DROP TABLE IF EXISTS repair_templates;
CREATE TABLE repair_templates (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
@ -243,37 +190,17 @@ CREATE TABLE repair_templates (
risk_level ENUM('low', 'medium', 'high') NOT NULL DEFAULT 'medium' COMMENT '风险级别',
description TEXT COMMENT '模板描述',
parameters JSON COMMENT '参数定义',
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
created_by VARCHAR(50) COMMENT '创建人',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
KEY idx_fault_type (fault_type),
KEY idx_risk_level (risk_level),
KEY idx_is_active (is_active)
UNIQUE KEY uk_template_name (template_name),
KEY idx_fault_type (fault_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='修复脚本模板表';
-- 4.2 通知配置表
DROP TABLE IF EXISTS notification_configs;
CREATE TABLE notification_configs (
id BIGINT AUTO_INCREMENT COMMENT '主键ID',
config_name VARCHAR(100) NOT NULL COMMENT '配置名称',
notification_type ENUM('email', 'sms', 'webhook', 'dingtalk') NOT NULL COMMENT '通知类型',
trigger_conditions JSON NOT NULL COMMENT '触发条件',
recipients JSON NOT NULL COMMENT '接收人列表',
template_content TEXT COMMENT '通知模板',
is_enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
KEY idx_notification_type (notification_type),
KEY idx_is_enabled (is_enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知配置表';
-- =====================================================
-- 5. 外键约束
-- 4. 外键约束
-- =====================================================
-- 执行日志表关联故障记录表
@ -282,6 +209,12 @@ ADD CONSTRAINT fk_exec_logs_fault_id
FOREIGN KEY (fault_id) REFERENCES fault_records(fault_id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 系统日志表关联故障记录表
ALTER TABLE system_logs
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 audit_logs
ADD CONSTRAINT fk_audit_logs_user_id
@ -289,187 +222,37 @@ FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE SET NULL ON UPDATE CASCADE;
-- =====================================================
-- 6. 初始化数据
-- 5. 初始化数据
-- =====================================================
-- 插入默认系统配置
INSERT INTO system_configs (config_key, config_value, config_type, category, description) VALUES
('system.name', '故障检测系统', 'string', 'system', '系统名称'),
('log.retention.days', '90', 'int', 'log', '日志保留天数'),
('alert.email.enabled', 'true', 'boolean', 'alert', '是否启用邮件告警'),
('repair.auto.enabled', 'false', 'boolean', 'repair', '是否启用自动修复'),
('cluster.check.interval', '300', 'int', 'cluster', '集群检查间隔(秒)'),
('llm.api.timeout', '30', 'int', 'llm', 'LLM API超时时间(秒)'),
('repair.max.concurrent', '3', 'int', 'repair', '最大并发修复数量');
INSERT INTO app_configurations (config_type, config_key, config_value, description, is_enabled) VALUES
('system', 'system.name', '{"value": "故障检测系统"}', '系统名称', TRUE),
('system', 'log.retention.days', '{"value": 90}', '日志保留天数', TRUE),
('system', 'repair.auto.enabled', '{"value": false}', '是否启用自动修复', TRUE),
('llm', 'api.timeout', '{"value": 30}', 'LLM API超时时间(秒)', TRUE);
-- 插入默认告警规则
INSERT INTO alert_rules (rule_name, rule_type, metric_name, condition_expr, threshold_value, severity, description, is_enabled) VALUES
('CPU使用率过高', 'threshold', 'cpu_usage', 'cpu_usage > threshold_value', 85.00, 'high', 'CPU使用率超过85%时触发告警', TRUE),
('内存使用率过高', 'threshold', 'memory_usage', 'memory_usage > threshold_value', 90.00, 'high', '内存使用率超过90%时触发告警', TRUE),
('磁盘使用率过高', 'threshold', 'disk_usage', 'disk_usage > threshold_value', 85.00, 'medium', '磁盘使用率超过85%时触发告警', TRUE),
('节点离线', 'pattern', 'node_status', 'node_status = "offline"', NULL, 'critical', '节点离线时触发告警', TRUE),
('DataNode心跳异常', 'pattern', 'last_heartbeat', 'TIMESTAMPDIFF(MINUTE, last_heartbeat, NOW()) > 5', NULL, 'high', 'DataNode超过5分钟无心跳时触发告警', TRUE);
INSERT INTO app_configurations (config_type, config_key, config_value, description, is_enabled) VALUES
('alert_rule', 'CPU使用率过高', '{"metric": "cpu_usage", "condition": ">", "threshold": 85, "severity": "high"}', 'CPU使用率超过85%时触发告警', TRUE),
('alert_rule', '内存使用率过高', '{"metric": "memory_usage", "condition": ">", "threshold": 90, "severity": "high"}', '内存使用率超过90%时触发告警', TRUE),
('alert_rule', '节点离线', '{"metric": "node_status", "condition": "=", "value": "offline", "severity": "critical"}', '节点离线时触发告警', TRUE);
-- 插入默认通知配置
INSERT INTO app_configurations (config_type, config_key, config_value, description, is_enabled) VALUES
('notification', '默认邮件通知', '{"type": "email", "triggers": ["high", "critical"], "recipients": ["admin@example.com"]}', '向管理员发送高危和严重故障的邮件通知', TRUE);
-- 插入默认管理员用户 (密码: admin123)
INSERT INTO users (username, email, password_hash, full_name, role, department, is_active) VALUES
('admin', 'admin@example.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj/RK.s5uDjS', '系统管理员', 'admin', 'IT部门', TRUE),
('operator', 'operator@example.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj/RK.s5uDjS', '运维工程师', 'operator', 'IT部门', TRUE);
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 repair_templates (template_name, fault_type, script_content, risk_level, description, parameters) VALUES
('重启DataNode服务', 'DataNode离线', 'sudo systemctl restart hadoop-hdfs-datanode', 'medium', '重启DataNode服务以恢复连接', '{"node_id": "string"}'),
('清理临时文件', '磁盘空间不足', 'sudo rm -rf /tmp/hadoop-* && sudo rm -rf /var/log/hadoop/*.log.* && sudo hdfs dfsadmin -refreshNodes', 'low', '清理Hadoop临时文件和旧日志', '{"node_id": "string", "cleanup_path": "string"}'),
('重启NameNode服务', 'NameNode异常', 'sudo systemctl stop hadoop-hdfs-namenode && sleep 10 && sudo systemctl start hadoop-hdfs-namenode', 'high', '重启NameNode服务高风险操作', '{"backup_required": "boolean"}');
-- =====================================================
-- 7. 视图定义
-- =====================================================
-- 故障统计视图
CREATE OR REPLACE VIEW v_fault_statistics AS
SELECT
DATE(created_at) as fault_date,
fault_level,
fault_type,
status,
COUNT(*) as fault_count,
AVG(CASE WHEN resolved_at IS NOT NULL
THEN TIMESTAMPDIFF(MINUTE, created_at, resolved_at)
ELSE NULL END) as avg_resolution_time_minutes
FROM fault_records
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY DATE(created_at), fault_level, fault_type, status;
-- 集群健康度视图
CREATE OR REPLACE VIEW v_cluster_health AS
SELECT
node_role,
COUNT(*) as total_nodes,
SUM(CASE WHEN node_status = 'online' THEN 1 ELSE 0 END) as online_nodes,
AVG(cpu_usage) as avg_cpu_usage,
AVG(memory_usage) as avg_memory_usage,
AVG(disk_usage) as avg_disk_usage,
AVG(health_score) as avg_health_score
FROM cluster_status
GROUP BY node_role;
-- 执行成功率视图
CREATE OR REPLACE VIEW v_execution_success_rate AS
SELECT
DATE(created_at) as exec_date,
command_type,
COUNT(*) as total_executions,
SUM(CASE WHEN execution_status = 'success' THEN 1 ELSE 0 END) as successful_executions,
ROUND(SUM(CASE WHEN execution_status = 'success' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) as success_rate
FROM exec_logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY DATE(created_at), command_type;
-- =====================================================
-- 8. 存储过程
-- =====================================================
DELIMITER //
-- 创建故障记录的存储过程
CREATE PROCEDURE sp_create_fault_record(
IN p_fault_type VARCHAR(50),
IN p_fault_level ENUM('low', 'medium', 'high', 'critical'),
IN p_title VARCHAR(200),
IN p_description TEXT,
IN p_affected_nodes JSON,
IN p_source_logs JSON,
OUT p_fault_id VARCHAR(32)
)
BEGIN
DECLARE v_fault_id VARCHAR(32);
-- 生成故障ID
SET v_fault_id = CONCAT('FLT-', DATE_FORMAT(NOW(), '%Y%m%d'), '-', LPAD(FLOOR(RAND() * 10000), 4, '0'));
-- 插入故障记录
INSERT INTO fault_records (
fault_id, fault_type, fault_level, title, description,
affected_nodes, source_logs, status, reporter
) VALUES (
v_fault_id, p_fault_type, p_fault_level, p_title, p_description,
p_affected_nodes, p_source_logs, 'detected', 'system'
);
SET p_fault_id = v_fault_id;
END //
-- 更新集群状态的存储过程
CREATE PROCEDURE sp_update_cluster_status(
IN p_node_id VARCHAR(50),
IN p_node_name VARCHAR(100),
IN p_ip_address VARCHAR(15),
IN p_node_role ENUM('NameNode', 'DataNode', 'ResourceManager', 'NodeManager'),
IN p_node_status ENUM('online', 'offline', 'maintenance', 'unknown'),
IN p_cpu_usage DECIMAL(5,2),
IN p_memory_usage DECIMAL(5,2),
IN p_disk_usage DECIMAL(5,2),
IN p_health_score INT
)
BEGIN
INSERT INTO cluster_status (
node_id, node_name, ip_address, node_role, node_status,
cpu_usage, memory_usage, disk_usage, health_score, last_heartbeat
) VALUES (
p_node_id, p_node_name, p_ip_address, p_node_role, p_node_status,
p_cpu_usage, p_memory_usage, p_disk_usage, p_health_score, NOW()
)
ON DUPLICATE KEY UPDATE
node_name = p_node_name,
ip_address = p_ip_address,
node_role = p_node_role,
node_status = p_node_status,
cpu_usage = p_cpu_usage,
memory_usage = p_memory_usage,
disk_usage = p_disk_usage,
health_score = p_health_score,
last_heartbeat = NOW(),
updated_at = NOW();
END //
DELIMITER ;
-- =====================================================
-- 9. 触发器
-- =====================================================
DELIMITER //
-- 故障记录状态变更触发器
CREATE TRIGGER tr_fault_status_change
AFTER UPDATE ON fault_records
FOR EACH ROW
BEGIN
-- 当故障状态变为已解决时,记录解决时间
IF NEW.status = 'resolved' AND OLD.status != 'resolved' THEN
UPDATE fault_records
SET resolved_at = NOW()
WHERE id = NEW.id;
END IF;
-- 记录审计日志
INSERT INTO audit_logs (
username, action, resource_type, resource_id,
ip_address, request_data
) VALUES (
COALESCE(NEW.assignee, 'system'),
'UPDATE_FAULT_STATUS',
'fault_record',
NEW.fault_id,
'127.0.0.1',
JSON_OBJECT('old_status', OLD.status, 'new_status', NEW.status)
);
END //
DELIMITER ;
('清理临时文件', '磁盘空间不足', 'sudo rm -rf /tmp/hadoop-*', 'low', '清理Hadoop临时文件', '{"node_id": "string", "path": "string"}');
-- =====================================================
-- 脚本执行完成
-- =====================================================
SELECT 'Database schema created successfully!' as message;
SELECT 'Database schema simplified and created successfully!' as message;

@ -51,12 +51,11 @@ 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 | - | 故障唯一标识 |
| fault_type | VARCHAR | 50 | NOT NULL | - | 故障类型(DataNode离线/磁盘不足等) |
| fault_type | VARCHAR | 50 | NOT NULL | - | 故障类型 |
| fault_level | ENUM | - | NOT NULL | 'medium' | 故障级别(low/medium/high/critical) |
| title | VARCHAR | 200 | NOT NULL | - | 故障标题 |
| description | TEXT | - | NULL | - | 故障详细描述 |
| affected_nodes | JSON | - | NULL | - | 受影响的节点列表 |
| source_logs | JSON | - | NULL | - | 相关日志ID列表 |
| root_cause | TEXT | - | NULL | - | 根本原因分析 |
| repair_suggestion | TEXT | - | NULL | - | 修复建议 |
| status | ENUM | - | NOT NULL | 'detected' | 状态(detected/analyzing/repairing/resolved/failed) |
@ -70,10 +69,8 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- PRIMARY KEY (id)
- UNIQUE KEY uk_fault_id (fault_id)
- KEY idx_fault_type (fault_type)
- KEY idx_fault_level (fault_level)
- KEY idx_status (status)
- KEY idx_created_at (created_at)
- KEY idx_assignee (assignee)
#### 2.1.2 执行日志表 (exec_logs)
记录自动修复脚本的执行过程和结果
@ -83,7 +80,7 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| exec_id | VARCHAR | 32 | NOT NULL | - | 执行唯一标识 |
| fault_id | VARCHAR | 32 | NOT NULL | - | 关联故障ID |
| command_type | VARCHAR | 50 | NOT NULL | - | 命令类型(restart/repair/check等) |
| command_type | VARCHAR | 50 | NOT NULL | - | 命令类型 |
| script_path | VARCHAR | 255 | NULL | - | 脚本路径 |
| command_content | TEXT | - | NOT NULL | - | 执行的命令内容 |
| target_nodes | JSON | - | NULL | - | 目标执行节点 |
@ -104,8 +101,6 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- UNIQUE KEY uk_exec_id (exec_id)
- KEY idx_fault_id (fault_id)
- KEY idx_execution_status (execution_status)
- KEY idx_start_time (start_time)
- KEY idx_operator (operator)
#### 2.1.3 集群状态表 (cluster_status)
记录Hadoop集群各节点的实时状态信息
@ -121,23 +116,16 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| cpu_usage | DECIMAL | 5,2 | NULL | - | CPU使用率(%) |
| memory_usage | DECIMAL | 5,2 | NULL | - | 内存使用率(%) |
| disk_usage | DECIMAL | 5,2 | NULL | - | 磁盘使用率(%) |
| network_io | BIGINT | - | NULL | - | 网络IO(bytes/s) |
| disk_io | BIGINT | - | NULL | - | 磁盘IO(bytes/s) |
| load_average | DECIMAL | 5,2 | NULL | - | 系统负载 |
| uptime | BIGINT | - | NULL | - | 运行时间(秒) |
| last_heartbeat | TIMESTAMP | - | NULL | - | 最后心跳时间 |
| health_score | INT | - | NULL | 100 | 健康评分(0-100) |
| alerts_count | INT | - | NOT NULL | 0 | 告警数量 |
| last_heartbeat | TIMESTAMP | - | NULL | - | 最后心跳时间 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_node_id (node_id)
- KEY idx_node_role (node_role)
- KEY idx_node_status (node_status)
- KEY idx_last_heartbeat (last_heartbeat)
- KEY idx_health_score (health_score)
#### 2.1.4 系统日志表 (system_logs)
存储从Flume采集的原始日志数据
@ -146,81 +134,46 @@ 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 |
| timestamp | TIMESTAMP | - | NOT NULL | - | 日志时间戳 |
| host | VARCHAR | 100 | NOT NULL | - | 主机名 |
| ip_address | VARCHAR | 15 | NOT NULL | - | IP地址 |
| service | VARCHAR | 50 | NOT NULL | - | 服务名(HDFS/YARN/MapReduce等) |
| component | VARCHAR | 50 | NULL | - | 组件名 |
| service | VARCHAR | 50 | NOT NULL | - | 服务名 |
| log_level | ENUM | - | NOT NULL | - | 日志级别(DEBUG/INFO/WARN/ERROR/FATAL) |
| thread | VARCHAR | 100 | NULL | - | 线程名 |
| logger | VARCHAR | 200 | NULL | - | Logger名称 |
| message | LONGTEXT | - | NOT NULL | - | 日志消息 |
| exception | LONGTEXT | - | NULL | - | 异常堆栈 |
| raw_log | LONGTEXT | - | NULL | - | 原始日志内容 |
| tags | JSON | - | NULL | - | 标签信息 |
| processed | BOOLEAN | - | NOT NULL | FALSE | 是否已处理 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_log_id (log_id)
- KEY idx_fault_id (fault_id)
- KEY idx_timestamp (timestamp)
- KEY idx_host (host)
- KEY idx_service (service)
- KEY idx_log_level (log_level)
- KEY idx_processed (processed)
- KEY idx_timestamp_level (timestamp, log_level)
### 2.2 配置管理表
### 2.2 配置管理与用户表
#### 2.2.1 系统配置表 (system_configs)
存储系统配置参数
#### 2.2.1 应用统一配置表 (app_configurations)
统一管理系统配置、告警规则和通知设置
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| config_type | ENUM | - | NOT NULL | - | 配置类型(system/alert_rule/notification/llm) |
| config_key | VARCHAR | 100 | NOT NULL | - | 配置键 |
| config_value | TEXT | - | NULL | - | 配置值 |
| config_type | VARCHAR | 20 | NOT NULL | 'string' | 配置类型(string/int/boolean/json) |
| category | VARCHAR | 50 | NOT NULL | - | 配置分类 |
| config_value | JSON | - | NOT NULL | - | 配置值 (JSON格式) |
| description | VARCHAR | 500 | NULL | - | 配置描述 |
| is_active | BOOLEAN | - | NOT NULL | TRUE | 是否启用 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_config_key (config_key)
- KEY idx_category (category)
- KEY idx_is_active (is_active)
#### 2.2.2 告警规则表 (alert_rules)
定义各种告警规则和阈值
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| rule_name | VARCHAR | 100 | NOT NULL | - | 规则名称 |
| rule_type | VARCHAR | 50 | NOT NULL | - | 规则类型(threshold/pattern/anomaly) |
| metric_name | VARCHAR | 100 | NOT NULL | - | 监控指标名 |
| condition_expr | TEXT | - | NOT NULL | - | 条件表达式 |
| threshold_value | DECIMAL | 10,2 | NULL | - | 阈值 |
| severity | ENUM | - | NOT NULL | 'medium' | 严重级别(low/medium/high/critical) |
| description | TEXT | - | NULL | - | 规则描述 |
| is_enabled | BOOLEAN | - | NOT NULL | TRUE | 是否启用 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- KEY idx_rule_type (rule_type)
- KEY idx_metric_name (metric_name)
- KEY idx_severity (severity)
- UNIQUE KEY uk_config_type_key (config_type, config_key)
- KEY idx_is_enabled (is_enabled)
### 2.3 用户管理表
#### 2.3.1 用户表 (users)
#### 2.2.2 用户表 (users)
系统用户信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
@ -231,8 +184,6 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| password_hash | VARCHAR | 255 | NOT NULL | - | 密码哈希 |
| full_name | VARCHAR | 100 | NOT NULL | - | 姓名 |
| role | ENUM | - | NOT NULL | 'operator' | 角色(admin/operator/viewer) |
| department | VARCHAR | 100 | NULL | - | 部门 |
| phone | VARCHAR | 20 | NULL | - | 电话 |
| is_active | BOOLEAN | - | NOT NULL | TRUE | 是否激活 |
| last_login | TIMESTAMP | - | NULL | - | 最后登录时间 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
@ -242,10 +193,8 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
- PRIMARY KEY (id)
- UNIQUE KEY uk_username (username)
- UNIQUE KEY uk_email (email)
- KEY idx_role (role)
- KEY idx_is_active (is_active)
#### 2.3.2 操作审计表 (audit_logs)
#### 2.2.3 操作审计表 (audit_logs)
记录用户操作审计日志
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
@ -257,7 +206,6 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| resource_type | VARCHAR | 50 | NOT NULL | - | 资源类型 |
| resource_id | VARCHAR | 100 | NULL | - | 资源ID |
| ip_address | VARCHAR | 15 | NOT NULL | - | IP地址 |
| user_agent | TEXT | - | NULL | - | 用户代理 |
| request_data | JSON | - | NULL | - | 请求数据 |
| response_status | INT | - | NULL | - | 响应状态码 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
@ -265,10 +213,32 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
**索引设计:**
- PRIMARY KEY (id)
- KEY idx_user_id (user_id)
- KEY idx_username (username)
- KEY idx_action (action)
- KEY idx_created_at (created_at)
### 2.3 扩展表
#### 2.3.1 修复脚本模板表 (repair_templates)
存储用于自动修复的脚本模板
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| template_name | VARCHAR | 100 | NOT NULL | - | 模板名称 |
| fault_type | VARCHAR | 50 | NOT NULL | - | 适用故障类型 |
| script_content | TEXT | - | NOT NULL | - | 脚本内容 |
| risk_level | ENUM | - | NOT NULL | 'medium' | 风险级别(low/medium/high) |
| description | TEXT | - | NULL | - | 模板描述 |
| parameters | JSON | - | NULL | - | 参数定义 |
| created_by | VARCHAR | 50 | NULL | - | 创建人 |
| created_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_template_name (template_name)
- KEY idx_fault_type (fault_type)
## 3. 表关系设计
### 3.1 外键关系
@ -279,6 +249,12 @@ ADD CONSTRAINT fk_exec_logs_fault_id
FOREIGN KEY (fault_id) REFERENCES fault_records(fault_id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 系统日志表关联故障记录表
ALTER TABLE system_logs
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 audit_logs
ADD CONSTRAINT fk_audit_logs_user_id
@ -287,10 +263,12 @@ ON DELETE SET NULL ON UPDATE CASCADE;
```
### 3.2 关系说明
- **fault_records****exec_logs**: 一对多关系,一个故障可能有多次修复执行记录
- **users****audit_logs**: 一对多关系,一个用户可能有多条操作审计记录
- **cluster_status**: 独立表,记录集群节点状态
- **system_logs**: 独立表,存储原始日志数据
- **fault_records****exec_logs**: 一对多关系,一个故障可能有多次修复执行记录。
- **fault_records****system_logs**: 一对多关系(可选),一个故障可能关联多条系统日志。
- **users****audit_logs**: 一对多关系,一个用户可能有多条操作审计记录。
- **cluster_status**: 独立表,记录集群节点状态。
- **app_configurations**: 独立表,统一管理所有配置。
- **repair_templates**: 独立表,存储修复脚本模板。
## 4. 数据库初始化脚本
@ -304,151 +282,44 @@ USE hadoop_fault_db;
```
### 4.2 创建表结构
```sql
-- 故障记录表
CREATE TABLE fault_records (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
fault_id VARCHAR(32) NOT NULL UNIQUE,
fault_type VARCHAR(50) NOT NULL,
fault_level ENUM('low', 'medium', 'high', 'critical') NOT NULL DEFAULT 'medium',
title VARCHAR(200) NOT NULL,
description TEXT,
affected_nodes JSON,
source_logs JSON,
root_cause TEXT,
repair_suggestion TEXT,
status ENUM('detected', 'analyzing', 'repairing', 'resolved', 'failed') NOT NULL DEFAULT 'detected',
assignee VARCHAR(50),
reporter VARCHAR(50) DEFAULT 'system',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
resolved_at TIMESTAMP NULL,
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 执行日志表
CREATE TABLE exec_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
exec_id VARCHAR(32) NOT NULL UNIQUE,
fault_id VARCHAR(32) NOT NULL,
command_type VARCHAR(50) NOT NULL,
script_path VARCHAR(255),
command_content TEXT NOT NULL,
target_nodes JSON,
risk_level ENUM('low', 'medium', 'high') NOT NULL DEFAULT 'medium',
execution_status ENUM('pending', 'running', 'success', 'failed', 'timeout') NOT NULL DEFAULT 'pending',
start_time TIMESTAMP NULL,
end_time TIMESTAMP NULL,
duration INT,
stdout_log LONGTEXT,
stderr_log LONGTEXT,
exit_code INT,
operator VARCHAR(50) DEFAULT 'system',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_fault_id (fault_id),
INDEX idx_execution_status (execution_status),
INDEX idx_start_time (start_time),
INDEX idx_operator (operator)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 集群状态表
CREATE TABLE cluster_status (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
node_id VARCHAR(50) NOT NULL UNIQUE,
node_name VARCHAR(100) NOT NULL,
ip_address VARCHAR(15) NOT NULL,
node_role ENUM('NameNode', 'DataNode', 'ResourceManager', 'NodeManager') NOT NULL,
node_status ENUM('online', 'offline', 'maintenance', 'unknown') NOT NULL DEFAULT 'unknown',
cpu_usage DECIMAL(5,2),
memory_usage DECIMAL(5,2),
disk_usage DECIMAL(5,2),
network_io BIGINT,
disk_io BIGINT,
load_average DECIMAL(5,2),
uptime BIGINT,
last_heartbeat TIMESTAMP,
health_score INT DEFAULT 100,
alerts_count INT NOT NULL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_node_role (node_role),
INDEX idx_node_status (node_status),
INDEX idx_last_heartbeat (last_heartbeat),
INDEX idx_health_score (health_score)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 系统日志表
CREATE TABLE system_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
log_id VARCHAR(32) NOT NULL UNIQUE,
timestamp TIMESTAMP NOT NULL,
host VARCHAR(100) NOT NULL,
ip_address VARCHAR(15) NOT NULL,
service VARCHAR(50) NOT NULL,
component VARCHAR(50),
log_level ENUM('DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL') NOT NULL,
thread VARCHAR(100),
logger VARCHAR(200),
message LONGTEXT NOT NULL,
exception LONGTEXT,
raw_log LONGTEXT,
tags JSON,
processed BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```
(此处省略,详见 `数据库建表脚本.sql` 文件)
## 5. 性能优化建议
### 5.1 分区策略
- **system_logs**: 按时间分区,每月一个分区
- **audit_logs**: 按时间分区,每季度一个分区
- **system_logs**: 按时间分区,每月一个分区。
- **audit_logs**: 按时间分区,每季度一个分区。
### 5.2 索引优化
- 为高频查询字段创建复合索引
- 定期分析索引使用情况,删除无用索引
- 对大表考虑使用分区索引
- 为高频查询字段创建复合索引。
- 定期分析索引使用情况,删除无用索引。
- 对大表考虑使用分区索引。
### 5.3 数据归档
- system_logs表数据保留3个月超期数据归档到历史表
- audit_logs表数据保留1年
- 定期清理临时数据和过期缓存
- `system_logs` 表数据保留3个月超期数据归档到历史表。
- `audit_logs` 表数据保留1年。
- 定期清理临时数据和过期缓存。
## 6. 备份与恢复策略
### 6.1 备份策略
- 每日全量备份
- 每小时增量备份
- 重要操作前手动备份
- 每日全量备份。
- 每小时增量备份。
- 重要操作前手动备份。
### 6.2 恢复测试
- 每月进行备份恢复测试
- 制定灾难恢复预案
- 建立数据恢复SOP
- 每月进行备份恢复测试。
- 制定灾难恢复预案。
- 建立数据恢复SOP。
## 7. 监控与维护
### 7.1 性能监控
- 监控慢查询日志
- 跟踪表空间使用情况
- 监控连接数和锁等待
- 监控慢查询日志。
- 跟踪表空间使用情况。
- 监控连接数和锁等待。
### 7.2 定期维护
- 每周执行表优化
- 定期更新表统计信息
- 监控磁盘空间使用情况
- 每周执行表优化。
- 定期更新表统计信息。
- 监控磁盘空间使用情况。
Loading…
Cancel
Save