187 lines
5.3 KiB
Plaintext
Raw Normal View History

# 服务器内置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