187 lines
5.3 KiB
Plaintext
187 lines
5.3 KiB
Plaintext
# 服务器内置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
|