如何教 n8n 自动修复服务器上崩溃的服务
熟悉的场景:半夜,一个运行数据库或媒体服务器的容器崩溃了。你被警报叫醒,打开终端,查看日志,重启崩溃的服务,然后心情很差地回去睡觉。常规监控只会发送恐慌消息。它看到了症状,但甚至不尝试找出原因。
热门科技博主 NetworkChuck 发布了一个有趣的仓库 n8n-terry-guide。里面有一份构建 Terry 的分步指南。这是一个 n8n 内部的虚拟系统管理员,可以检查服务、通过 SSH 连接到服务器查看日志,并在 Telegram 中请求重启权限。
这个想法听起来很有趣,但背后是一种实用的代理架构,可以轻松在你的服务器上复制。
Terry 是谁,为什么这不是另一个普通的机器人
通常,家庭实验室自动化是基于僵化的脚本构建的。服务崩溃——触发 docker restart 命令。如果端口被另一个进程占用,脚本就会崩溃并开始刷屏错误。
LLM 代理方法的工作方式不同。作者建议像培训技术支持实习生一样训练模型,逐步扩大其职责范围。在仓库中,整个流程被分解为五个演进阶段:
- 基础检查器。代理 ping 一个 HTTP 端点并检查特定的 HTML 标签。
- 诊断师。如果服务不可用,Terry 通过 SSH 连接,运行
docker ps,获取退出码和日志的最后几行。 - 自动修理工。模型尝试启动崩溃的容器并重新检查网站可用性。
- 故障排除员。代理遇到端口冲突,使用系统工具找到罪魁祸首进程,并做出决策。
- 人工介入。模型找到故障原因,形成行动计划,并在通讯软件中等待所有者的确认。
这里的主要特点是第五阶段。没有哪个理智的人会在没有控制的情况下给语言模型 root 权限。Terry 可以独立执行诊断,但任何修改命令都必须获得批准。
n8n 内部是如何连接的
所有逻辑都是使用标准 n8n 节点构建的,无需编写自定义 TypeScript 或 Python 代码。
方案的中心是一个 AI Agent 节点,连接了 GPT-4o-mini 模型和一个 Simple Memory 块。对于在服务器上执行命令,作者想出了一个优雅的解决方案:一个带有 SSH 节点的独立子工作流。
当代理需要检查系统状态时,它将这个子流程作为 Tool 调用,传递所需的命令:
docker inspect website --format='{{.State.ExitCode}}'
docker logs website --tail 10
为了自动化检查,在代理之前放置了一个 Schedule Trigger,每 5 分钟启动一次场景。为了防止对话变成一堆乱七八糟的文本,在模型输出端使用了 Structured Output Parser。代理必须以严格定义的格式返回 JSON:
{
"website_up": false,
"message": "Контейнер остановлен из-за нехватки памяти",
"applied_fix": false,
"needs_approval": true,
"commands_requested": "docker start website"
}
由于严格的结构,下一个节点 IF 或 Switch 可以立即判断是否一切正常。如果检测到故障,场景会向 Telegram 发送带有确认按钮的消息。点击"是"——n8n 将控制权返回给代理,它执行修复。
连接真实硬件
作者没有将自己限制在 Nginx 上的测试网站。指南包含了四种流行系统的系统提示和命令示例:
- Proxmox 虚拟机管理程序。代理通过
pvesh get /nodes获取节点状态、虚拟机列表,并检查 LXC 容器。 - UniFi 网络设备。向 UniFi Network API 请求监控接入点、客户端数量和流量消耗者。
- 网络附加存储 (NAS)。通过
smartctl检查磁盘的 SMART 属性,从/proc/mdstat读取 RAID 阵列状态,并在journalctl中检查关键错误。 - Plex 媒体服务器。检查 Web 界面并在挂起时正确重启。
对于磁盘和 NAS,Terry 被配置为严格以只读模式工作。提示词明确禁止执行格式化、重新挂载或停止存储池的命令。
可能遇到的陷阱
如果你决定在自己的服务器上部署这样的场景,请注意配置 AI 代理时经常被遗忘的几个细节。
首先,迭代限制。默认情况下,n8n 中的 AI Agent 节点每次运行最多进行 10 次工具调用。如果代理被 netstat 或 docker ps 的输出搞混,它会很快耗尽限制并崩溃并报错。提示词需要尽可能具体,缩小实验范围。
其次,会话传递。当按计划运行时,你没有实时聊天,所以需要在发送到代理内存之前,在中间 Edit Fields 节点中硬编码生成会话 ID chatId。否则,之前检查的上下文将会丢失。
第三,所谓的 God-Mode。在仓库中有一个具有完全权限的提示词,可以自动修复任何问题。在生产服务器上启用这个绝对不值得:模型可以轻易删除一个需要的容器来释放被占用的端口。
值得尝试吗
仓库 n8n-terry-guide 不包含现成的工作流导出文件——它是一组配置、分步说明和精炼的提示词。如果你已经为家庭或工作需求运行 n8n,这个指南为创建值班助手提供了一个出色的框架。
这个项目会受到那些厌倦了愚蠢警报、想要在 Telegram 中收到的不是"服务崩溃"的尖叫,而是带有"修复它"按钮的现成诊断的人的欢迎。从小处开始:配置一个测试容器的检查,尝试 Telegram 集成,评估将日常任务委托给语言模型有多方便。
相关项目