AI运维自动化闭环搭建指南:从监控告警到自修复
为什么需要AI运维自动化闭环
服务器运维中,故障响应总是慢半拍?
人工盯着告警、手动登录修复,不仅累还容易漏。
AI运维自动化闭环的思路就是:监控发现异常 → 自动触发修复 → 验证恢复并反馈,形成一条闭环。
这样,即使半夜出问题,系统也能自己搞定。
本文适合零基础,只要你有一台Linux服务器就能跟着做。
准备阶段:你需要哪些东西
先确认环境基础,别急着装软件。
- 服务器一台:建议CentOS 7+或Ubuntu 20.04+,有root权限。
- 监控工具:以Prometheus + Alertmanager为例(开源免费),你也可以用Zabbix。
- 告警渠道:推荐钉钉机器人或企业微信Webhook,方便接收通知。
- 脚本执行权限:提前准备一个用于修复的脚本目录,比如
/opt/auto_fix/。
如果还没装Prometheus,可以先用Docker快速部署,后面会讲。
第一步:部署监控并配置告警规则
- 安装Prometheus和Alertmanager(简化版):
# 下载二进制包(示例版本,请访问官网获取最新)
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar xzf prometheus-*.tar.gz && cd prometheus-*
# 修改prometheus.yml,添加监控目标(比如本机)
编辑 prometheus.yml,在 scrape_configs 下添加:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100'] # 需要先安装node_exporter
- 配置告警规则:创建规则文件
rules/cpu_alert.yml:
groups:
- name: cpu_usage
rules:
- alert: HighCpuUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 1m
labels:
severity: critical
annotations:
summary: "CPU使用率超过80%"
在 prometheus.yml 中引用:rule_files: ["rules/*.yml"]。
- 启动Prometheus和Alertmanager:
./prometheus --config.file=prometheus.yml &
./alertmanager --config.file=alertmanager.yml &
第二步:配置告警通知到钉钉/微信
Alertmanager需要配置发送告警到你的机器人。
以钉钉为例,先创建机器人拿到Webhook地址。
编辑 alertmanager.yml:
route:
receiver: 'dingtalk'
receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'https://oapi.dingtalk.com/robot/send?access_token=你的token'
send_resolved: true
这样,当CPU超过80%持续1分钟,你就会收到钉钉告警。
但只是通知还不够,我们要自动修复。
第三步:编写自动修复脚本并触发闭环
核心是:告警触发后,Alertmanager通过webhook调用你的修复脚本。
- 创建一个简单的修复脚本
/opt/auto_fix/restart_nginx.sh:
#!/bin/bash
# 如果CPU高,尝试重启Nginx(示例)
systemctl restart nginx
echo "$(date) Nginx restarted due to high CPU" >> /var/log/auto_fix.log
给执行权限:chmod +x /opt/auto_fix/restart_nginx.sh
- Alertmanager使用webhook接收器:你可以用
alertmanager-webhook-adapter或直接写一个简单的HTTP服务。但新手更推荐使用 Alertmanager的webhook直接调用外部脚本?官方不支持直接调用脚本,需要中间层。别担心,用Python写一个极简webhook服务:
# webhook_server.py
from flask import Flask, request
import subprocess
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
# 解析告警数据,判断是否执行修复
data = request.json
for alert in data.get('alerts', []):
if alert['labels']['alertname'] == 'HighCpuUsage':
subprocess.run(['/opt/auto_fix/restart_nginx.sh'])
return 'ok', 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
运行:python3 webhook_server.py &
- 修改Alertmanager配置,将接收器改为Webhook指向你的Python服务:
receivers:
- name: 'auto_fix'
webhook_configs:
- url: 'http://localhost:5000/webhook'
route中改为 receiver: 'auto_fix'。
这样,当CPU告警触发,Alertmanager会发POST请求到你的webhook,webhook执行修复脚本。闭环形成。
避坑指南:这些细节必须注意
- 脚本权限与安全:修复脚本必须以root或指定用户运行,避免权限不足。建议用
sudo并配置NOPASSWD。 - 误修复风险:不要在脚本里直接
systemctl restart所有服务。最好先检查状态,比如if systemctl is-active nginx; then restart; fi。 - 日志记录:每次修复都要记日志,方便回溯问题。
- 告警风暴:如果修复脚本执行后问题没解决,告警会重复触发,导致脚本无限执行。建议在脚本里加入冷却时间,比如检查上次执行时间。
- 测试环境先行:闭环搭建好后,先模拟故障(比如手动压高CPU),观察是否自动修复。
效果验证:亲眼看看闭环怎么跑
- 模拟高CPU:执行
stress --cpu 2 --timeout 120(需要安装stress工具)。 - 等待1分钟(告警规则中的for时间)。
- 观察自动修复:查看
/var/log/auto_fix.log是否有记录,检查Nginx是否被重启。 - 钉钉通知:你会收到告警恢复消息(如果配置了send_resolved)。
如果一切正常,你已经亲手完成了AI运维自动化闭环的搭建。
后续还可以扩展更多规则(内存、磁盘、进程挂掉等),让服务器更省心。
常见问题解答
Q:Python webhook服务会不会不稳定?
A:可以用systemd管理,设置Restart=always。或者改用更成熟的方案如alertmanager-webhook-adapter。
Q:没有Python环境怎么办?
A:用Go或Shell写一个简单HTTP服务也行。或者直接使用现成的Prometheus Agent模式(但复杂一些)。
Q:修复脚本执行失败怎么办?
A:在webhook里捕获异常并记录到日志,同时可以发一条额外通知告诉你修复失败。
如果你在部署中遇到其他问题,建议先检查Prometheus和Alertmanager的日志(--log.level=debug)。
闭环的关键是每一步的连通性,逐步测试即可。