1. 首页 > 技术教程 > 正文

AI Agent 接入飞书告警教程:服务器异常自动推送到群

服务器半夜宕机或者服务 OOM(Out of Memory)却没收到通知,是很多运维和开发人员最头疼的事。与其频繁刷新监控面板,不如让 AI Agent 替你盯着服务器,一旦发现异常直接推送到飞书群。主机选今天带来这篇实战教程,教你用 Python 脚本配合大模型 API,在 VPS 上部署一个轻量级的 AI Agent,实现服务器状态的智能分析与自动告警。

zhujixuan TASK 246

VPS 部署 AI Agent 接入飞书告警

这套方案的核心逻辑是:脚本定时采集系统状态 -> 发现异常 -> 调用 LLM API 进行智能分析(判断是重启、扩容还是查日志) -> 将分析结果通过 Webhook 发送到飞书群。这比单纯发一句“CPU 高了”要有用得多,AI Agent 能帮你初步定位原因。

#### 获取飞书群 Webhook 地址

要在飞书群里收到消息,得先给群聊配置一个机器人入口。

1. 在飞书群聊设置中,点击“群机器人” -> “添加机器人”。
2. 选择“自定义机器人”,给机器人起个名字,比如“VPS哨兵”。
3.安全设置建议勾选“IP 白名单”,填入你 VPS 的公网 IP,防止 Webhook 泄露后被恶意刷屏。
4. 创建完成后,复制一串以 `https://open.feishu.cn/open-apis/bot/v2/hook/` 开头的 URL,这就是 Agent 的“嘴巴”。

#### 配置 LLM API 与提示词

为了让告警信息具备“智能”,我们需要接入一个大模型。这里以兼容 OpenAI 格式的 API(如 DeepSeek、Moonshot 或本地 Ollama)为例。

创建一个工作目录,并安装依赖:

mkdir /opt/ai-alert-agent
cd /opt/ai-alert-agent
python3 -m venv venv
source venv/bin/activate
pip install requests psutil openai

新建 `alert_agent.py`,写入核心逻辑。这个脚本会检查 CPU 和内存使用率,如果超过阈值,就交给 AI 分析。

python
import os
import psutil
import requests
import json
from openai import OpenAI

FEISHU_WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx" # 替换你的 Webhook
LLM_API_KEY = "sk-xxxxxxxxxxxxxxxx" # 替换你的 LLM API Key
LLM_BASE_URL = "https://api.deepseek.com" # 替换为你的 API 地址
ALERT_THRESHOLD_CPU = 80 # CPU 告警阈值 %
ALERT_THRESHOLD_MEM = 85 # 内存告警阈值 %

client = OpenAI(api_key=LLM_API_KEY, base_url=LLM_BASE_URL)

def get_system_status():
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
return cpu, mem

def ask_ai_for_analysis(cpu, mem):
prompt = f"""
你是一个资深运维专家。当前服务器出现异常指标:
CPU 使用率: {cpu}%
内存使用率: {mem}%

请简要分析可能的原因(如:挖矿病毒、流量突增、进程死锁等),并给出 3 条紧急排查建议。
回复要精简,直接列出原因和建议,不要客套话。
"""
try:
response = client.chat.completions.create(
model="deepseek-chat", # 根据实际模型修改
messages=[
{"role": "system", "content": "你是一个专业的 Linux 运维助手。"},
{"role": "user", "content": prompt}
],
max_tokens=300
)
return response.choices[0].message.content
except Exception as e:
return f"AI 分析失败: {str(e)}"

def send_feishu_alert(message):
headers = {"Content-Type": "application/json; charset=utf-8"}
data = {
"msg_type": "interactive",
"card": {
"header": {
"title": {
"tag": "plain_text",
"content": "⚠️ 服务器异常告警"
},
"template": "red"
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": message
}
}
]
}
}
req = requests.post(FEISHU_WEBHOOK_URL, headers=headers, data=json.dumps(data))
print(req.text)

