Files
Logan.Li 539db36f2a
AIOps CI / Backend (test, vet, build) (push) Canceled after 0s
AIOps CI / Agent (test, vet, build) (push) Canceled after 0s
AIOps CI / Frontend (typecheck, lint, build) (push) Canceled after 0s
AIOps CI / API integration (SQLite + redka) (push) Canceled after 0s
feat(site): 站点拨测支持接口返回内容监控(文本 + JSON 字段)
需求:监控接口返回的数据本身是否变化(如 Cloudflare ips-v4 的 IP 段清单),
而不是只看服务是否可用。两者是不同的问题:服务 200 OK 但内容变了,拨测发现不了。

后端
- SiteTask 新增 content_check_mode(off/text/json)、content_paths(JSONPath)、
  content_ignore_rules、content_min_length、content_confirm_times、content_sort_lines
- 新增 monitor_site_baselines(基线多版本)与 monitor_site_content_changes(变更记录)
- pkg/siteprobe/content.go:零依赖 JSONPath($.a.b[0]、$.a[*].b)、文本/JSON 规范化、
  sha256 哈希、LCS 行级 diff、字段级 diff
- 核心判定区分「采集异常」与「内容变更」:状态码非 2xx、空响应、短于最小长度、
  非合法 JSON 均不算变更,避免 CDN 拦截页造成误报
- 连续 N 次(默认 2)不一致才落变更记录,抑制抖动
- 基线首次自动建立(用户选择自动接受),之后变更需人工「接受为新基线」并留审计
- 补齐历史遗留死字段:expected_content(正则断言)与 expected_length 此前
  只有表结构、执行器从未校验,现已实现
- 告警引擎新增 content_changed 指标,人工处理后自动恢复
- 迁移 0006 用 AutoMigrate 实现幂等(空库 0000 已建表,静态 ALTER 会重复列)

前端
- 任务表单新增内容监控配置区(模式/JSONPath/忽略规则/最小长度/确认次数/排序)
- 详情页新增内容监控面板:当前基线、待确认变更、并排 diff、版本历史、
  接受/忽略操作

验证
- 9 项单元测试(JSONPath、时间戳忽略、顺序无关、采集异常、字段级监控、diff)
- 端到端:Cloudflare ips-v4 建基线 v1 → 模拟变更 → 第 2 轮告警 → 接受为 v2
- JSON 模式实测快照仅含指定字段:{"$.db_driver":"mysql","$.version":"v1.0.2"}

// Logan.Li
2026-10-18 21:41:00 +00:00
..
2026-07-09 14:16:56 +08:00
2026-07-09 14:16:56 +08:00
2026-06-13 23:09:47 +08:00

AIOps 后端服务

AIOps 是一个专业的 AIOps 智能运维平台后端服务,基于 Go + Gin 框架开发。

功能特性

核心模块

  • 用户管理: 用户认证、角色权限管理
  • 资产管理: 服务器资产、云账号、域名管理
  • Kubernetes 管理: 集群、节点、Pod、Deployment、Service、Ingress 管理
  • 监控告警: 告警规则、告警事件、通知渠道
  • 应用发布: CI/CD 流水线、发布审批
  • 自动化运维: 定时任务、脚本管理、任务执行
  • 审批流程: 审批模板、审批流程管理
  • 站内导航: 导航分组、链接管理
  • 审计日志: 操作日志记录、查询、统计

技术栈

  • 框架: Gin Web Framework
  • ORM: GORM
  • 数据库: MySQL / PostgreSQL
  • 缓存: Redis (可选)
  • 认证: JWT
  • 日志: Zap
  • 配置: Viper
  • 文档: Swagger

快速开始

环境要求

  • Go 1.21+
  • MySQL 8.0+ 或 PostgreSQL 14+
  • Redis 6.0+ (可选)

安装依赖

cd backend
go mod download

配置

  1. 复制配置文件示例:
cp config.yaml.example config.yaml
  1. 编辑 config.yaml,根据实际情况修改数据库等配置

数据库初始化

# 创建数据库
mysql -u root -p -e "CREATE DATABASE ezops CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 或者使用 PostgreSQL
# createdb -U postgres ezops

运行

