# EasyDBA **Repository Path**: mybug/EasyDBA ## Basic Information - **Project Name**: EasyDBA - **Description**: 一个基于 .NET 10 的数据库健康检查与巡检平台,并扩展至 21 种数据库 + 17 个子系统 + 440+ 巡检规则 + HTML 报告导出。 EasyDBA 支持对关系型 / 国产 / NoSQL / 列存 / HTAP 等多种数据库进行自动化健康巡检,并生成符合审阅标准的 Word / PDF / HTML 报告。它适合 DBA、运维与平台工程师在日常托管、上线前检查、周期性巡检等场景 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: https://gitee.com/dyx88168/EasyDBA - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2026-07-28 - **Last Updated**: 2026-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyDBA > 一个基于 **.NET 10** 的数据库健康检查与巡检平台,并扩展至 **21 种数据库 + 17 个子系统 + 440+ 巡检规则 + HTML 报告导出**。 EasyDBA 支持对**关系型 / 国产 / NoSQL / 列存 / HTAP** 等多种数据库进行**自动化健康巡检**,并生成符合审阅标准的 **Word / PDF / HTML 报告**。它适合 DBA、运维与平台工程师在日常托管、上线前检查、周期性巡检等场景中使用。 --- ## ✨ 特性 ### 数据库支持(21 种) | 类别 | 数据库 | |------|--------| | 关系型主流 | SQL Server、MySQL、PostgreSQL、Oracle、SQLite | | 国产数据库 | DM8(达梦)、YashanDB(崖山)、GBase 8s、OceanBase、openGauss、IvorySQL、KingbaseES、TiDB | | 经典商用 | DB2、Informix | | NoSQL / 文档 | MongoDB、Redis、Elasticsearch | | 列存 / HTAP | ClickHouse、Cassandra | **协议族复用**:MariaDB/TiDB/OceanBase → MySQL;IvorySQL/KingbaseES/openGauss → PostgreSQL;DM8/YashanDB → Oracle;GBase 8s/Informix → Informix。规则集自动复用。 ![输入图片说明](DemoImage/00.png) ![输入图片说明](DemoImage/0.png) ![输入图片说明](DemoImage/1.png) ![输入图片说明](DemoImage/2.png) ![输入图片说明](DemoImage/3.png) ![输入图片说明](DemoImage/4.png) ### 17 大子系统 | # | 子系统 | 说明 | |---|--------|------| | 1 | **巡检引擎** | 440+ 规则覆盖 21 种数据库,含健康评分、风险等级、手工检查提醒 | | 2 | **配置基线** | 关键参数当前值 vs 推荐值(DM8/YashanDB/GBase 8s/Oracle/SQLite/MySQL/PG/SQL Server) | | 3 | **fix_sql 一键修复** | 每项风险带可执行修复脚本,危险操作标记 RiskLevel | | 4 | **报告导出** | Word (.docx) + PDF + HTML(自包含、可邮件发送),状态色编码、修复脚本盒、手工检查提醒区块 | | 5 | **REST API** | Key 鉴权中间件,支持 `/api/v1/inspect`、`/api/v1/inspects`、`/api/v1/inspect-all` 等 | | 6 | **RBAC 用户权限** | admin / operator / viewer 三角色,PBKDF2 密码哈希,API Key 自动签发 | | 7 | **AI 智能诊断** | 基于 Microsoft Agent Framework + Ollama,本地大模型分析巡检结果 | | 8 | **AI 对话面板** | Web 右下角浮动 FAB 聊天小组件,多轮对话 + 流式响应 | | 9 | **RAG 知识库** | 文档上传(txt/md/docx)+ TF-IDF 向量检索,本地嵌入无外部依赖 | | 10 | **历史趋势分析** | 报告总数 / 平均分 / 各健康等级计数等统计卡片 + 表格化趋势列表,按数据源维度展示(可视化折线图见「实时监控」页) | | 11 | **巡检章节配置化** | InspectionProfile 配置驱动,章节可启用/禁用/排序,规则白名单 | | 12 | **定时任务调度** | Hosted Service + Cron 解析(5 段式),巡检/备份/清理三类作业 | | 13 | **通知集成** | SMTP 邮件 + Webhook(钉钉/企微 markdown 格式) | | 14 | **容灾备份** | MySQL/PG/SQLite/SQLServer/Mongo 自动调用 dump 工具,保留策略 | | 15 | **SQL 编辑器** | Web 内置编辑器(CodeMirror 方言高亮),`Ctrl+Enter` 执行、最近 20 条历史(localStorage)、危险 SQL(DROP/DELETE/TRUNCATE)二次确认 | | 16 | **实时监控** | 连接延迟 / 多指标采集,ECharts 仪表盘与折线图,可配置刷新间隔(5/10/30s/关闭) | | 17 | **多语言 i18n** | 中英文切换,`data-i18n` 自动翻译 | | — | **共享链接** | 免登录报告分享,过期/访问次数控制 | | — | **远程终端 SSH** | 基于 SSH.NET,密码认证,多会话管理(预览版) | | — | **AWR 报告分析** | Oracle AWR HTML 解析,Top SQL/事件/段(基于 HtmlAgilityPack) | | — | **DM8 离线扫描** | 8KB 分页扫描,坏块启发式检测 | | — | **插件系统** | PluginManifest + IPlugin 接口,反射加载;市场目录为**预览版**(`install` 当前仅注册清单,不实际加载 / 执行 DLL) | ### UI 设计(Diagnostic Atlas v2.0) - **Diagnostic Atlas 设计系统**:朱红(crimson)/ 钢青(steel teal)/ 纸色(paper)令牌,暗色为默认主题 - 替代早期 NOC 风格(磷光薄荷绿 #00E5A0) - **签名元素**:圆环式健康度仪表盘(conic-gradient + 内联 CSS 变量) - 风险等级标记(Critical 脉冲动画) - 待手工检查提醒区块(紫色高亮) - 三态主题(light / dark / system)、响应式布局、`prefers-reduced-motion` 支持 ### 生产风险防控 - `HealthRule` 增加 `RiskLevel` / `ManualCheckRequired` / `ManualCheckReason` / `ManualCheckGuide` - 引擎跳过 `ManualCheckRequired=true` 的规则,汇总到报告末尾手工检查清单 - MongoDB 7 项高危巡检(JS 引擎、文件系统、NTP、备份等)改为手工检查 - 结果不计入健康评分 --- ## 🧱 解决方案结构 ``` EasyDBA.slnx ├── src/ │ ├── EasyDBA.Core/ # 引擎、规则、领域模型与本地存储 │ │ ├── Abstractions/ # IDbProvider 抽象 │ │ ├── Configuration/ # SectionConfig / InspectionProfile │ │ ├── Engine/ # InspectionEngine / RuleEvaluator / HealthScoring │ │ ├── Models/ # DataSource / HealthRule / InspectionReport 等 │ │ ├── Plugins/ # PluginManifest / IPlugin 接口 │ │ ├── Rules/ # RuleCatalog + 各数据库规则集 │ │ │ └── Catalogs/ # *Rules.cs(21 种数据库规则) │ │ ├── Scheduling/ # ScheduleJob / JobExecutionLog │ │ └── Store/ # DataSourceStore / UserStore / ConfigStore / │ │ # KnowledgeStore / ShareLinkStore / ScheduleStore / PluginStore │ ├── EasyDBA.Providers/ # 各数据库驱动实现 │ │ └── Providers/ # SqlServer / MySql / PostgreSQL / Oracle / Sqlite / │ │ # MongoDB / Redis / ClickHouse / Elasticsearch / │ │ # Informix / Db2 / Cassandra │ └── EasyDBA.Web/ # ASP.NET Core 宿主(托管 Vue3 SPA + REST API) │ ├── Pages/ # 仅 3 个白名单 Razor 旧根(Account/Login、Account/Logout、Error) │ │ # + 布局(_Layout/_ViewImports/_ViewStart)与 Shared 两个 partial; │ │ # 其余 Razor 页已在 GA 收口中删除(SPA 为唯一官方前端) │ ├── ClientApp/ # Vue3 SPA 前端源码(Vite 构建产物输出到 wwwroot/) │ ├── Security/ # ApiKeyMiddleware / AuthService │ ├── Services/ # InspectionService / ReportRenderer / PdfReportRenderer / │ │ # AiService / MetricsCollector / SchedulerService / │ │ # NotificationService / BackupService / SshTerminalService / │ │ # AwrAnalyzer / Dm8OfflineScanner / PluginLoader / I18nService │ └── wwwroot/ # SPA 构建产物(index.html / assets/)+ css / i18n / favicon ``` --- ## 🚀 快速开始 ### 环境要求 - [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) - 如需巡检非 SQLite 数据库,目标库需可达且其端口/账号可用 - 如需 AI 智能诊断:本地 [Ollama](https://ollama.ai/) 运行 `qwen2.5:7b`(或任意 OpenAI 兼容端点) - 如需 SSH 远程终端:目标主机开启 SSH 服务 - 如需备份功能:MySQL 安装 `mysqldump`、PG 安装 `pg_dump`、Mongo 安装 `mongodump` ### 运行 ```bash dotnet run --project src/EasyDBA.Web/EasyDBA.Web.csproj ``` 默认监听 **http://localhost:5180**(首次启动自动创建 SQLite 元数据库与演示数据源)。 ### 默认管理员 首次启动自动创建管理员账号(**强制改密门禁**:首次登录必须修改密码,否则路由守卫拦截到改密页): | 用户名 | 密码 | 角色 | 强制改密 | |--------|------|------|----------| | `admin` | `admin123` | admin | ✅ 是 | **强烈建议登录后立即修改密码或在用户管理页创建新管理员并禁用默认账号。** #### 种子开关(环境变量) | 变量 | 作用 | |------|------| | `EASYDBA_NO_SEED_ADMIN` | 非空时跳过默认管理员种子(生产可裸账号启动,由外部编排创建账号) | | `EASYDBA_ADMIN_USER` / `EASYDBA_ADMIN_PASSWORD` | 无用户时引导种子该管理员(仍标记强制改密)。例如 `EASYDBA_ADMIN_USER=root EASYDBA_ADMIN_PASSWORD='StrongPass!23'` | | 二者均未设置 | 维持默认 `admin`/`admin123` 种子(带强制改密) | > 改密接口:`POST /api/v1/auth/change-password`(`old_password` + `new_password`,需登录;新密码长度 ≥ 8)。 ### 配置 AI(可选) 启动 Ollama: ```bash ollama pull qwen2.5:7b ollama serve ``` 在 Web 控制台 → AI 配置 → 勾选 "启用 AI" → 保存。 --- ## 📦 部署方式 EasyDBA 提供四种部署方式,按场景选择: | 方式 | 适用场景 | 体积 | 说明 | |------|----------|------|------| | **源码运行** | 开发 / 调试 | 需 .NET 10 SDK + Node | `dotnet run` + `npm run dev` | | **Docker** | 服务器 / 容器化部署 | ~200MB 镜像 | 一键 `docker compose up -d` | | **桌面 EXE** | 个人 DBA 本地使用 | ~80MB(裁剪后) | 双击运行,自动开浏览器,无需装运行时 | | **Windows 服务** | 常驻后台(定时巡检/备份) | 同桌面 EXE | 开机自启,同一 EXE 切换模式 | ### 方式一:Docker 快速部署(推荐服务器场景) ```bash # 构建并后台启动 docker compose up -d # 查看日志 docker compose logs -f # 停止 docker compose down ``` - 访问:`http://<服务器IP>:5180` - 数据持久化:Docker 卷 `easydba-data` 挂载到 `/app/data`(SQLite 元数据库、备份、AES 密钥、插件) - 默认账号:`admin` / `admin123`(首次登录强制改密) - 生产环境务必修改 `docker-compose.yml` 中的 `EASYDBA_ADMIN_PASSWORD` ### 方式二:桌面 EXE(双击运行) ```powershell # 在项目根目录执行发布脚本 .\publish-desktop.ps1 ``` 产物输出到 `publish/` 目录,包含: - `EasyDBA.Web.exe` —— 自包含单文件(含 .NET 运行时,目标机无需安装任何依赖) - `wwwroot/` —— Vue3 SPA 静态资源 - `appsettings.json` / `appsettings.Production.json` —— 配置文件 **使用方式**:将 `publish/` 目录拷贝到目标 Windows 机器,双击 `EasyDBA.Web.exe`: - 控制台窗口显示运行状态 - 自动打开默认浏览器访问 `http://localhost:5180` - 数据存储在 EXE 同级 `data/` 目录 - 关闭控制台窗口即停止 **体积优化选项**: ```powershell .\publish-desktop.ps1 # 默认:partial 裁剪(安全,移除未使用框架代码) .\publish-desktop.ps1 -NoTrim # 不裁剪(最大兼容性,体积约 +30%) .\publish-desktop.ps1 -Runtime win-arm64 # ARM64 设备 ``` ### 方式三:Windows 服务(开机自启) 同一 EXE 可注册为 Windows 服务,实现定时巡检 / 备份 / 告警的开机自启: ```powershell # 先按方式二发布到 publish/ 目录 # 注册服务(路径用绝对路径,binPath= 后有一个空格) sc create EasyDBA binPath= "C:\EasyDBA\EasyDBA.Web.exe" start= auto sc description EasyDBA "EasyDBA 数据库巡检平台(定时巡检/备份/告警)" # 启动 sc start EasyDBA # 停止 / 删除 sc stop EasyDBA sc delete EasyDBA ``` 服务模式下不自动弹窗(通过浏览器访问 `http://localhost:5180`),日志写入 Windows 事件查看器。 ### 环境变量参考 | 变量 | 默认值 | 说明 | |------|--------|------| | `EASYDBA_PORT` | `5180` | 监听端口(桌面模式绑定 localhost) | | `ASPNETCORE_URLS` | — | 覆盖监听地址(Docker 设 `http://+:5180`) | | `ASPNETCORE_ENVIRONMENT` | `Production` | 运行环境(开发用 `Development`) | | `EASYDBA_ADMIN_USER` | `admin` | 首次启动种子管理员用户名 | | `EASYDBA_ADMIN_PASSWORD` | `admin123` | 首次启动种子管理员密码(仍强制改密) | | `EASYDBA_NO_SEED_ADMIN` | — | 非空时跳过种子管理员(外部编排创建账号) | | `EASYDBA_NO_BROWSER` | `0` | 设 `1` 禁止桌面模式自动开浏览器 | | `DOTNET_RUNNING_IN_CONTAINER` | — | Docker 内自动设为 `true`,跳过自动开浏览器 | ### 桌面版 vs Web 版设计说明 EasyDBA 选择 **自包含 ASP.NET Core EXE + 自动开浏览器** 而非 MAUI+WebView2 套壳: - **MAUI+WebView2**:依赖 WebView2 运行时(目标机未必安装)、SDK 体积膨胀、裁剪不友好,且 SPA 已是成品,套壳无视觉增益 - **自包含 EXE**:纯 ASP.NET Core,完全可裁剪,双击即用 + 自动开浏览器,体积最小(裁剪后 ~80MB),同一二进制支持服务模式 --- ## 🔍 巡检规则一览 | 数据库 | 规则数 | 典型检查项 | |--------|--------|------------| | SQL Server | 52 | 安全配置审计(sa 启用/空密码/sysadmin 成员/xp_cmdshell 等)、配置基线、版本、连接、阻塞链、缺失索引、Top CPU/逻辑读、长事务、备份新鲜度、AlwaysOn、tempdb、复制、作业状态、死锁历史、内存压力、VLF 数量、页生命周期、系统层手工检查 | | MySQL | 45 | 安全配置审计(空密码/root 远程/anonymous/SSL/secure_file_priv/弱插件)、配置基线、复制(GTID/半同步)、缓冲池命中率、慢查询 digest、冗余/未用索引、长事务、binlog 保留、死锁、临时表溢出、全表扫描比率、MyISAM 表、持久化(innodb_flush_log_at_trx_commit/sync_binlog)、系统层手工检查 | | PostgreSQL | 41 | 安全配置审计(trust 认证/无密码登录/superuser/SSL/密码加密)、配置基线、膨胀、Vacuum、WAL、慢查询、冗余/未用索引、长事务、复制延迟、复制槽、autovacuum、连接耗尽、临时文件、系统层手工检查 | | Oracle | 54 | 安全配置审计(默认开放账号/审计关闭/PUBLIC 系统权限/弱 profile/失败登录/过期锁定)、配置基线(8 参数)、AWR 负载画像、归档速率、FRA、闪回区、Data Guard、阻塞链、死锁、未用索引、失效约束/触发器、Top SQL、表空间、系统层手工检查 | | SQLite | 28 | 配置基线(PRAGMA)、表无主键、冗余索引、无索引表、stat1 过期、integrity_check(手工)、外键检查(手工)、WAL 检查点、空闲页、文件权限、文件系统类型 | | DM8(达梦) | 30 | 安全配置审计、实例状态、表空间、会话、锁等待、长事务、归档模式、AWR Top SQL、缓冲池命中率、失效对象、备份新鲜度、配置基线(BUFFER/MAX_SESSIONS/REDO/CHECK_TIME)、系统层手工检查 | | YashanDB(崖山) | 26 | 安全配置审计、实例状态、表空间、会话、锁等待、长事务、归档模式、Top SQL、缓冲池命中率、失效对象、备份新鲜度、HA 集群节点、配置基线、系统层手工检查 | | GBase 8s | 27 | 安全配置审计、实例版本、dbspace 使用率、会话、长连接、锁等待、长事务、死锁、逻辑日志、归档模式、检查点、缓冲池命中率、Top SQL、无索引大表、配置基线(BUFFERS/LOGFILES/LOGSIZE)、系统层手工检查 | | MongoDB | 26 | 健康状态、连接、副本集、安全(含手工检查)、性能分析、存储空间、日志与文件系统(手工)、备份策略(手工) | | Redis | 20 | 安全(protected-mode/requirepass/ACL/命令重命名)、内存、连接、持久化、慢日志、复制、键过期策略、最大内存策略 | | Elasticsearch | 19 | 安全(传输/HTTP TLS/匿名)、集群健康、节点状态、分片、索引大小、线程池、缓存 | | ClickHouse | 18 | 安全(匿名访问/TLS)、集群、副本、分区、合并、慢查询、磁盘 | | DB2 | 19 | 安全配置审计、表空间、缓冲池、锁、连接、日志 | | Informix | 19 | 安全配置审计、dbspace、锁、检查点、长事务、缓冲池 | | Cassandra | 18 | 安全(匿名访问/TLS)、节点状态、压缩、流式传输、修复历史 | **总计 440+ 条规则**(其中 56 项标记为 `ManualCheckRequired=true`,自动跳过执行,统一在报告末尾「手工待检查项提醒」区块展示完整原因与操作指引;另对部分规则施加 `MinVersion` 版本区间门控,兼容多版本数据库,优先最新版、尽力兼容老版)。 --- ## 🧩 健康评分算法 ``` score = 100 - critical * 15 - warning * 6 score = clamp(score, 0, 100) level = 优秀 (>=90) / 良好 (>=75) / 一般 (>=60) / 需关注 (<60) ``` 每条规则结果状态:`通过 / 警告 / 严重 / 信息 / 待手工`。`待手工` 与 `信息` 不计入评分。 --- ## 🔌 REST API API 认证:`X-API-Key` 头或 `Authorization: Bearer `(由登录接口签发)。**鉴权层级**:admin > operator > viewer;标注「公开」的端点无需密钥(匿名可调用)。 > 开发环境启动后访问 `http://localhost:5180/swagger` 查看交互式 Swagger 文档(仅 Development 暴露;生产环境关闭,避免端点清单泄露)。 | 方法 | 路径 | 鉴权 | 说明 | |------|------|------|------| | GET | `/api/v1/health` | 公开 | 健康检查 | | POST | `/api/v1/auth/login` | 公开 | 用户名/密码登录,签发 API Key | | POST | `/api/v1/auth/change-password` | viewer | 修改当前用户密码(强制改密流程) | | GET | `/api/v1/auth/whoami` | viewer | 当前用户信息(含 `must_change_password`) | | POST | `/api/v1/users` | admin | 创建用户 | | GET | `/api/v1/datasources` | viewer | 数据源列表 | | GET | `/api/v1/datasources/{id}` | viewer | 数据源详情 | | POST | `/api/v1/datasources` | operator | 新增数据源 | | PUT | `/api/v1/datasources/{id}` | operator | 更新数据源 | | DELETE | `/api/v1/datasources/{id}` | operator | 删除数据源 | | POST | `/api/v1/datasources/{id}/inspect` | operator | 触发单库巡检 | | GET | `/api/v1/datasources/{id}/reports` | viewer | 该数据源历史报告 | | POST | `/api/v1/datasources/inspect-all` | operator | 批量巡检全部数据源 | | POST | `/api/v1/inspect` | operator | 执行巡检 | | POST | `/api/v1/inspect-all` | operator | 批量巡检 | | GET | `/api/v1/inspects` | viewer | 历史报告列表 | | GET | `/api/v1/reports/{id}` | viewer | 报告详情 | | GET | `/api/v1/reports/{id}/docx` | viewer | 下载 Word 报告 | | GET | `/api/v1/reports/{id}/pdf` | viewer | 下载 PDF 报告 | | GET | `/api/v1/reports/{id}/html` | viewer | 下载 HTML 报告(自包含) | | GET | `/api/v1/reports/{id}/md` | viewer | 下载 Markdown 报告 | | GET | `/api/v1/compare` | viewer | 配置参数对比(不支持的类型返回 **501** + `UNSUPPORTED_DB_TYPE`) | | GET | `/api/v1/sessions` | viewer | 活动会话(不支持的类型返回 **501**) | | POST | `/api/v1/sessions/kill` | operator | 批量 KILL 会话 | | GET | `/api/v1/slow-query` | viewer | 慢查询日志(不支持的类型返回 **501**) | | GET | `/api/v1/alerts/rules` | viewer | 告警规则列表 | | POST | `/api/v1/alerts/rules` | operator | 新增告警规则 | | PUT | `/api/v1/alerts/rules/{id}` | operator | 更新告警规则 | | DELETE | `/api/v1/alerts/rules/{id}` | operator | 删除告警规则 | | POST | `/api/v1/alerts/scan` | operator | 立即扫描告警 | | GET | `/api/v1/alerts/history` | viewer | 告警触发历史 | | POST | `/api/v1/alerts/rules/seed-defaults` | admin | 种子默认告警规则 | | GET | `/api/v1/config/profiles` | viewer | 巡检配置方案列表 | | POST | `/api/v1/config/profiles` | admin | 新增配置方案 | | DELETE | `/api/v1/config/profiles/{id}` | admin | 删除配置方案 | | POST | `/api/v1/config/profiles/{id}/default` | admin | 设为默认方案 | | POST | `/api/v1/sql/execute` | operator | SQL 编辑器执行 | | GET | `/api/v1/monitor/snapshot` | viewer | 实时监控指标快照 | | GET | `/api/v1/monitor/history` | viewer | 监控历史 | | POST | `/api/v1/ai/diagnose` | viewer | AI 诊断报告 | | POST | `/api/v1/ai/chat` | viewer | AI 对话 | | POST | `/api/v1/ai/chat/clear` | viewer | 清空对话上下文 | | GET | `/api/v1/ai/status` | viewer | AI 服务状态 | | GET | `/api/v1/ai/models` | viewer | 可用模型列表 | | POST | `/api/v1/ai/test` | viewer | 测试 AI 连接 | | POST | `/api/v1/knowledge/upload` | operator | 上传知识库文档 | | GET | `/api/v1/knowledge/search` | viewer | 知识库检索 | | GET | `/api/v1/knowledge/docs` | viewer | 知识库文档列表 | | DELETE | `/api/v1/knowledge/{id}` | operator | 删除知识库文档 | | POST | `/api/v1/knowledge/rebuild` | operator | 重建索引 | | POST | `/api/v1/share` | operator | 创建分享链接 | | GET | `/api/v1/share` | viewer | 分享链接列表 | | DELETE | `/api/v1/share/{id}` | operator | 删除分享链接 | | GET | `/api/v1/share/{token}` | 公开 | 免登录查看分享报告 | | POST | `/api/v1/i18n/set` | 公开 | 设置界面语言 | | GET | `/api/v1/i18n/status` | 公开 | 当前语言状态 | | POST | `/api/v1/ssh/connect` | operator | 建立 SSH 会话 | | POST | `/api/v1/ssh/execute` | operator | 执行远程命令 | | POST | `/api/v1/ssh/disconnect` | operator | 断开 SSH 会话 | | GET | `/api/v1/ssh/sessions` | viewer | SSH 会话列表 | | POST | `/api/v1/dm8/scan` | admin | DM8 离线扫描 | | GET | `/api/v1/plugins` | viewer | 插件列表 | | POST | `/api/v1/plugins/{id}/toggle` | operator | 启用/禁用插件 | | DELETE | `/api/v1/plugins/{id}` | admin | 卸载插件 | | POST | `/api/v1/plugins/install` | operator | 安装插件 | | GET | `/api/v1/schedule/jobs` | viewer | 定时任务列表 | | POST | `/api/v1/schedule/jobs` | operator | 新增定时任务 | | DELETE | `/api/v1/schedule/jobs/{id}` | operator | 删除定时任务 | | POST | `/api/v1/schedule/jobs/{id}/run` | operator | 立即运行任务 | | GET | `/api/v1/schedule/jobs/{id}/logs` | viewer | 任务执行日志 | | POST | `/api/v1/notifications/test` | operator | 测试通知通道 | | POST | `/api/v1/backup/run` | operator | 触发备份 | | GET | `/api/v1/backup/history` | viewer | 备份历史 | | GET | `/api/v1/backup/download` | operator | 下载备份文件 | | POST | `/api/v1/awr/parse` | operator | 解析 Oracle AWR HTML | 共 **23 个 Controller**、约 70 个端点。完整交互式文档见开发环境的 `/swagger`(Swagger UI)。 --- ## 🛠️ 技术栈 - **.NET 10** / ASP.NET Core(托管 Vue3 SPA + REST API)/ SQLite - **前端(唯一官方 UI)**:Vue 3 + TypeScript + Vite + Element Plus + Pinia + Vue Router + Vue I18n - **Razor Pages**:仅保留 3 个白名单旧根(`/Account/Login`、`/Account/Logout`、`/Error`)作 Cookie 登录/错误页,其余已在 GA 收口中删除 - **数据库驱动**:SqlClient、MySqlConnector、Npgsql、Oracle.ManagedDataAccess、MongoDB.Driver、StackExchange.Redis、System.Data.Odbc - **报告导出**:DocumentFormat.OpenXml v3(Word)、QuestPDF 2025.1(PDF)、自包含 HTML(CSS+SVG+数据单文件,无外部依赖) - **AI 框架**:Microsoft Agent Framework 1.13 (`Microsoft.Agents.AI.OpenAI`) + OpenAI SDK 2.12 - **SSH**:SSH.NET 2025 - **HTML 解析**:HtmlAgilityPack 1.11 - **认证**:Cookie 认证 + API Key 中间件,PBKDF2-SHA256 密码哈希 --- ## 📋 与 DBCheck 对标 | 维度 | DBCheck | EasyDBA | 状态 | |------|---------|---------|------| | 数据库类型 | 13 种 | 21 种 | ✅ 超越 | | 巡检规则 | 160+ | 440+ | ✅ 超越 | | 配置基线 | 多库 | DM8/YashanDB/GBase 8s/Oracle/SQLite/MySQL/PG/SQL Server | ✅ 超越 | | fix_sql | 每项风险 | 8 大主流库覆盖(含国产) | ✅ | | 报告导出 | Word | Word + PDF + HTML(自包含) | ✅ 超越 | | REST API | Key 认证 | Key + Cookie 双认证 + RBAC | ✅ 超越 | | AI / RAG | Ollama | MAF + Ollama + 浮动面板 | ✅ | | 插件 / SSH / 备份 / 监控 / 编辑器 / AWR / DM8 / i18n / 共享 / 趋势 | 具备 | 全部实现 | ✅ | --- ## 📊 与主流巡检工具对标 EasyDBA 在功能覆盖上对标以下主流工具,并整合了各自优势: | 工具 | 优势领域 | EasyDBA 对应能力 | 对标状态 | |------|----------|------------------|---------| | **DBCheck** | 多库巡检 + Word 报告 | 21 库 + Word/PDF/HTML + 440+ 规则 | ✅ 超越 | | **Percona Toolkit** (pt-stalk, pt-query-digest, pt-index-usage) | MySQL 深度诊断 | MySQL 慢查询 digest / 冗余未用索引 / 死锁 / binlog 缓存 / 临时表 / 全表扫描比率 | ✅ 覆盖核心项 | | **Oracle Enterprise Manager** | Oracle AWR/ASH/ADDM + 监控 | AWR HTML 解析器 + AWR 关键指标 + FRA 净使用率 + Data Guard + 阻塞链根因 + 实时监控 | ✅ 覆盖核心项 | | **Navicat 巡检** | GUI 工具 + 基础检查 | Web UI + 多库巡检 + SQL 编辑器 + 报告导出 | ✅ 超越 | | **pgBadger** | PostgreSQL 日志分析 | PG 慢查询 / 复制槽 / autovacuum / 膨胀率 / 连接耗尽 / 长事务 | ⚠️ 部分覆盖(日志分析需扩展) | | **MongoDB Cloud Manager** | MongoDB 监控 + 副本集 | 副本集状态 / 连接 / 安全 / 性能 / 7 项手工检查 | ✅ 覆盖核心项 | | **AWS RDS Performance Insights / Aliyun DAS** | 云端性能洞察 | Top SQL / 慢查询 / 锁诊断 / 实时监控 / 历史趋势 | ⚠️ 接近(缺自动化调优建议) | ### 相对主流工具的独特优势 - **统一平台**:21 种数据库用同一 UI/API/报告格式,无需切换工具 - **生产风险防控**:30+ 项高危检查自动跳过并生成「手工检查提醒」区块,避免巡检影响在线业务 - **AI 智能诊断**:基于 Microsoft Agent Framework(MAF)+ Ollama 本地大模型,无需上云 - **RAG 知识库**:上传企业内部运维文档(txt/md/docx)建立私有知识检索 - **多格式报告**:Word(正式交付)+ PDF(归档)+ HTML(邮件/IM 分享,自包含无依赖) - **国产数据库**:DM8/YashanDB/GBase 8s 专用规则集,覆盖信创场景 ### 当前不足与后续路线 - **实时告警**:当前仅支持定时任务 + 通知,未实现阈值触发的实时告警(计划加入) - **自动化调优**:AI 诊断已提供优化建议,但未实现自动应用(需人工确认后执行 fix_sql) - **日志深度分析**:MySQL/PG 慢查询日志文件解析(pgBadger 风格)尚未实现 - **可视化图表**:报告/趋势以表格为主,但「实时监控」页已用 ECharts 仪表盘与折线图做指标可视化;报告内嵌图表化展示为后续路线 --- ## 📄 许可 仅供学习与内部运维用途。原始项目版权归原作者所有。