if __name__ == "__main__":
cpu, mem = get_system_status()
print(f"Current Status – CPU: {cpu}%, MEM: {mem}%")

if cpu > ALERT_THRESHOLD_CPU or mem > ALERT_THRESHOLD_MEM:
analysis = ask_ai_for_analysis(cpu, mem)
alert_msg = f"检测到异常:\nCPU: {cpu}%, 内存: {mem}%\n\nAI Agent 诊断建议:\n{analysis}"
send_feishu_alert(alert_msg)
else:
print("System normal.")

#### Systemd 常驻服务配置

脚本写好了,不能只跑一次。我们需要用 Systemd 把它变成一个守护进程,配合 Cron 定时触发,或者修改脚本逻辑写成死循环(建议用 Cron 触发,避免资源占用)。这里演示用 Cron 每 5 分钟执行一次。

编辑 crontab:

crontab -e

添加一行(注意修改路径):

*/5 * * * * /opt/ai-alert-agent/venv/bin/python /opt/ai-alert-agent/alert_agent.py >> /var/log/ai-agent.log 2>&1

这样,AI Agent 就会每隔 5 分钟“睁眼”看一次服务器状态。

#### 日志排查与故障修复

部署完别以为万事大吉,先看日志跑没跑起来。

查看运行日志:

tail -f /var/log/ai-agent.log

如果看到 `Current Status – CPU: 15%, MEM: 40%` 说明采集正常。如果飞书没收到消息,检查以下几点:

1.Webhook 验证:手动 `curl` 一下 Webhook URL,看能不能发个简单的 JSON 过去。飞书对 JSON 格式要求很严,多一个空格都可能 400 错误。
2.API Key 权限:确认 LLM 的 Key 有余额且支持该模型。
3.Python 环境:Cron 里用的 Python 必须是虚拟环境里的那个,否则找不到 `openai` 或 `psutil` 库。

老鸟叮嘱

1.别用 Root 跑脚本:虽然方便,但万一脚本漏洞被利用,就是服务器提权。新建个 `alert` 用户专门跑这个服务。
2.阈值别设太低:CPU 50% 就报警,半夜手机响个不停,过两天你就把它关了。建议 CPU 80%+ 且持续 2 分钟以上再报警,或者结合 Load Average 判断。
3.API Key 别硬编码:生产环境建议把 Key 写到 `/etc/profile.d/` 或环境变量文件里,脚本里用 `os.getenv` 读取,防止代码泄露导致 Key 泄露。
4.飞书限流:飞书机器人对频率有限制,别把 Cron 设成每分钟一次,否则会被封禁 Webhook。

FAQ

1. 这个 AI Agent 会消耗很多 VPS 资源吗?
不会。脚本本身非常轻量,只有在触发阈值时才会调用 LLM API,平时只采集本地 CPU 和内存,几乎无感。

2. 必须用付费的 LLM API 吗?
不一定。如果你 VPS 内存够大(建议 8G 以上),可以本地部署 Ollama 跑 `llama3` 或 `qwen2.5`,将 `LLM_BASE_URL` 指向 `http://127.0.0.1:11434/v1` 即可,完全免费且隐私安全。

3. 飞书收到的消息太慢怎么办?
慢通常出在 LLM API 响应上。可以调整 `max_tokens` 参数减少输出字数,或者换一个响应更快的模型端点。

4. 除了 CPU 和内存,还能监控什么?
可以扩展脚本,监控磁盘 IO、Nginx 502 报错数量、Docker 容器状态,甚至检测特定进程是否存在。

5. 为什么我手动运行脚本有消息,Cron 没反应?
通常是 Cron 的环境变量问题。在脚本里加载完整的 `.bashrc` 或者在 Crontab 里明确指定绝对路径,像上面命令那样使用虚拟环境内的 Python 是最稳妥的。

通过这套组合拳,你的 VPS 就算有了“智能管家”,遇到异常不再是冷冰冰的数字,而是直接给出排查建议的 AI 助手。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10201.html 商家投稿邮箱:zhujixuanblog@qq.com