运维 VPS 最怕半夜报警或者服务卡死,盯着 Zabbix 看图表太累,不如让 AI Agent 帮你自动巡检。主机选今天分享这套方案,利用 Python 采集 CPU、内存、磁盘和负载数据,直接扔给大模型做智能诊断,不仅能发现问题,还能给出优化建议,比传统监控更懂运维,适合想折腾自动化工作流的朋友。

VPS部署AI工具:Agent巡检架构设计
这套 AI Agent 的核心逻辑不复杂:采集数据 -> 格式化 -> 扔给大模型 -> 输出报告。不要为了炫技搞微服务架构,一个 Python 脚本配合 Docker 容器就能跑得很稳。关键在于采集哪些指标,以及如何把运维数据翻译成大模型能听懂的 Prompt。
我们主要关注四个核心指标:CPU 使用率、内存剩余情况、磁盘 Inode 使用量以及系统 Load。这些数据通过 `psutil` 库获取,然后封装成 JSON 格式,通过 API 发送给 LLM(如 DeepSeek、GPT-4o 或 Claude),让 AI 返回一份可读的诊断报告。
采集CPU、内存与负载数据的Python脚本
先写个简单的采集函数。别依赖系统自带的 `top` 命令解析,用 Python 库更可靠。
pip install psutil requests openai
新建 `agent_check.py`,核心采集逻辑如下:
python
import psutil
import platform
import json
from datetime import datetime
def get_system_stats():
boot_time = psutil.boot_time()
cpu_percent = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory()
disk = psutil.disk_usage('/')
try:
load1, load5, load15 = psutil.getloadavg()
except Exception:
load1, load5, load15 = 0, 0, 0
stats = {
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"os": platform.system(),
"cpu_percent": cpu_percent,
"memory_total": round(mem.total / (1024.03), 2), # GB
"memory_available": round(mem.available / (1024.03), 2),
"memory_percent": mem.percent,
"disk_total": round(disk.total / (1024.03), 2),
"disk_used": round(disk.used / (1024.03), 2),
"disk_percent": disk.percent,
"load_avg": {"1min": load1, "5min": load5, "15min": load15}
}
return json.dumps(stats, indent=2)
这段代码把 VPS 的关键健康指标都打包成了 JSON。注意 `psutil.cpu_percent(interval=1)` 这里阻塞了一秒钟,是为了获取更准确的数值,在自动化工作流里要注意这个时间开销。
接入大模型API实现智能诊断
有了数据,接下来就是“大脑”部分。现在主流的大模型 API 都兼容 OpenAI 格式,我们直接用 `openai` SDK 或者 `requests` 库调用。为了演示通用性,这里用 `requests` 发起 POST 请求。
API Key安全配置与请求封装
千万别把 API Key 写死在代码里,这是大忌。通过环境变量读取,或者放在配置文件里并设好权限。
python
import os
import requests
API_KEY = os.getenv("LLM_API_KEY") # 建议在 Docker 启动时传入
BASE_URL = "https://api.deepseek.com" # 以 DeepSeek 为例,可换成 OpenAI 或其他兼容接口
MODEL_NAME = "deepseek-chat"
def ask_ai_for_diagnosis(system_stats_json):
prompt = f"""
你是一名资深 Linux 运维专家。请分析以下 VPS 的系统监控数据:
{system_stats_json}
请根据数据判断服务器状态是否健康。如果存在异常(如 CPU 过高、内存不足、磁盘满载或负载极高),请指出可能的原因并给出 3 条具体的解决建议。
如果一切正常,请简要总结当前资源使用情况。
输出格式要求:简洁明了,直接给出结论,不要有过多的客套话。
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
data = {
"model": MODEL_NAME,
"messages": [
{"role": "system", "content": "你是一个专业的运维助手,擅长分析服务器日志和监控指标。"},
{"role": "user", "content": prompt}
],
"temperature": 0.3 # 降低随机性,让回答更严谨
}
try:
response = requests.post(f"{BASE_URL}/chat/completions", headers=headers, json=data, timeout=30)
response.raise_for_status()
result = response.json()
return result['choices'][0]['message']['content']
except Exception as e:
return f"AI 诊断请求失败: {str(e)}"
编写System Prompt让AI懂运维
Prompt 的写法决定了 AI Agent 的智商。在 `messages` 列表里,System Prompt 设定为“专业运维助手”,User Prompt 里明确要求“判断健康状态”和“给出建议”。这里有个实战技巧:设置 `temperature` 为 0.3 或更低。运维数据是客观的,不需要大模型太有“创造力”,我们更需要稳定、确定的答案。
Docker部署与自动化工作流集成
脚本写好了,总不能手动在服务器上敲 `python3 agent_check.py`。把它封装进 Docker,配合 Cron 或者 n8n 这类自动化工具,才是正解。
编写Dockerfile构建轻量级镜像
Python 运行环境不小,我们用 `python:3.9-slim` 做基础镜像,体积小够用。
dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install –no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY agent_check.py .
ENV LLM_API_KEY=""
CMD ["python", "-u", "agent_check.py"]
别忘了在同级目录下建个 `requirements.txt`:
text
psutil
requests
构建镜像:
docker build -t vps-ai-agent:latest .
配置Cron定时任务与日志管理
如果不想搞复杂的 K8s 或 K8s Operator,直接用宿主机的 Crontab 调用 Docker 容器是最省心的。
编辑 crontab:
crontab -e
添加一行,比如每 30 分钟巡检一次:
*/30 * * * * docker run –rm -e LLM_API_KEY="你的_API_Key" vps-ai-agent:latest >> /var/log/vps_ai_check.log 2>&1
这里用了 `–rm`,容器跑完就删,不留垃圾。日志全部重定向到 `/var/log/vps_ai_check.log`。如果日志太长,记得配个 `logrotate`,或者简单点写个脚本定期清空。
查看日志:
tail -f /var/log/vps_ai_check.log
你会看到类似这样的输出:
> 当前服务器 CPU 使用率为 5%,内存使用 40%,磁盘使用 60%,负载 1.2。系统状态健康。建议继续保持监控,注意观察磁盘增长趋势。
如果负载飙到 10 以上,AI 可能会告诉你:
> 警告:系统 1 分钟平均负载过高。可能原因:某个进程死循环或流量突增。建议:1. 执行 `top` 查看高耗 CPU 进程;2. 检查 Web 服务日志;3. 临时考虑扩容或重启异常服务。
老鸟叮嘱
1.脱敏处理:不要把完整的 `psutil.pids()` 进程列表或者包含 IP、域名的日志直接发给大模型,只发指标摘要。虽然大模型厂商说不用数据训练,但安全意识不能少。
2.超时控制:调用 API 一定要加 `timeout`,网络抖动时别让脚本一直卡着,否则 Crontab 任务会堆积,把 VPS 搞挂。
3.成本控制:Token 是钱。巡检频率别设太高,5 分钟一次纯属浪费,半小时或一小时一次足够。Prompt 里限制输出长度,别让 AI 写小作文。
4.不要迷信 AI:AI Agent 给的建议是参考,不是真理。如果它说“重启服务器”,先看一眼是不是因为数据采集脚本自己卡死了。
FAQ
Q:这个方案适合 Windows VPS 吗?
A:代码里做了简单的兼容处理,但 Windows 没有 `loadavg` 概念,部分指令不适用。建议主要在 Linux 环境下跑,Windows 下可以用 WSL2。
Q:必须用 DeepSeek 或 OpenAI 吗?
A:只要 API 兼容 OpenAI 协议的都行,比如 Groq、Together AI 或者本地部署的 Ollama(需映射端口),改一下 `BASE_URL` 和 `MODEL_NAME` 即可。
Q:巡检发现异常怎么自动发消息?
A:可以让 AI 输出 JSON 格式,脚本解析后判断 `status` 字段,如果是 `critical`,就调用 Server酱、Bark Telegram Bot 的 Webhook 发送通知。
Q:Docker 容器里没有系统权限,采集的数据准吗?
A:读取 `/proc` 和系统状态信息通常不需要 root 权限。但如果你要巡检 Docker 容器本身的资源限制(而不是宿主机),需要挂载 `/proc` 和 `/sys`,或者使用 cgroups 相关的库,这比较复杂,本教程默认巡检宿主机整体状态。
这套方案把枯燥的运维数据变成了直观的“人话”,在自动化工作流里加个智能分析节点,能省下不少盯着屏幕的时间。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10092.html 商家投稿邮箱:zhujixuanblog@qq.com