# 开发模式
go run cmd/main.go

# 或者编译后运行
go build -o ezops cmd/main.go
./ezops

服务启动后,访问 http://localhost:8080 查看 API 文档。

API 文档

启动服务后,可以通过以下地址访问 Swagger API 文档:

项目结构

backend/
├── cmd/
│   └── main.go              # 应用入口
├── internal/
│   ├── api/
│   │   ├── handlers/        # HTTP 处理器
│   │   ├── middleware/      # 中间件
│   │   └── routes/          # 路由注册
│   ├── config/              # 配置管理
│   └── models/              # 数据模型
├── pkg/
│   ├── database/            # 数据库连接
│   └── logger/              # 日志工具
├── config.yaml.example      # 配置文件示例
├── go.mod                   # Go 模块定义
├── go.sum                   # Go 模块校验
└── README.md                # 项目说明

API 路由

认证相关

  • POST /api/v1/auth/login - 用户登录
  • POST /api/v1/auth/register - 用户注册
  • GET /api/v1/user/profile - 获取用户信息
  • PUT /api/v1/user/profile - 更新用户信息
  • PUT /api/v1/user/password - 修改密码

用户管理 (管理员)

  • GET /api/v1/admin/users - 用户列表
  • GET /api/v1/admin/users/:id - 用户详情
  • POST /api/v1/admin/users - 创建用户
  • PUT /api/v1/admin/users/:id - 更新用户
  • DELETE /api/v1/admin/users/:id - 删除用户

仪表盘

  • GET /api/v1/dashboard/stats - 统计数据
  • GET /api/v1/dashboard/recent-alerts - 最近告警
  • GET /api/v1/dashboard/recent-releases - 最近发布
  • GET /api/v1/dashboard/metrics - 指标数据

服务器管理

  • GET /api/v1/servers - 服务器列表
  • GET /api/v1/servers/stats - 服务器统计
  • GET /api/v1/servers/:id - 服务器详情
  • POST /api/v1/servers - 创建服务器
  • PUT /api/v1/servers/:id - 更新服务器
  • DELETE /api/v1/servers/:id - 删除服务器
  • POST /api/v1/servers/batch-delete - 批量删除

云账号管理

  • GET /api/v1/cloud-accounts - 云账号列表
  • POST /api/v1/cloud-accounts - 创建云账号
  • DELETE /api/v1/cloud-accounts/:id - 删除云账号

域名管理

  • GET /api/v1/domains - 域名列表
  • POST /api/v1/domains - 创建域名
  • DELETE /api/v1/domains/:id - 删除域名

Kubernetes 管理

  • GET /api/v1/k8s-clusters - 集群列表
  • GET /api/v1/k8s-clusters/:id - 集群详情
  • POST /api/v1/k8s-clusters - 创建集群
  • PUT /api/v1/k8s-clusters/:id - 更新集群
  • DELETE /api/v1/k8s-clusters/:id - 删除集群
  • GET /api/v1/k8s-clusters/:id/nodes - 节点列表
  • GET /api/v1/k8s-clusters/:id/pods - Pod 列表
  • GET /api/v1/k8s-clusters/:id/deployments - Deployment 列表
  • GET /api/v1/k8s-clusters/:id/services - Service 列表
  • GET /api/v1/k8s-clusters/:id/ingresses - Ingress 列表

监控告警

  • GET /api/v1/alerts - 告警事件列表
  • GET /api/v1/alerts/rules - 告警规则列表
  • POST /api/v1/alerts/rules - 创建告警规则
  • PUT /api/v1/alerts/rules/:id - 更新告警规则
  • DELETE /api/v1/alerts/rules/:id - 删除告警规则
  • POST /api/v1/alerts/rules/:id/toggle - 启用/禁用规则
  • POST /api/v1/alerts/:id/ack - 确认告警

