fix: favicon .ico 生成 + README 更新 + run.sh kubernetes 别名
- 新增 frontend/public/favicon.ico (4 size: 16/32/48/64) - index.html .ico 引用调整到 .svg 前面(兼容旧浏览器) - README.md 全量更新:Kubernetes 完整命令列表 + K8s 管理亮点 - run.sh 主入口添加 k8s 别名(向后兼容) - aiops-development skill 更新部署命令和 favicon 文档
This commit is contained in:
1 parent
f061785266
commit
65636b3f5a
14 files changed
+458
-521
No files matched your search
+13
-1
@@ -13,12 +13,24 @@
|
||||
| [开发规范](./development-guide.md) | 代码规范、Git 工作流 |
|
||||
| [部署指南](./deployment.md) | 生产环境部署 |
|
||||
| [开发日志](./dev-log.md) | 详细开发日志(按日期记录) |
|
||||
| [Redis 缓存策略](./redis-caching-strategy.md) | Redis 缓存使用现状与优化方案 |
|
||||
|
||||
## 设计文档
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [ROADMAP](./ROADMAP.md) | 项目路线图 |
|
||||
| [PDD 计划](./PDD_PLAN.md) | 产品驱动开发计划 |
|
||||
| [项目摘要](./PROJECT_SUMMARY.md) | 项目整体概述 |
|
||||
| [后端摘要](./BACKEND_SUMMARY.md) | 后端架构概述 |
|
||||
|
||||
## 根目录文档
|
||||
|
||||
以下文档位于项目根目录:
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [ROADMAP.md](../ROADMAP.md) | K8s 管理功能演进路线图 |
|
||||
| [TDD_PLAN.md](../TDD_PLAN.md) | TDD 验证计划 |
|
||||
| [PROJECT_EVALUATION.md](../PROJECT_EVALUATION.md) | K8s 管理功能评估基线 |
|
||||
| [README.md](../README.md) | 项目主说明 |
|
||||
| [CLAUDE.md](../CLAUDE.md) | AI 助手指引 |
|
||||
-379
@@ -1,379 +0,0 @@
|
||||
# AIOps 智能运维平台 - 产品路线图
|
||||
|
||||
> 版本: v1.0.0
|
||||
> 更新日期: 2025-04-14
|
||||
> 状态: 开发中
|
||||
|
||||
---
|
||||
|
||||
## 概述
|
||||
|
||||
AIOps 智能运维平台是一个面向企业级用户的云原生智能运维解决方案,集成了资产管理、应用发布、监控告警、自动化运维和AI智能分析等核心能力。本路线图规划了产品从MVP到成熟版本的演进路径。
|
||||
|
||||
---
|
||||
|
||||
## 版本规划
|
||||
|
||||
### Phase 1: MVP 核心功能 (已完成) - v0.1.0
|
||||
|
||||
**目标**: 构建基础运维平台,实现核心资产管理能力
|
||||
|
||||
#### 已完成功能
|
||||
|
||||
- [x] **仪表盘**
|
||||
- 成本费用月维度统计
|
||||
- 告警消息聚合展示
|
||||
- Top5 CPU/内存/磁盘使用率
|
||||
- SSL证书到期提醒
|
||||
- 系统健康度概览
|
||||
|
||||
- [x] **资产管理**
|
||||
- 服务器管理 (CRUD、批量导入、WebShell)
|
||||
- 云账号管理 (多云平台接入)
|
||||
- 域名管理
|
||||
- 区域管理
|
||||
- 云平台管理
|
||||
- 资源模型管理
|
||||
|
||||
- [x] **K8s集群管理**
|
||||
- 集群列表管理
|
||||
- 节点管理
|
||||
- 工作负载管理 (Deployment/Service/Ingress)
|
||||
- 架构拓扑可视化
|
||||
|
||||
- [x] **应用发布**
|
||||
- 流水线配置管理
|
||||
- 发布管理 (新建发布、发布历史)
|
||||
- 多环境支持
|
||||
|
||||
- [x] **监控告警**
|
||||
- 指标监控
|
||||
- 告警中心
|
||||
- 日志能力
|
||||
- 链路追踪
|
||||
- Grafana风格监控大屏
|
||||
|
||||
- [x] **自动化运维**
|
||||
- 定时任务管理
|
||||
- 脚本库
|
||||
- Ansible Playbook执行
|
||||
|
||||
- [x] **AIOps智能**
|
||||
- AI智能助手 (大模型对话)
|
||||
- SQL数据变更审计
|
||||
|
||||
- [x] **系统管理**
|
||||
- 用户管理
|
||||
- 角色权限
|
||||
- 操作审计
|
||||
- 系统设置
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: AI能力增强 (当前) - v0.2.0
|
||||
|
||||
**目标**: 深度集成AI大模型,实现智能运维能力
|
||||
|
||||
#### 进行中功能
|
||||
|
||||
- [x] **AI告警智能分析**
|
||||
- 告警根因自动分析
|
||||
- 相似历史案例匹配
|
||||
- 自动修复脚本生成
|
||||
- 修复建议推荐
|
||||
|
||||
- [x] **AI脚本生成器**
|
||||
- 自然语言生成运维脚本
|
||||
- 支持Bash/Python/Ansible
|
||||
- 脚本模板库
|
||||
- 一键测试执行
|
||||
|
||||
- [x] **AI故障诊断**
|
||||
- 故障症状智能分析
|
||||
- 多维度根因定位
|
||||
- 解决方案推荐
|
||||
- 诊断历史管理
|
||||
|
||||
- [x] **AI预测分析**
|
||||
- 关键指标趋势预测
|
||||
- 容量规划预警
|
||||
- 异常事件预测
|
||||
- 资源优化建议
|
||||
|
||||
- [x] **AIOps智能运维中心**
|
||||
- 统一AI功能入口
|
||||
- AI能力状态监控
|
||||
- 多模型提供商支持
|
||||
|
||||
#### 技术栈
|
||||
|
||||
```
|
||||
前端: React 18 + TypeScript + Vite + Tailwind CSS + shadcn/ui
|
||||
后端: Go + Gin + GORM
|
||||
AI集成: OpenAI / Anthropic / Azure OpenAI / Ollama
|
||||
监控: Prometheus + Grafana + SkyWalking
|
||||
数据库: MySQL + Redis
|
||||
消息队列: RabbitMQ / Kafka
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: 企业级功能 - v0.3.0 (计划 2025-Q3)
|
||||
|
||||
**目标**: 增强企业级特性,提升安全性和可扩展性
|
||||
|
||||
#### 计划功能
|
||||
|
||||
- [ ] **多云管理平台**
|
||||
- AWS/阿里云/腾讯云/华为云统一接入
|
||||
- 云资源自动发现
|
||||
- 成本分析和优化建议
|
||||
- 跨云资源调度
|
||||
|
||||
- [ ] **安全合规**
|
||||
- 安全基线检查
|
||||
- 漏洞扫描集成
|
||||
- 合规报告生成
|
||||
- 敏感操作审计
|
||||
|
||||
- [ ] **高级监控**
|
||||
- 自定义仪表盘
|
||||
- 告警规则智能推荐
|
||||
- 告警降噪和聚合
|
||||
- 多渠道告警通知
|
||||
|
||||
- [ ] **CI/CD增强**
|
||||
- 蓝绿发布支持
|
||||
- 金丝雀发布
|
||||
- 自动回滚
|
||||
- 发布审批流程
|
||||
|
||||
- [ ] **容器平台**
|
||||
- 容器镜像管理
|
||||
- Helm Chart仓库
|
||||
- 服务网格集成
|
||||
- Serverless支持
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: 智能化升级 - v0.4.0 (计划 2025-Q4)
|
||||
|
||||
**目标**: 实现全栈智能化,降低人工干预
|
||||
|
||||
#### 计划功能
|
||||
|
||||
- [ ] **智能自愈**
|
||||
- 故障自动检测
|
||||
- 自动修复执行
|
||||
- 修复效果验证
|
||||
- 修复策略学习
|
||||
|
||||
- [ ] **智能调度**
|
||||
- 资源自动扩缩容
|
||||
- 负载均衡优化
|
||||
- 成本最优调度
|
||||
- 预测性维护
|
||||
|
||||
- [ ] **知识图谱**
|
||||
- 运维知识库
|
||||
- 故障知识图谱
|
||||
- 智能问答增强
|
||||
- 经验沉淀复用
|
||||
|
||||
- [ ] **AIOps工作台**
|
||||
- 个性化运维视图
|
||||
- 智能任务推荐
|
||||
- 运维效率分析
|
||||
- 团队协作增强
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: 生态扩展 - v1.0.0 (计划 2026-Q1)
|
||||
|
||||
**目标**: 构建开放生态,支持第三方集成
|
||||
|
||||
#### 计划功能
|
||||
|
||||
- [ ] **开放API平台**
|
||||
- RESTful API完整覆盖
|
||||
- GraphQL支持
|
||||
- Webhook机制
|
||||
- SDK开发包
|
||||
|
||||
- [ ] **插件市场**
|
||||
- 插件开发框架
|
||||
- 官方插件库
|
||||
- 第三方插件审核
|
||||
- 插件交易机制
|
||||
|
||||
- [ ] **社区生态**
|
||||
- 开源部分核心模块
|
||||
- 开发者文档
|
||||
- 技术社区
|
||||
- 最佳实践分享
|
||||
|
||||
- [ ] **企业版功能**
|
||||
- 高可用架构
|
||||
- 多租户支持
|
||||
- SLA保障
|
||||
- 专属技术支持
|
||||
|
||||
---
|
||||
|
||||
## 技术架构演进
|
||||
|
||||
### 当前架构 (v0.2.0)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 前端层 │
|
||||
│ React + TypeScript + Vite + Tailwind CSS + shadcn/ui │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ API网关层 │
|
||||
│ Go + Gin + Middleware (Auth/RateLimit) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 业务服务层 │
|
||||
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
|
||||
│ │ 资产管理 │ 应用发布 │ 监控告警 │ 自动化 │ AIOps │ │
|
||||
│ └──────────┴──────────┴──────────┴──────────┴──────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 数据层 │
|
||||
│ MySQL + Redis + Prometheus + Elasticsearch │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ AI服务层 │
|
||||
│ OpenAI / Anthropic / Azure OpenAI / Ollama │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 目标架构 (v1.0.0)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 前端层 │
|
||||
│ React + 移动端App + CLI工具 + 可视化大屏 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 网关层 │
|
||||
│ Kong/Nginx + 负载均衡 + 服务发现 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 微服务层 │
|
||||
│ ┌────────┬────────┬────────┬────────┬────────┬────────┐ │
|
||||
│ │资产服务 │发布服务 │监控服务 │自动化 │AI服务 │平台服务│ │
|
||||
│ └────────┴────────┴────────┴────────┴────────┴────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 数据平台层 │
|
||||
│ 数据湖 + 实时计算 + 数据仓库 + 机器学习平台 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## AI能力路线图
|
||||
|
||||
### 当前能力 (v0.2.0)
|
||||
|
||||
| 能力模块 | 功能描述 | 完成度 |
|
||||
|---------|---------|--------|
|
||||
| AI智能助手 | 大模型对话、运维知识问答 | 100% |
|
||||
| 告警智能分析 | 根因分析、修复建议 | 100% |
|
||||
| 脚本生成器 | 自然语言生成脚本 | 100% |
|
||||
| 故障诊断 | 症状分析、方案推荐 | 100% |
|
||||
| 预测分析 | 趋势预测、容量规划 | 100% |
|
||||
|
||||
### 计划能力 (v0.4.0)
|
||||
|
||||
| 能力模块 | 功能描述 | 预计完成 |
|
||||
|---------|---------|----------|
|
||||
| 智能自愈 | 故障自动检测和修复 | 2025-Q4 |
|
||||
| 智能调度 | 资源自动优化调度 | 2025-Q4 |
|
||||
| 知识图谱 | 运维知识沉淀和复用 | 2025-Q4 |
|
||||
| 智能推荐 | 个性化运维建议 | 2025-Q4 |
|
||||
|
||||
---
|
||||
|
||||
## 集成路线图
|
||||
|
||||
### 监控集成
|
||||
|
||||
- [x] Prometheus
|
||||
- [x] Grafana
|
||||
- [x] SkyWalking
|
||||
- [x] Zabbix
|
||||
- [ ] ELK Stack
|
||||
- [ ] Jaeger
|
||||
- [ ] Datadog
|
||||
|
||||
### 云平台集成
|
||||
|
||||
- [x] 阿里云
|
||||
- [x] 腾讯云
|
||||
- [x] AWS
|
||||
- [ ] 华为云
|
||||
- [ ] Azure
|
||||
- [ ] Google Cloud
|
||||
|
||||
### DevOps集成
|
||||
|
||||
- [x] GitLab
|
||||
- [x] Jenkins
|
||||
- [ ] GitHub Actions
|
||||
- [ ] ArgoCD
|
||||
- [ ] Harbor
|
||||
|
||||
### AI模型集成
|
||||
|
||||
- [x] OpenAI GPT-4
|
||||
- [x] Anthropic Claude
|
||||
- [x] Azure OpenAI
|
||||
- [x] Ollama (本地)
|
||||
- [ ] 文心一言
|
||||
- [ ] 通义千问
|
||||
- [ ] Llama 3
|
||||
|
||||
---
|
||||
|
||||
## 里程碑
|
||||
|
||||
| 里程碑 | 版本 | 计划日期 | 关键交付物 |
|
||||
|-------|------|---------|-----------|
|
||||
| MVP发布 | v0.1.0 | 2025-04 | 核心功能可用 |
|
||||
| AI增强 | v0.2.0 | 2025-06 | AI能力完整 |
|
||||
| 企业版 | v0.3.0 | 2025-09 | 企业特性完整 |
|
||||
| 智能化 | v0.4.0 | 2025-12 | 全栈智能化 |
|
||||
| 正式发布 | v1.0.0 | 2026-Q1 | 生态开放 |
|
||||
|
||||
---
|
||||
|
||||
## 贡献指南
|
||||
|
||||
欢迎社区贡献!请参阅以下资源:
|
||||
|
||||
- [开发文档](./docs/DEVELOPMENT.md)
|
||||
- [贡献指南](./docs/CONTRIBUTING.md)
|
||||
- [API文档](./docs/API.md)
|
||||
|
||||
---
|
||||
|
||||
## 联系方式
|
||||
|
||||
- 项目主页: https://github.com/ezops/aiops-platform
|
||||
- 文档中心: https://docs.ezops.io
|
||||
- 社区论坛: https://community.ezops.io
|
||||
- 技术支持: support@ezops.io
|
||||
|
||||
---
|
||||
|
||||
*本路线图会定期更新,请以最新版本为准。*
|
||||
@@ -1832,3 +1832,39 @@ cd ~/devops/aiops
|
||||
- EZOps → AIOps 全局替换: frontend/backend/agent/scripts 全量扫描替换
|
||||
- 小写 ezops(Go module path/launchd plist/JWT secret)保留不改避免破坏编译/运行时
|
||||
- WebShell 欢迎语/Login 标题/LLM system prompt 全部统一为 AIOps
|
||||
|
||||
|
||||
## 2026-06-24 Agent v2.2 — 8 项新采集指标 + 端口策略 + 索引审计
|
||||
|
||||
### Agent 新增指标
|
||||
- **cpu.iowait** — /proc/stat field[4] 独立追踪,解耦高负载根因(计算 vs 磁盘瓶颈)
|
||||
- **memory.available_gb** — /proc/meminfo MemAvailable(含可回收缓存,真实可用内存)
|
||||
- **memory.swap_used_gb** — swap 已用 → OOM 金标准
|
||||
- **disk[*].inode_usage_pct** — statfs.Files/Ffree 计算,防文件数爆炸
|
||||
- **disk_io.util** — /proc/diskstats field[12] io_ticks 增量/时间 * 100%
|
||||
- **net.connection.total** — EST+TIME_WAIT+CLOSE_WAIT 汇总
|
||||
- **net.rx_errors / net.tx_errors** — /proc/net/dev fields[2]/[10],物理层故障告警
|
||||
|
||||
### 前端 HostMonitor 增强
|
||||
- 基础监控: +CPU IO等待(%) +可用内存(GB) +Swap使用率(%)
|
||||
- 磁盘监控: +Inode使用率(%)
|
||||
- 网络监控: TCP 四格(EST/TIME_WAIT/CLOSE_WAIT/总连接) + 带宽双线 + 错误(rx/tx)
|
||||
- 主机名粗体显示
|
||||
|
||||
### 端口监控策略
|
||||
- Agent 系统进程排除: sshd/rpcbind/master/systemd 等 18 个永远不上报
|
||||
- 白名单模式(默认): 全量上报
|
||||
- 黑名单模式: 仅选中端口上报 + 告警
|
||||
- 后端 PullPortPolicy: GET /api/v1/agent/port-policy?hostname=xxx
|
||||
- 前端策略配置: 白名单只读灰掉,黑名单可输入端口列表
|
||||
- DB 表: monitor_agent_port_policy (hostname UNIQUE + port_filter_mode + port_whitelist JSON)
|
||||
|
||||
### 数据库索引审计
|
||||
- 新增: asset_servers.ip + agent_status, sys_audit_logs.created_at, monitor_alert_contacts.channel_type, ops_task_executions.task_id + status
|
||||
- 清理: 20 个冗余重复索引 (GORM 改名残留)
|
||||
- K8s 表无需索引 (走 K8s API 不查 DB)
|
||||
|
||||
### Redis 缓存现状
|
||||
- ✅ 已用: Agent 指标 Sorted Set (TTL 7天) + 流水线日志 pub/sub
|
||||
- ❌ 未缓存: /servers 列表, /dashboard/stats, 告警中心
|
||||
- 待优化: 高频只读接口加 5-30s Redis 缓存
|
||||
@@ -0,0 +1,183 @@
|
||||
# Redis 缓存策略文档
|
||||
|
||||
> 版本: v0.43 | 最后更新: 2026-06-24
|
||||
|
||||
## 缓存总览
|
||||
|
||||
| 模块 | 缓存 | 方式 | Key 格式 | TTL | 说明 |
|
||||
|------|:--:|------|----------|-----|------|
|
||||
| Agent 指标热数据 | ✅ | Sorted Set | `agent:metrics:{hostname}:{metric}` | 7 天 | 聚合后批量写 MySQL |
|
||||
| 流水线日志 | ✅ | pub/sub + String | `pipeline:log:{runId}` | 30 min | 实时推送 + 历史缓存 |
|
||||
| Dashboard 统计 | ✅ | String (JSON) | `dashboard:stats` | 30 s | ~25 次 SQL → 1 次 Redis Get |
|
||||
| 服务器列表 | ✅ | String (JSON) | `servers:list:{kw}:{st}:{reg}:{p}:{ps}` | 10 s | JOIN 查询 → 缓存命中 ~1ms |
|
||||
| 告警中心 | ❌ | — | — | — | 表小,直接查 MySQL |
|
||||
| K8s 资源 | ❌ | — | — | — | 走 K8s API,不经过 MySQL |
|
||||
|
||||
## 缓存后端
|
||||
|
||||
支持双后端,通过配置 `driver` 字段切换:
|
||||
|
||||
| Driver | 场景 | 依赖 |
|
||||
|--------|------|------|
|
||||
| `redis` | Docker / 生产环境 | 外部 Redis 7 容器 |
|
||||
| `redka` | 二进制独立部署 | 内嵌,零依赖 |
|
||||
|
||||
```yaml
|
||||
# config.yaml
|
||||
redis:
|
||||
driver: redis # redis | redka
|
||||
host: aiops-redis # Docker 容器名
|
||||
port: 6379
|
||||
password: ""
|
||||
db: 0
|
||||
```
|
||||
|
||||
初始化逻辑在 `backend/cmd/main.go:129`,如果 Redis 不可用则 `cache = nil`,业务自动回退到无缓存模式。
|
||||
|
||||
## 缓存接口
|
||||
|
||||
```go
|
||||
// pkg/redis/redis.go
|
||||
type Cache interface {
|
||||
Get(ctx, key) (string, error)
|
||||
Set(ctx, key, value, expiration) error
|
||||
Del(ctx, keys...) error
|
||||
// ... ZAdd / ZRangeByScore / Publish 等
|
||||
}
|
||||
```
|
||||
|
||||
## 各缓存详解
|
||||
|
||||
### 1. Dashboard 统计 — `dashboard:stats`
|
||||
|
||||
**缓存位置**: `handlers/dashboard.go:GetStats`
|
||||
|
||||
**变更频率**: 低(统计数据,30s 延迟可接受)
|
||||
|
||||
**Key**: 全局单键 `dashboard:stats`
|
||||
|
||||
**实现流程**:
|
||||
|
||||
```
|
||||
请求 → cache.Get("dashboard:stats")
|
||||
├─ hit → json.Unmarshal → 返回(跳过 ~25 次 SQL)
|
||||
└─ miss → MySQL 聚合查询 → json.Marshal → cache.Set(30s) → 返回
|
||||
```
|
||||
|
||||
**写入不是异步的**:`cache.Set` 使用 `context.Background()`,缓存写失败不影响 HTTP 响应。
|
||||
|
||||
```go
|
||||
// 读缓存
|
||||
if cached, err := h.cache.Get(c.Request.Context(), cacheKey); err == nil && cached != "" {
|
||||
var stats models.DashboardStats
|
||||
if json.Unmarshal([]byte(cached), &stats) == nil {
|
||||
c.JSON(200, Response{Data: stats})
|
||||
return
|
||||
}
|
||||
}
|
||||
// ... 查询逻辑 ...
|
||||
// 写缓存
|
||||
if data, err := json.Marshal(stats); err == nil {
|
||||
_ = h.cache.Set(context.Background(), cacheKey, string(data), 30*time.Second)
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 服务器列表 — `servers:list:*`
|
||||
|
||||
**缓存位置**: `handlers/server.go:ListServers`
|
||||
|
||||
**变更频率**: 低(服务器列表相对稳定,10s TTL 足够短)
|
||||
|
||||
**Key 格式**: `servers:list:{keyword}:{status}:{region_id}:{page}:{page_size}`
|
||||
|
||||
- 按查询参数区分,不同过滤条件独立缓存
|
||||
- 写操作不主动失效(TTL 10s 自动过期)
|
||||
|
||||
**实现流程**:
|
||||
|
||||
```
|
||||
请求 → cache.Get("servers:list:{params}")
|
||||
├─ hit → json.Unmarshal → 返回(跳过 Preload JOIN)
|
||||
└─ miss → MySQL 查询 → json.Marshal → cache.Set(10s) → 返回
|
||||
```
|
||||
|
||||
```go
|
||||
// 读缓存
|
||||
if h.cache != nil {
|
||||
if cached, err := h.cache.Get(c.Request.Context(), cacheKey); err == nil && cached != "" {
|
||||
var resp models.Response
|
||||
if json.Unmarshal([]byte(cached), &resp) == nil {
|
||||
c.JSON(200, resp)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
// ... 查询逻辑 ...
|
||||
// 写缓存
|
||||
if h.cache != nil {
|
||||
if data, err := json.Marshal(resp); err == nil {
|
||||
_ = h.cache.Set(context.Background(), cacheKey, string(data), 10*time.Second)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Agent 指标热数据
|
||||
|
||||
**缓存位置**: `handlers/agent.go`
|
||||
|
||||
**Key 格式**: `agent:metrics:{hostname}:{metric}` (Sorted Set)
|
||||
|
||||
- Agent 上报数据先写 Redis Sorted Set(速度快)
|
||||
- 定时任务批量聚合后写入 MySQL(持久化)
|
||||
- TTL 7 天,历史数据以 MySQL 为准
|
||||
|
||||
### 4. 流水线日志
|
||||
|
||||
**缓存位置**: `handlers/ws_pipeline_log.go` + `handlers/pipeline.go`
|
||||
|
||||
- **实时推送**: Redis Pub/Sub,构建输出实时流式推送到前端
|
||||
- **历史缓存**: `pipeline:log:{runId}`,TTL 30 min
|
||||
- 超过 30 min 的日志从 MySQL 回查
|
||||
|
||||
## 容错设计
|
||||
|
||||
| 场景 | 行为 |
|
||||
|------|------|
|
||||
| Redis 不可用(启动时) | `cache = nil`,日志 Warn,正常启动 |
|
||||
| Redis 不可用(运行时) | `cache.Get()` 返回 error → 走 MySQL |
|
||||
| 缓存值反序列化失败 | 走 MySQL(原逻辑) |
|
||||
| 缓存写失败 | 静默忽略(`_ = h.cache.Set(...)`) |
|
||||
|
||||
**关键原则:缓存是加速层,不是依赖。任何缓存故障都不影响功能正确性。**
|
||||
|
||||
## 缓存大小估算
|
||||
|
||||
| Key | 单条大小 | 数量 | 估算总量 |
|
||||
|-----|---------|------|---------|
|
||||
| `dashboard:stats` | ~3 KB | 1 | ~3 KB |
|
||||
| `servers:list:*` | ~5 KB/组合 | ~5-10(常用过滤组合) | ~50 KB |
|
||||
| `agent:metrics:*` | ~200 B/指标 | ~15 指标 × 7 主机 | ~21 KB |
|
||||
| `pipeline:log:*` | ~50 KB/运行 | ~5 并发 | ~250 KB |
|
||||
| **合计** | | | **< 500 KB** |
|
||||
|
||||
## 性能对比
|
||||
|
||||
| 端点 | 缓存前 | 缓存命中 | 加速比 |
|
||||
|------|--------|---------|--------|
|
||||
| `GET /dashboard/stats` | ~150ms (~25 SQL) | ~1ms | ~150x |
|
||||
| `GET /servers` | ~10ms (Preload JOIN) | ~1ms | ~10x |
|
||||
|
||||
## Handler 缓存字段一览
|
||||
|
||||
所有带缓存的 handler 都持有 `cache ezredis.Cache` 字段,由 `routes.go` 统一注入:
|
||||
|
||||
```go
|
||||
// routes.go
|
||||
redisCache, _ := cache.(ezredis.Cache)
|
||||
|
||||
dashboardHandler := handlers.NewDashboardHandler(db, redisCache)
|
||||
serverHandler := handlers.NewServerHandler(db, cfg.JWT.Secret, redisCache)
|
||||
pipelineHandler := handlers.NewPipelineHandler(db, redisCache)
|
||||
wsLogHandler := handlers.NewWSPipelineLogHandler(db, redisCache)
|
||||
agentHandler := handlers.NewAgentHandler(db, redisCache, metricsHub)
|
||||
```
|
||||
Reference in new issue
Block a user