feat: Agent CLI 与终端审计回放全面优化
- Agent CLI: 多轮对话、SSH 长连接、流式推理、Evolver 按用户隔离、历史侧栏 - 终端审计: 回放播放器、命令书签、筛选分页导出、命令输出统计、录制落盘修复 - 修复 session_commands 表迁移、Kill 竞态导致录制丢失、无录制会话回放提示 - 审计历史页只读(移除删除),移除回放弹框录制搜索
This commit is contained in:
1 parent
9a3dd304f7
commit
1acb0c49af
81 files changed
+3916
-1655
No files matched your search
@@ -10,7 +10,7 @@
|
||||
**AIOps** 是一个企业级云原生智能运维平台,聚焦三大核心能力:
|
||||
|
||||
1. **资产管理** — 服务器 CRUD、批量导入、WebShell、云账号/域名/账单、Kubernetes 多集群。
|
||||
2. **监控告警** — Agent 采集 `/proc` 指标、告警引擎(阈值/离线检测)、告警中心、监控大屏、Prometheus/Zabbix/SNMP/站点拨测。
|
||||
2. **监控告警** — Agent 采集 `/proc` 指标、告警引擎(阈值/离线/日志告警)、告警中心、监控大屏、Prometheus/Zabbix/SNMP/站点拨测/中间件监控。
|
||||
3. **自动化运维 / AIOps** — CI/CD 流水线、定时任务/脚本库、Go-native SSH 远程执行、资源申请审批、AI 智能助手、Agent CLI(ReAct + Evolver)。
|
||||
|
||||
项目采用前后端分离架构,但通过 `go:embed` 支持将前端构建产物嵌入后端二进制,实现单文件 / 单容器部署。
|
||||
@@ -35,7 +35,30 @@
|
||||
|
||||
## 2. 技术栈与关键配置
|
||||
|
||||
### 2.1 后端
|
||||
### 2.1 关键配置文件
|
||||
|
||||
项目不存在 `pyproject.toml`、`Cargo.toml`、`pom.xml` 等配置。核心配置文件为:
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `backend/go.mod` | 后端 Go 模块定义,模块名 `ezops`,Go 1.24.0 |
|
||||
| `agent/go.mod` | Agent 独立模块,模块名 `ezops/agent`,Go 1.22(与后端共用 1.24 工具链) |
|
||||
| `frontend/package.json` | 前端 npm 依赖与脚本 |
|
||||
| `frontend/vite.config.ts` | Vite 配置:端口 5173,代理 `/api`、`/ws`、`/health`、`/version`、`/agent` 到 `localhost:8080` |
|
||||
| `frontend/eslint.config.js` | ESLint flat config,禁止显式 `any` |
|
||||
| `frontend/tailwind.config.js` | CSS 变量主题体系 |
|
||||
| `config.yaml` | 本地开发默认配置(SQLite + redka,端口 8080) |
|
||||
| `docker-compose.yml` | 3 容器:MySQL 8.0 + Redis 7-alpine + AIOps(:8080) |
|
||||
| `docker-compose.k8s.yml` | 单应用容器 + 外部 DB |
|
||||
| `Dockerfile.embed` | 4-stage Embed 镜像(前端→后端→Agent→Runtime),Compose 与 K8s 共用 |
|
||||
| `.env.example` | Docker Compose 环境变量示例 |
|
||||
| `deploy/kubernetes/` | K8s 清单:`devops` 命名空间、NodePort 30080 |
|
||||
| `run.sh` | 统一入口:dev / build / docker / kubernetes / release / binary |
|
||||
| `Makefile` | 快捷命令(dev / build / docker-up / lint 等),部分委托给 `run.sh`,部分已陈旧 |
|
||||
|
||||
> 注意:项目根目录**没有**独立的 `Dockerfile`,只有 `Dockerfile.embed`。`docker-compose.yml` 直接引用 `Dockerfile.embed`。
|
||||
|
||||
### 2.2 后端
|
||||
|
||||
- **语言 / 版本**:Go 1.24+
|
||||
- **Web 框架**:Gin v1.9.1
|
||||
@@ -52,13 +75,12 @@
|
||||
|
||||
关键文件:
|
||||
|
||||
- `backend/go.mod` — Go 模块定义,模块名 `ezops`
|
||||
- `backend/main.go` — 应用入口、CLI 参数解析、配置加载、优雅关闭
|
||||
- `backend/embed.go` — `go:embed static`,SPA fallback 逻辑
|
||||
- `backend/config/config.go` — `Config` 结构体与默认配置
|
||||
- `backend/router/routes.go` — 所有路由注册(约 1018 行,核心入口)
|
||||
- `backend/router/routes.go` — 所有路由注册(实际约 1054 行,核心入口)
|
||||
|
||||
### 2.2 前端
|
||||
### 2.3 前端
|
||||
|
||||
- **框架**:React 19.2+
|
||||
- **语言**:TypeScript 5.9+
|
||||
@@ -75,34 +97,13 @@
|
||||
- **国际化**:i18next + react-i18next(中/英双语)
|
||||
- **表单校验**:Zod + React Hook Form
|
||||
|
||||
关键文件:
|
||||
|
||||
- `frontend/package.json`
|
||||
- `frontend/vite.config.ts` — 端口 5173,代理 `/api`、`/ws`、`/health`、`/version` 到 `localhost:8080`
|
||||
- `frontend/tailwind.config.js` — CSS 变量主题体系
|
||||
- `frontend/eslint.config.js` — ESLint flat config,禁止 `any`
|
||||
|
||||
### 2.3 Agent
|
||||
### 2.4 Agent
|
||||
|
||||
- **模块名**:`ezops/agent`
|
||||
- **Go 版本**:go 1.22(文件声明),与后端共用 1.24 工具链
|
||||
- **依赖**:仅 `golang.org/x/sys`
|
||||
- **架构**:`collector/`(采集器)、`task/`(远程任务)、`reporter/`(HTTP 上报)、`client/`(HTTP 客户端)、`model/`(数据结构)
|
||||
|
||||
### 2.4 部署与构建配置
|
||||
|
||||
| 文件 | 用途 |
|
||||
|------|------|
|
||||
| `run.sh` | 统一入口:dev / build / docker / kubernetes / release / binary |
|
||||
| `Makefile` | 快捷命令(dev / build / docker-up / lint 等),实际多委托给 `run.sh` |
|
||||
| `Dockerfile` | 3-stage 构建镜像(Frontend→Backend+Agent→Alpine Runtime),Docker Compose 使用 |
|
||||
| `Dockerfile.embed` | 4-stage Embed 镜像(前端→后端→Agent→Runtime),K8s 单容器部署使用 |
|
||||
| `docker-compose.yml` | 3 容器:MySQL 8.0 + Redis 7-alpine + AIOps(:8080) |
|
||||
| `docker-compose.k8s.yml` | 单应用容器 + 外部 DB |
|
||||
| `config.yaml` | 本地开发默认配置(SQLite + redka,端口 8080) |
|
||||
| `.env.example` | Docker Compose 环境变量示例 |
|
||||
| `deploy/kubernetes/` | K8s 清单:`devops` 命名空间、NodePort 30080 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 项目结构与模块划分
|
||||
@@ -117,11 +118,13 @@ aiops/
|
||||
├── deploy/ # 部署脚本与 K8s 清单
|
||||
├── docs/ # 中文开发文档
|
||||
├── tests/ # 集成测试脚本
|
||||
├── scripts/ # 构建辅助脚本(kubectl 安装、alpine 镜像源等)
|
||||
├── run.sh # 统一入口
|
||||
├── Dockerfile.embed # 推荐生产镜像
|
||||
├── docker-compose.yml
|
||||
├── docker-compose.k8s.yml
|
||||
├── config.yaml
|
||||
└── README.md / CLAUDE.md
|
||||
└── README.md / CLAUDE.md / AGENTS.md
|
||||
```
|
||||
|
||||
### 3.2 后端目录职责
|
||||
@@ -129,11 +132,11 @@ aiops/
|
||||
| 目录 | 职责 |
|
||||
|------|------|
|
||||
| `backend/main.go` / `embed.go` | 应用入口 + 前端嵌入 |
|
||||
| `backend/controller/` | HTTP 处理器(约 60+ 个文件,按领域拆分) |
|
||||
| `backend/controller/` | HTTP 处理器(60+ 个文件,按领域拆分;总代码行约 27K) |
|
||||
| `backend/model/` | GORM 数据模型(约 30 个文件,86+ 张表) |
|
||||
| `backend/dto/` | 请求/响应 DTO |
|
||||
| `backend/service/` | 业务逻辑层(V2 Services 依赖注入) |
|
||||
| `backend/repository/` | 数据访问层 |
|
||||
| `backend/dto/` | 请求/响应 DTO(当前 `dto.go` 一个文件) |
|
||||
| `backend/service/` | 业务逻辑层(V2 Services,当前 `service.go`) |
|
||||
| `backend/repository/` | 数据访问层(当前 `repo.go`) |
|
||||
| `backend/router/` | 路由注册 |
|
||||
| `backend/middleware/` | JWT、Admin、PipelineAccess、CORS、日志 |
|
||||
| `backend/config/` | Viper 配置加载 |
|
||||
@@ -145,13 +148,13 @@ aiops/
|
||||
|
||||
- 用户/角色/权限:`user.go`, `user_admin.go`, `item_role.go`
|
||||
- LDAP:`ldap.go`, `ldap_users.go`, `ldap_ou.go`
|
||||
- 资产:`server.go`(V2 `server_handler.go`), `cloud_accounts.go`, `cloud_sync.go`, `cloud_domain.go`, `cloud_platform.go`, `cloud_region.go`, `billing.go`, `billing_alert.go`, `resource_model.go`
|
||||
- 资产:`server.go`, `cloud_accounts.go`, `cloud_sync.go`, `cloud_domain.go`, `cloud_platform.go`, `cloud_region.go`, `billing.go`, `billing_alert.go`, `resource_model.go`
|
||||
- K8s:`kubernetes.go`, `k8s_cluster.go`, `k8s_node.go`, `k8s_pod.go`, `k8s_workload.go`, `k8s_yaml.go`, `k8s_resource.go`, `k8s_namespace.go`, `k8s_events.go`, `k8s_compare.go`, `k8s_export.go`, `k8s_hpa_cronjob.go`, `k8s_pod_files.go`, `kubectl_shell.go`
|
||||
- 监控告警:`alert.go`, `alert_rules.go`, `alert_engine.go`, `alert_channels.go`, `alert_contacts.go`, `alert_silence.go`, `metrics.go`, `health_probe.go`, `site.go`, `snmp.go`, `custom_dashboard.go`
|
||||
- 数据源代理:`prometheus_proxy.go`, `prom_ds.go`, `zabbix_proxy.go`, `zabbix_ds.go`, `log_proxy.go`, `log_datasource.go`
|
||||
- 监控告警:`alert.go`, `alert_rules.go`, `alert_engine.go`, `alert_channels.go`, `alert_contacts.go`, `alert_silence.go`, `metrics.go`, `health_probe.go`, `site.go`, `snmp.go`, `custom_dashboard.go`, `middleware_monitor.go`
|
||||
- 数据源代理:`prometheus_proxy.go`, `prom_ds.go`, `zabbix_proxy.go`, `zabbix_ds.go`, `log_proxy.go`, `log_datasource.go`, `trace_datasource.go`
|
||||
- 日志中心:`UnifiedQueryPanel.tsx`, `EsQueryPanel.tsx`, `LokiQueryPanel.tsx`, `LogDatasourcePage.tsx`, `LogDatasourceDialog.tsx`, `TimeRangePicker.tsx`
|
||||
- 应用发布/部署:`pipeline.go`, `pipeline_executor.go`, `deploy.go`, `deploy_groups.go`, `deploy_environments.go`, `tool_config.go`
|
||||
- 自动化运维:`automation.go`, `automation_cron.go`, `automation_script.go`, `remote_exec.go`
|
||||
- 自动化运维:`automation.go`, `automation_cron.go`, `automation_script.go`, `remote_exec.go`, `ansible.go`
|
||||
- 审批:`approval.go`, `approval_process.go`, `approval_workflow.go`
|
||||
- 审计:`audit.go`, `audit_hub.go`, `terminal_session.go`, `session_command.go`, `login_log.go`
|
||||
- AI:`llm.go`, `llm_chat.go`, `llm_history.go`, `agent_cli.go`, `agent_cli_api.go`
|
||||
@@ -169,7 +172,7 @@ aiops/
|
||||
| `frontend/src/store/` | Zustand 状态管理 |
|
||||
| `frontend/src/lib/` | 工具函数 |
|
||||
| `frontend/src/types/` | TypeScript 类型 |
|
||||
| `frontend/src/i18n/` / `locales/` | 国际化(zh-CN / en-US 双语,120+ 翻译键) |
|
||||
| `frontend/src/i18n/` / `locales/` | 国际化(zh-CN / en-US 双语) |
|
||||
| `frontend/src/pages/` | 少量页面级组件 |
|
||||
| `frontend/src/assets/` | 静态资源 |
|
||||
|
||||
@@ -187,11 +190,19 @@ aiops/
|
||||
| `agent/model/` | 上报数据结构 |
|
||||
| `agent/deploy/` | `install.sh` + systemd 服务文件 |
|
||||
|
||||
### 3.5 代码规模(实测)
|
||||
|
||||
| 层级 | 文件数 | 说明 |
|
||||
|------|--------|------|
|
||||
| 前端 `frontend/src` | 约 426 个 `.ts` / `.tsx` | 含组件、API、Hooks、Store、类型等 |
|
||||
| 后端 `backend` | 约 172 个 `.go` | 含 controller、model、pkg、router 等 |
|
||||
| Agent `agent` | 21 个 `.go` | 独立模块,仅依赖 `golang.org/x/sys` |
|
||||
|
||||
---
|
||||
|
||||
## 4. 构建与运行命令
|
||||
|
||||
统一入口是 `./run.sh`,优先使用它。`Makefile` 仅作为快捷别名。
|
||||
统一入口是 `./run.sh`,优先使用它。`Makefile` 仅作为快捷别名,且部分命令已落后于 `run.sh`(例如 `make dev` 调用 `./run.sh start` 实际不存在)。
|
||||
|
||||
### 4.1 本地开发
|
||||
|
||||
|
||||
Reference in new issue
Block a user