铸渊 ICE-GL-ZY001 c93f612962
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled
D122: 肥猫服务器配置更新 + server-agent模块(引擎内置自主运维Agent架构设计)
2026-06-03 23:50:06 +08:00

187 lines
5.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 服务器内置Agent · 架构推理链
> HLDP://zhuyuan/server-agent/ARCHITECTURE
> 讨论: 冰朔 + 铸渊 · D122
> 更新: 2026-06-03
---
## 链一 · 为什么需要Agent
@trigger: [冰朔] → [FM-GZ-001 exec卡死] → [systemd检测不到] → [需要云控制台重启]
@emergence:
[引擎健康检查=OK] → [exec无响应=死锁] → [systemd看不见这种故障]
△=engine活着但脑子不转 = 最隐蔽的故障形态
@lock:
⊢ exec卡死是systemd盲区。需要引擎内部自检机制。
| 置信=高 | 证据=FM-GZ-001 D122实测
@why:
今天FM-GZ-001的exec端点卡了10小时。health一直返回OK但所有命令超时。
没有SSH没有Agent——唯一的解是冰朔登录腾讯云控制台手动重启。
这不是设计缺陷——这是v2.x架构的边界。v3.0必须越过这个边界。
---
## 链二 · Agent做什么
@trigger: [冰朔] → [Agent就做一件事] → [检测+修复+回执]
@冰朔原话:
"就是这个Agent就做一件事。你给他打电话的时候他告诉你哪里有问题。
然后自己修了没。哪里解决不了。然后你远程告诉他做啥。
他就在服务器里操作。操作好了给你回执一个信号。你在上去继续操作。"
@lock:
⊢ Agent三大职责: ①心跳检测+故障诊断 ②自主修复(能修的自己修) ③回执通讯(修不了的报告)
| 置信=高
---
## 链三 · 故障场景全覆盖
@trigger: [铸渊] → [今天的所有故障复盘] → [Agent覆盖哪些]
### 场景1: exec卡死今天实际发生
Agent心跳检测: /exec ping每30秒一次
判定: 连续2次超时 → 非网络问题handler死锁
动作: systemctl restart guanghu-engine → 3秒恢复
回执: "exec卡死已自动重启。v2.1.0已生效。"
⊢ 不需要人类登录控制台
### 场景2: 磁盘即将爆满
Agent巡检: 每分钟 df -h
判定: 使用率 > 80% → 告警; > 90% → 自动清理
动作: 清理 journalctl 旧日志 → 如仍不够 → 报告铸渊
回执: "FM-SG-001 磁盘使用87%已清理日志释放1.2GB"
### 场景3: Nginx配置推送失败
Agent监听: nginx -t 返回非0
判定: 配置语法错误
动作: 自动恢复上次备份配置 → reload
回执: "Nginx配置回滚。上次有效配置已恢复。错误配置保存在 /tmp/nginx-failed.conf"
### 场景4: 内存即将爆满
Agent巡检: 每分钟 free -m
判定: 可用 < 200MB → 告警
动作: 诊断 top 5进程 → 报告铸渊(不自动kill)
回执: "FM-SG-001 可用内存仅180MB。top进程: next-server(128MB), gitea(100MB)"
---
## 链四 · Agent与铸渊的关系
@trigger: [冰朔] → [Agent不是替代铸渊] → [Agent是铸渊在服务器里的眼睛和手]
```
铸渊(远程)
├── "查一下肥猫磁盘" → Agent收到 → df -h → "还剩38G"
├── "重启引擎" → Agent收到 → systemctl restart → "已重启v2.1.0"
└── "为什么exec卡了" → Agent查日志 → 诊断报告 → 铸渊决定修法
Agent(本地每台服务器)
├── 心跳检测: /exec /health /status 每分钟
├── 资源巡检: df/free/ps 每分钟
├── 自主修复: 磁盘清理/Nginx回滚/引擎重启
└── 向上汇报: 异常 → 铸渊; 修复 → 记录
```
⊢ Agent = 铸渊在14台服务器里的14双眼睛和14双手
---
## 链五 · 技术实现
@trigger: [铸渊] → [Agent怎么嵌入引擎]
```
guanghu-engine v3.0
├── 主进程 (现有功能)
│ ├── /health
│ ├── /exec
│ ├── /status
│ └── /hlpd (v2.0+)
└── Agent子进程 (新增)
├── /agent/task ← 铸渊下任务
├── /agent/reply ← 任务结果
├── /agent/alert ← 自动告警
├── 心跳检测器 (每30秒)
├── 资源巡检器 (每60秒)
├── 模型调用器 (故障诊断用)
└── 命令执行器 (修复操作用)
```
### 模型调用
Agent内置轻量模型调用能力:
- 场景: 诊断不明原因的故障
- 输入: 系统日志 + 进程状态 + 错误码
- 输出: 故障类型 + 建议修复方案
- 成本: 每次诊断 ~0.01元
### 安全边界
Agent不能做的事(需要铸渊确认):
- kill用户进程
- 修改业务代码
- 删除用户数据
- 修改安全组
Agent可以自主做的事:
- 重启guanghu-engine
- 清理系统日志
- 回滚Nginx配置
- 报告异常状态
---
## 链六 · 部署清单
@trigger: [冰朔] → [第一次部署时要告诉人类开哪些端口]
每台新服务器的安全组端口清单:
| 端口 | 用途 | 方向 |
|------|------|------|
| 80 | Nginx HTTP | 入站 |
| 443 | Nginx HTTPS | 入站 |
| 3910 | guanghu-engine | 入站 |
| 3911 | guanghu-engine(大脑) | 入站 |
| 22 | SSH(备用) | 入站 |
| 3001-3005 | 应用服务(按需) | 入站 |
Agent相关端口(内网):
| 端口 | 用途 |
|------|------|
| :3910/agent/* | Agent通信端点 |
---
## 优先级
| 能力 | 优先级 |
|------|:--:|
| exec心跳检测+自动重启 | P0 |
| 资源巡检(磁盘/内存) | P1 |
| 模型故障诊断 | P1 |
| Nginx配置回滚 | P2 |
| 任务接受+回执通讯 | P2 |
---
> 讨论: 冰朔 + 铸渊 · D122 · 2026-06-03
> 状态: 架构设计阶段 · 下次继续实现
> 铸渊 ICE-GL-ZY001 · TCS-0003-ZY001
> 国作登字-2026-A-00037559