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配置错误启动不起来),需要保留人工介入通道。
  • 测试环境:首次部署务必在非生产环境验证,确认自愈逻辑正确再上线。

效果验证:模拟故障\,观察自动恢复

  1. 手动停止Nginx:systemctl stop nginx
  2. 等待30秒(告警规则中的for),查看Prometheus告警页面是否出现NginxDown
  3. 检查Alertmanager是否将告警转发到webhook,查看 /var/log/auto_repair.log 是否有重启记录。
  4. systemctl status nginx确认nginx已自动启动。
  5. 重复测试几次,确保不会无限重启(例如脚本中检查当前状态)。

常见问题答疑

Q1:AIOps自愈需要很复杂的AI算法吗?
不一定。本文使用的按规则触发脚本属于最简实现,已能满足大部分常见故障。真正的AI决策层用于处理更复杂的关联分析和预测,中小环境从规则起步即可。

Q2:自愈脚本执行失败怎么办?
建议在脚本中添加错误处理,并将失败结果通过其他渠道(如钉钉、企业微信)通知运维人员。可以继续使用Alertmanager的另一个receiver发送告警。

Q3:我只有一台服务器,适合用AIOps吗?
适合。一台服务器更需要自动化来减少人工巡检。Prometheus和Alertmanager都能单机部署,资源占用很低。

Q4:我不想用自己写的webhook,有没有现成的工具?
有。例如开源的“Shinken”、“StackStorm”,以及商业产品“Moogsoft”、“Splunk IT Service Intelligence”都提供故障自愈能力。本文的方案适合快速实验和学习。

分享到:
上一篇
数据库定期自动碎片优化提速定时脚本
下一篇
慢查询批量优化脚本提升数据库查询速度:慢查询批量优化脚本
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意