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

AIOps 智能运维平台

企业级云原生智能运维解决方案,集成资产管理、Kubernetes 管理、应用发布、监控告警、自动化运维和 AI 智能分析。

技术栈

前端

  • React 19 + TypeScript + Vite
  • Tailwind CSS + shadcn/ui + PageShell 统一页面骨架(dg-page* 设计令牌)
  • Zustand (状态管理) / TanStack Query (数据获取)
  • i18next 国际化(中/英双语,zh-CN / en-US)
  • Recharts (图表) / Lucide React (图标)
  • CodeMirror 6 (YAML 编辑器) / xterm.js (WebSocket 终端)

后端

  • Go 1.25 / Gin Web Framework
  • GORM (ORM) / MySQL 8.0 / Redis 7 / SQLite (local 模式)
  • JWT 认证 / Zap 日志 / Viper 配置
  • WebSocket (Gorilla) / PTY 终端 (creack/pty)
  • 自研轻量 Kubernetes HTTP 客户端(channel.k8s.io WebSocket 协议)
  • go:embed 嵌入前端静态资源(单二进制 / 单容器部署)
  • LDAP / Active Directory 统一身份认证(登录、用户列表、批量导入)
  • Agent CLI 引擎(pkg/agentcli/):ReAct + Evolver + 双协议 LLM(OpenAI / Anthropic)

Agent

  • Go 1.22 模块(Go 1.25 工具链)静态编译 (CGO_ENABLED=0)
  • /proc 指标采集 + 远程任务双通道
  • 支持 linux-amd64 / linux-arm64 / darwin-arm64

三种部署方式

方式 命令 架构 适用场景
① 独立二进制 ./run.sh build → ./aiops 单文件 embed,输出到项目根目录 无 Docker/K8s,边缘/本机
② Docker Compose ./run.sh docker up 3 容器 (MySQL + Redis + AIOps embed) 单机生产、演示
③ Kubernetes ./run.sh kubernetes deploy embed 单容器 + MySQL/Redis StatefulSet 生产集群,devops 命名空间

统一入口 ./run.sh,详见 ./run.sh help。

版本与镜像

  • 发布版本:Git tag 为权威来源(如 v1.5.0)
  • Docker 镜像:lghost/aiops:<tag>(Docker Hub)
  • 二进制版本:./aiops version / GET /version
  • 一键发版:./run.sh release v1.5.0(打 tag → 编译二进制 → 构建镜像 → 推送 Docker Hub → 更新 K8s manifest)
docker login
./run.sh release v1.5.0
./aiops version                              # 查看二进制版本
curl http://localhost:8080/version           # 查看运行版本

快速开始

本地开发

./run.sh dev               # 前端 :5173 + 后端 :8080 (热重载)
./run.sh stop              # 停止
./run.sh status            # 查看状态

Docker Compose 部署

# 日常推荐:镜像已存在时,跳过构建直接启动(低负载)
./run.sh docker fast

# 代码有变更:增量构建 + 启动
./run.sh docker up
./run.sh docker up v1.5.0       # 指定版本构建

# 仅升级应用容器,不重建 MySQL/Redis
./run.sh docker upgrade

# 依赖或缓存异常时:无缓存全量重建
./run.sh docker up fresh

./run.sh docker push v1.5.0     # 构建并推送到 lghost/aiops
./run.sh docker down            # 停止容器
./run.sh docker logs            # 查看日志

访问地址(前后端同一端口):

小机器提示(2 核 / 8GB):docker up 会触发前端 npm run build(临时 node 进程 CPU 可达 100%+),属构建期正常现象;AIOps 运行时仅为 Go 二进制,稳态 CPU 通常 < 1%。日常用 docker fast 可避免重复编译。

Kubernetes 部署

./run.sh kubernetes deploy           # 构建镜像 + 全量部署
./run.sh kubernetes upgrade v1.5.0   # 指定版本滚动更新
./run.sh kubernetes push v1.5.0      # 构建并推送 Docker Hub

# 访问: http://<NODE_IP>:30080
# 镜像: lghost/aiops:<tag>

独立二进制部署

./run.sh build                    # 编译到项目根目录 ./aiops
./run.sh build tag v1.5.0         # 指定版本编译
./aiops version                   # 查看版本
./aiops --mode local              # 本地模式 (SQLite + redka)
./run.sh binary upgrade           # 停服 → 重编译 → 后台启动

Mac 上 ./run.sh build 产出 darwin 二进制,仅本机可用。
Linux 服务器请在 Linux 上构建,或使用 Docker/K8s embed 镜像(Dockerfile 固定 GOOS=linux GOARCH=amd64)。

Agent 构建

./run.sh build agent       # 交叉编译 Agent (linux-amd64 + linux-arm64)

./agent/bin/aiops-agent-linux-amd64 version

默认账号

用户名 密码 角色
admin 123456 超级管理员
ops01 123456 运维
dev01 123456 开发

生产环境请修改默认密码与 JWT_SECRET。

LDAP / Active Directory

系统设置 → LDAP 支持 OpenLDAP 与 Active Directory 双目录:

能力 OpenLDAP Active Directory
连接 / 登录认证 ✅ ✅
用户列表 / 批量导入 ✅ ✅
OU / 容器浏览 ✅ ✅(含 CN=Users 等容器)
目录内创建用户 ✅ ✅(需 LDAPS + 服务账号权限)

