AIOps智能故障自愈服务器自动处理配置教程
什么是AIOps智能故障自愈?
AIOps(智能运维)中的故障自愈,指的是通过监控系统和自动化脚本,让服务器在发生指定故障时自动执行恢复操作,无需人工介入。
比如服务器进程挂掉后自动重启、磁盘空间不足时自动清理日志。
这套机制能显著缩短故障恢复时间,尤其适合无法24小时值守的团队。
搭建自愈功能前要准备什么
- 一台Linux服务器(示例使用Ubuntu 20.04,CentOS也适用),并拥有root或sudo权限。
- 监控工具:推荐安装Prometheus + Alertmanager,或者直接用cron+shell脚本实现简单自愈。本文使用cron+shell方案,降低门槛。
- 基础命令知识:会使用vim编辑文件,以及systemctl管理服务。
- 测试服务:以Nginx为例,先确保已安装Nginx(
sudo apt install nginx -y)。
手把手配置一个故障自愈场景
目标:当Nginx进程意外退出时,自动重启Nginx并记录日志。
第一步:编写监控与自愈脚本
在/usr/local/bin/下创建文件nginx-autoheal.sh:
#!/bin/bash
# AIOps故障自愈:检测Nginx进程,若未运行则重启
LOG_FILE="/var/log/nginx-autoheal.log"
NGINX_SERVICE="nginx"
if ! systemctl is-active --quiet $NGINX_SERVICE; then
echo "$(date) - Nginx 未运行,尝试重启..." >> $LOG_FILE
systemctl restart $NGINX_SERVICE
sleep 2
if systemctl is-active --quiet $NGINX_SERVICE; then
echo "$(date) - Nginx 已成功重启" >> $LOG_FILE
else
echo "$(date) - Nginx 重启失败,请人工检查" >> $LOG_FILE
fi
else
echo "$(date) - Nginx 运行正常" >> $LOG_FILE
fi
赋予执行权限:
sudo chmod +x /usr/local/bin/nginx-autoheal.sh
第二步:定时执行脚本
使用crontab设置每分钟检查一次:
sudo crontab -e
添加以下行(注意使用绝对路径):
* * * * * /usr/local/bin/nginx-autoheal.sh
保存退出。
脚本会每分钟检查Nginx状态,若发现异常自动重启。
第三步:测试自愈效果
- 先手动停止Nginx:
sudo systemctl stop nginx - 等待1分钟,查看日志:
sudo tail -f /var/log/nginx-autoheal.log
预期输出类似:
Thu Apr 10 14:30:01 UTC 2025 - Nginx 未运行,尝试重启...
Thu Apr 10 14:30:03 UTC 2025 - Nginx 已成功重启
再检查Nginx状态:systemctl status nginx,应为active(running)。
常见踩坑点和注意事项
- 权限问题:脚本中
systemctl restart nginx需要root权限,务必用sudo crontab -e添加任务,否则可能执行失败。 - 日志轮转:随着时间增加,
/var/log/nginx-autoheal.log会变大,建议配置logrotate定期清理。 - 防抖设计:有时服务频繁重启可能是底层问题,不推荐无限重启。可在脚本中加入重启次数限制,例如5分钟内最多重启2次,避免陷入重启死循环。
- 监控覆盖:cron方案只能检测进程状态,对于服务响应慢、端口不通等情况无法覆盖。生产环境建议使用更专业的监控工具(如Prometheus + Alertmanager),配合Webhook触发自愈脚本。
如何验证自愈功能持续生效
- 模拟多次故障:反复停止Nginx,观察每次是否都能在1分钟内自动恢复。
- 查看日志完整性:检查
/var/log/nginx-autoheal.log的时间记录是否连续,有无异常间隔。 - 系统资源监控:确保自愈脚本本身不消耗过多CPU/内存,可通过
top命令观察。
你还可以将这个概念扩展到其他服务:修改脚本中的服务名和重启命令,即可实现MySQL、Redis、Apache等服务的自动恢复。
如果你刚开始接触AIOps智能故障自愈服务器自动处理,建议先从这个简单的cron方案入手,理解自愈逻辑后再逐步引入告警驱动的高级方案。
遇到脚本执行不生效时,优先检查cron是否运行(ps aux | grep cron)和脚本是否有可执行权限。
通过以上步骤,你已经用最低成本实现了服务器故障自动处理,这也是AIOps落地的第一步。