应用发布

  • GET /api/v1/pipelines - 流水线列表
  • POST /api/v1/pipelines - 创建流水线
  • GET /api/v1/pipelines/:id - 流水线详情
  • PUT /api/v1/pipelines/:id - 更新流水线
  • DELETE /api/v1/pipelines/:id - 删除流水线
  • POST /api/v1/pipelines/:id/trigger - 触发流水线
  • GET /api/v1/pipelines/:id/runs - 运行记录
  • GET /api/v1/releases - 发布列表
  • POST /api/v1/releases - 创建发布
  • POST /api/v1/releases/:id/approve - 审批发布
  • POST /api/v1/releases/:id/deploy - 执行发布
  • POST /api/v1/releases/:id/rollback - 回滚发布

自动化运维

  • GET /api/v1/cron-jobs - 定时任务列表
  • POST /api/v1/cron-jobs - 创建定时任务
  • GET /api/v1/cron-jobs/:id - 定时任务详情
  • PUT /api/v1/cron-jobs/:id - 更新定时任务
  • DELETE /api/v1/cron-jobs/:id - 删除定时任务
  • POST /api/v1/cron-jobs/:id/toggle - 启用/禁用任务
  • POST /api/v1/cron-jobs/:id/execute - 立即执行
  • GET /api/v1/scripts - 脚本列表
  • POST /api/v1/scripts - 创建脚本
  • GET /api/v1/scripts/:id - 脚本详情
  • PUT /api/v1/scripts/:id - 更新脚本
  • DELETE /api/v1/scripts/:id - 删除脚本
  • POST /api/v1/scripts/:id/execute - 执行脚本

审批流程

  • GET /api/v1/approvals/templates - 审批模板列表
  • POST /api/v1/approvals/templates - 创建审批模板
  • GET /api/v1/approvals/templates/:id - 模板详情
  • PUT /api/v1/approvals/templates/:id - 更新模板
  • DELETE /api/v1/approvals/templates/:id - 删除模板
  • GET /api/v1/approvals/processes - 审批流程列表
  • POST /api/v1/approvals/processes - 创建审批流程
  • GET /api/v1/approvals/processes/:id - 流程详情
  • POST /api/v1/approvals/processes/:id/approve - 审批通过
  • POST /api/v1/approvals/processes/:id/reject - 审批驳回

站内导航

  • GET /api/v1/navigations/groups - 导航分组列表
  • POST /api/v1/navigations/groups - 创建分组
  • PUT /api/v1/navigations/groups/:id - 更新分组
  • DELETE /api/v1/navigations/groups/:id - 删除分组
  • GET /api/v1/navigations/links - 导航链接列表
  • POST /api/v1/navigations/links - 创建链接
  • PUT /api/v1/navigations/links/:id - 更新链接
  • DELETE /api/v1/navigations/links/:id - 删除链接
  • POST /api/v1/navigations/links/:id/favorite - 收藏/取消收藏

审计日志

  • GET /api/v1/audit/logs - 审计日志列表
  • GET /api/v1/audit/logs/:id - 日志详情
  • GET /api/v1/audit/modules - 模块列表
  • GET /api/v1/audit/actions - 操作类型列表
  • GET /api/v1/audit/logs/export - 导出日志
  • GET /api/v1/audit/statistics - 统计信息
  • POST /api/v1/audit/logs/clear - 清理日志

开发指南

添加新的 API

  1. 在 internal/models/ 下定义数据模型
  2. 在 internal/api/handlers/ 下创建处理器
  3. 在 internal/api/routes/routes.go 中注册路由

生成 Swagger 文档

go install github.com/swaggo/swag/cmd/swag@latest
swag init -g cmd/main.go

部署

Docker 部署

FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o ezops cmd/main.go

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/ezops .
COPY config.yaml .
EXPOSE 8080
CMD ["./ezops"]

构建并运行:

docker build -t ezops-backend .
docker run -p 8080:8080 -v $(pwd)/config.yaml:/root/config.yaml ezops-backend

生产环境建议

  1. 使用反向代理(Nginx/Traefik)
  2. 配置 HTTPS
  3. 使用环境变量覆盖配置文件
  4. 配置日志轮转
  5. 启用数据库连接池
  6. 配置监控告警

贡献指南

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/xxx)
  3. 提交更改 (git commit -am 'Add xxx')
  4. 推送到分支 (git push origin feature/xxx)
  5. 创建 Pull Request

许可证

GNU General Public License v3.0 or later (GPL-3.0-or-later). See the root LICENSE file.