AI驱动故障自愈实战:零基础搭建自动修复系统
什么是AI驱动故障自愈?
简单说,就是让服务器自己发现异常、自己修好。
不需要你半夜爬起来敲命令。
常见的场景包括:检测到Nginx挂掉立刻重启、磁盘快满了自动清理日志、CPU load过高自动降级服务。
真正的AI可能会用机器学习预测故障,但零基础入门可以先从规则化自愈开始——用脚本模拟“小脑反射”,也算迈进AI驱动故障自愈的第一步。
准备条件
- 一台Linux服务器(本文以Ubuntu 20.04为例)
- Python 3环境(系统自带)
- 一个正在运行的服务(比如Nginx,
apt install nginx -y) - 明白crontab基本用法(后面直接给命令)
第一步:写一个“发现异常”的脚本
AI驱动的核心是“感知”。
我们写一个最简单的CPU负载检测脚本:
#!/usr/bin/env python3
import psutil
import sys
# 获取最近1分钟CPU平均负载
load = psutil.getloadavg()[0]
threshold = 2.0 # 阈值根据自己的核数调整,单核建议1.0
if load > threshold:
# 输出告警,后续由定时任务捕获
print("CRITICAL: CPU load too high: {}".format(load))
sys.exit(1)
else:
print("OK: CPU load {}".format(load))
sys.exit(0)
将脚本保存为 /usr/local/bin/cpu_check.py,并赋予执行权限:
chmod +x /usr/local/bin/cpu_check.py
这个脚本返回非0时表示异常,后面就靠它触发自愈。
第二步:写一个自动修复脚本
发现异常后,怎么修?
我们简单重启Nginx并清理日志。
#!/bin/bash
# /usr/local/bin/self_heal.sh
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] Starting self-heal..."
# 重启Nginx
systemctl restart nginx
if [ $? -eq 0 ]; then
echo "[$DATE] Nginx restarted successfully."
else
echo "[$DATE] Failed to restart Nginx."
fi
# 清理超过7天的Nginx日志
find /var/log/nginx -name "*.log" -mtime +7 -delete
echo "[$DATE] Old Nginx logs cleaned."
同样赋予执行权限:
chmod +x /usr/local/bin/self_heal.sh
给root添加这两个脚本的执行权限(注意所有权)。
第三步:用crontab定时驱动“AI”
设置定时任务,每1分钟运行检测脚本,如果检测到异常则触发自愈。
crontab -e
添加以下行:
* * * * * /usr/local/bin/cpu_check.py || /usr/local/bin/self_heal.sh >> /var/log/self_heal.log 2>&1
解释:/usr/local/bin/cpu_check.py 被crontab执行,如果返回值不为0(即 || 后面的命令被执行),则运行 self_heal.sh。
所有输出记入日志。
第四步:验证效果
故意制造CPU高负载,看看系统是否自动恢复。
# 制造CPU压力(运行5分钟)
stress --cpu 1 --timeout 300
如果没有 stress 工具,先安装:
apt install stress -y
执行后,观察 /var/log/self_heal.log:
tail -f /var/log/self_heal.log
大约1分钟内就会看到类似:
[2025-03-28 15:10:01] Starting self-heal...
[2025-03-28 15:10:01] Nginx restarted successfully.
[2025-03-28 15:10:01] Old Nginx logs cleaned.
同时用 systemctl status nginx 确认Nginx已重启(Restart计数增加)。
高频问题解答
Q:这个脚本算AI驱动吗?
A:这是基于规则的自愈,属于AI驱动故障自愈的初级阶段。真正AI需要异常检测模型,你可以后续用历史数据训练一个简单的孤立森林模型替换阈值判断。
Q:CPU负载阈值设多少合适?
A:取决于CPU核心数。单核系统建议1.0,四核可以设3.5。先用 uptime 观察正常负载,再设定阈值。
Q:自愈脚本如果误修复怎么办?
A:建议先加入确认逻辑,比如连续3次异常才修复。也可以利用 flock 避免并行执行。
避坑指南
- 脚本路径尽量使用绝对路径,crontab的环境变量有限。
- 日志文件要配置logrotate,防止撑满磁盘。
- 不要同时检测多个指标,逐步增加复杂度。
- 生产环境建议先用非核心服务测试。
总结
从零搭建一个简易的AI驱动故障自愈系统并不神秘:一个检测脚本、一个修复脚本、一行crontab。
当你把这个最小闭环跑通后,可以再引入 Prometheus + Alertmanager 做更专业的告警触发,甚至用 Python 的 scikit-learn 做异常预测。
记住,故障自愈的核心是“快速发现 + 安全修复”,别让脚本本身变成新麻烦。
如果你在实践过程中遇到问题,欢迎在评论区留言交流。