AIOps智能故障自愈自动处理服务器告警
核心答案
AIOps(智能运维)中的故障自愈,是指通过监控系统自动发现服务器异常(如CPU过载、磁盘满、服务宕机),并触发预设的修复脚本或API,实现无需人工处理即可恢复业务。
本文以开源工具Prometheus和Alertmanager为例,演示从告警生成到自动执行修复的完整流程,适合希望减少半夜被告警惊醒的运维新手。
你需要准备什么?
开始前,确保你有一台Linux服务器(CentOS 7+或Ubuntu 20.04+),并具备root或sudo权限。
还需要:
- 部署好Prometheus(用于采集服务器指标)
- 部署好Alertmanager(用于处理告警并转发)
- 一个简单的HTTP服务(如Nginx)作为被监控对象
- 能够执行修复脚本的d环境(例如在Alertmanager上配置webhook接收器,或直接在服务器上运行脚本)
如果你对Prometheus和Alertmanager还不熟悉,可以先在官网下载二进制包,按默认配置启动。
本文假设你已经跑通了基础监控。
动手配置:让告警触发自愈
1. 编写一个简单的自愈脚本
在服务器上创建一个修复脚本,用于重启卡死的Nginx服务。
例如 /usr/local/bin/auto_repair.sh:
#!/bin/bash
# 检查Nginx是否运行,未运行则启动
if ! systemctl is-active nginx > /dev/null 2>&1; then
systemctl restart nginx
echo "$(date) - Nginx was down, restarted." >> /var/log/auto_repair.log
fi
赋予执行权限:chmod +x /usr/local/bin/auto_repair.sh。
2. 配置Alertmanager的webhook接收器
Alertmanager支持通过webhook将告警发送给任意HTTP接口。
我们可以用一个简单的Python Flask服务接收告警并执行脚本。
新建 /opt/alert_webhook/app.py:
from flask import Flask, request
import subprocess
import json
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
alert = request.json
# 简单判断告警标签,只处理nginx相关的告警
if alert.get('groupLabels', {}).get('alertname') == 'NginxDown':
subprocess.run(['/usr/local/bin/auto_repair.sh'])
return 'OK'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
安装依赖:pip install flask,然后后台运行:nohup python /opt/alert_webhook/app.py &。
3. 配置Alertmanager路由到webhook
编辑Alertmanager的配置文件 alertmanager.yml:
route:
receiver: 'default-receiver'
group_wait: 10s
group_interval: 30s
repeat_interval: 1h
receivers:
- name: 'default-receiver'
webhook_configs:
- url: 'http://localhost:5000/webhook'
重启Alertmanager:systemctl restart alertmanager。
4. 创建告警规则
在Prometheus的规则文件中添加一条规则,例如 /etc/prometheus/rules/nginx.yml:
groups:
- name: nginx
rules:
- alert: NginxDown
expr: up{job="nginx"} == 0
for: 30s
labels:
severity: critical
annotations:
summary: "Nginx is down on {{ $labels.instance }}"
在Prometheus.yml中引入规则文件,重启Prometheus。
避坑指南
- 告警风暴:自愈脚本执行后需设置冷却时间,避免重复触发。可以在Alertmanager中配置
repeat_interval,或让脚本记录上一次修复时间,短时间内不重复执行。 - 误触发:告警规则要加
for持续时间(如30秒),防止瞬时波动导致误修复。 - 回滚机制:自动修复后建议记录日志并通知,如果修复失败(例如Nginx配置错误启动不起来),需要保留人工介入通道。
- 测试环境:首次部署务必在非生产环境验证,确认自愈逻辑正确再上线。
效果验证:模拟故障\,观察自动恢复
- 手动停止Nginx:
systemctl stop nginx。 - 等待30秒(告警规则中的for),查看Prometheus告警页面是否出现
NginxDown。 - 检查Alertmanager是否将告警转发到webhook,查看
/var/log/auto_repair.log是否有重启记录。 - 用
systemctl status nginx确认nginx已自动启动。 - 重复测试几次,确保不会无限重启(例如脚本中检查当前状态)。
常见问题答疑
Q1:AIOps自愈需要很复杂的AI算法吗?
不一定。本文使用的按规则触发脚本属于最简实现,已能满足大部分常见故障。真正的AI决策层用于处理更复杂的关联分析和预测,中小环境从规则起步即可。
Q2:自愈脚本执行失败怎么办?
建议在脚本中添加错误处理,并将失败结果通过其他渠道(如钉钉、企业微信)通知运维人员。可以继续使用Alertmanager的另一个receiver发送告警。
Q3:我只有一台服务器,适合用AIOps吗?
适合。一台服务器更需要自动化来减少人工巡检。Prometheus和Alertmanager都能单机部署,资源占用很低。
Q4:我不想用自己写的webhook,有没有现成的工具?
有。例如开源的“Shinken”、“StackStorm”,以及商业产品“Moogsoft”、“Splunk IT Service Intelligence”都提供故障自愈能力。本文的方案适合快速实验和学习。