AD 推荐配置示例:

配置项 推荐值
目录类型 Active Directory
Base DN DC=company,DC=com
Admin DN CN=svc-aiops,CN=Users,DC=company,DC=com
搜索过滤器 留空(使用内置兼容过滤器)或 (sAMAccountName=%s)
用户名字段 sAMAccountName
LDAPS 创建 AD 用户时必须启用

项目结构

aiops/
├── frontend/                    # 前端 (React + TypeScript)
│   ├── src/
│   │   ├── api/                 # API 封装(按菜单域拆分:server/k8s/monitor/deploy/...)
│   │   ├── pages/               # 复杂页面(monitor/approval/audit 等域级页面)
│   │   ├── components/          # 业务组件 + layout(PageShell/PageTabs/...)
│   │   ├── locales/             # i18n 翻译文件 (zh-CN / en-US)
│   │   ├── i18n/                # i18next 初始化
│   │   ├── hooks/               # 自定义 Hooks(useTheme / useConfirm 等)
│   │   ├── store/               # Zustand 状态管理
│   │   └── types/               # TypeScript 类型
│   └── Dockerfile               # [legacy] 独立 Nginx 镜像,Compose 已改用 embed
│
├── backend/                     # 后端 (Go + Gin)
│   ├── main.go                  # 应用入口
│   ├── embed.go                 # go:embed 前端静态资源
│   ├── static/                  # 前端构建产物(embed 目标目录)
│   ├── controller/              # HTTP 处理器(60+ 文件按领域拆分)
│   ├── router/                  # 路由注册
│   ├── model/                   # GORM 数据模型(86+ 表)
│   ├── pkg/                     # agentcli/remoteexec/kubernetesclient/...
│   └── Dockerfile               # [legacy] 分离式后端镜像
│
├── agent/                       # 监控 Agent(独立 Go module)
├── docs/                        # 开发文档
│   └── agent/                   # Agent CLI 设计文档集
├── deploy/kubernetes/           # K8s 部署清单 (devops 命名空间)
├── docker-compose.yml           # MySQL + Redis + AIOps embed(3 容器)
├── docker-compose.k8s.yml       # 单应用容器(连接外部 DB)
├── Dockerfile                   # embed 单容器镜像(推荐)
├── run.sh                       # 统一入口脚本
└── aiops                        # 独立二进制产物(gitignore,项目根目录)

核心功能

模块 说明
仪表盘 成本统计、告警聚合、Top 资源、SSL 提醒、趋势图表
资产管理 服务器 CRUD、批量导入、WebShell、云账号/域名/账单
Kubernetes 管理 多集群、Deployment 三模式编辑器、Pod 终端/文件浏览、拓扑图、国际化
应用发布 CI/CD 流水线、发布配置、SSH + K8s 双路径部署、凭证管理
监控中心 监控大屏、主机指标、SNMP/站点拨测、中间件监控(Redis/MySQL 直连采集)、日志中心(Loki/ES)、日志告警引擎
自动化运维 定时任务、脚本库、远程执行(Go-native SSH,执行/上传)
AIOps 智能 AI 助手、告警分析、容量预测、Agent CLI(ReAct + WebSocket 实时回传 + 终端审计回放)
资源申请 云服务器/应用部署申请审批
系统管理 用户/角色、LDAP / AD 统一认证、操作审计、终端会话审计、凭证配置(7 种类型)、大模型设置(OpenAI + Anthropic 双协议)

UI 与体验

  • PageShell 设计系统:全站统一页面骨架(标题区 / 指标条 / 工具栏 / Tab / 内容区),CSS 变量驱动
  • 7 套主题:跟随系统、深海蓝、明亮白 + One Dark / Dracula / Tokyo Night / Catppuccin
  • 国际化:i18next 框架,已覆盖 dashboard / server / alert / approval / audit / deploy / k8s 等模块

常见问题

现象 原因 处理
docker up 时 node CPU 100%+ Docker 构建前端(npm run build) 正常,构建结束后自动消失;日常用 docker fast
构建后 load 仍偏高 宿主机其他服务(网关/监控 Agent) top 排查非 AIOps 进程
MySQL 内存占用高 默认 buffer pool 较大 Compose 已限制 innodb-buffer-pool-size=256M
Mac 二进制无法在 Linux 运行 平台不匹配 在 Linux 构建或使用 Docker 镜像
LDAP 登录失败 过滤器/字段映射与目录类型不匹配 系统设置选择正确目录类型并配置 user_mapping

文档

详细开发文档见 docs/README.md。

文档 说明
快速开始 环境准备、本地开发
部署指南 二进制 / Docker / K8s / 版本发版
开发规范 代码规范、Git 工作流、PageShell / i18n
项目结构 目录结构说明
AI Agent / Agent CLI 设计 ReAct 引擎、Evolver、安全系统
CLAUDE.md AI 助手指引(完整命令参考)
AGENTS.md AI Agent 工作指南

License

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

S
Description
No description provided
Readme GPL-3.0
78 MiB
0 Stars 0 Watchers 0 Forks
Languages
TypeScript 62.9%
Go 35.2%
Shell 1%
CSS 0.4%
Python 0.2%
Other 0.2%