AIOps智能故障自愈服务器自动处理告警

为什么需要智能故障自愈

传统服务器告警依赖人工盯屏和手动处理,效率低且容易漏掉。
AIOps智能故障自愈的思路是:监控系统检测到异常后,自动执行预定义的修复动作(重启服务、清理磁盘、扩容等),大幅缩短故障恢复时间。
本文从零开始,教你搭建一套能自动处理常见告警的自愈系统。

准备工作:你需要哪些组件

实现自动告警处理,至少需要三层:

  • 监控采集端:推荐 Prometheus + node_exporter,采集CPU、内存、磁盘、进程等指标。
  • 告警引擎:Alertmanager,负责接收告警并路由到执行器。
  • 自愈执行器:可以是一台管理机上的脚本,通过SSH或API调用目标服务器执行修复命令。

环境假设:一台监控中控机(CentOS 7+),若干被管服务器。
已安装 Docker 可快速部署 Prometheus 和 Alertmanager。

分步搭建自动告警与自愈流程

步骤1:部署 Prometheus 和 Alertmanager

在中控机上执行:

# 拉取镜像并启动 Prometheus
docker run -d --name prometheus -p 9090:9090 \
  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

# 启动 Alertmanager
docker run -d --name alertmanager -p 9093:9093 \
  -v /opt/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  prom/alertmanager

修改 prometheus.yml,添加告警规则和 Alertmanager 地址。

步骤2:配置自动触发自愈的 Webhook

Alertmanager 支持 webhook 接收器,当告警触发时,它会 POST 一个 JSON 到指定 URL。
我们写一个简单 Python 自愈脚本(selfheal.py),接收告警后根据告警标签执行对应修复。

#!/usr/bin/env python3
import json, subprocess, sys
from flask import Flask, request

app = Flask(__name__)

FIX_MAP = {
    "disk_usage": "df -h | grep /data && echo '清理日志' || true",
    "high_cpu": "systemctl restart mysqld"
}

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.json
    for alert in data.get('alerts', []):
        labels = alert.get('labels', {})
        fix_key = labels.get('alertname')
        cmd = FIX_MAP.get(fix_key)
        if cmd:
            # 通过 SSH 在被管服务器上执行(需预先配好免密)
            subprocess.run(['ssh', labels['instance'], cmd])
    return 'ok'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

运行脚本:python3 selfheal.py &,确保端口可达。

步骤3:配置 Alertmanager 发送到自愈 Webhook

编辑 alertmanager.yml

receivers:
- name: 'selfheal'
  webhook_configs:
  - url: 'http://中控机IP:5000/webhook'
route:
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 5m
  receiver: 'selfheal'

重载 Alertmanager:docker restart alertmanager

避坑指南与常见问题

  • 免密 SSH 必须提前配置:自愈脚本通过 SSH 执行命令,如果没配免密,脚本会卡住。在中控机生成密钥并分发到所有被管服务器。
  • 告警重复执行:Alertmanager 可能重复发送告警,脚本内应加幂等逻辑(比如检查服务是否已恢复)。
  • 测试告警:使用 amtool 或直接向 Prometheus 打一条测试告警,验证 Webhook 是否触发。
  • 权限问题:自愈命令可能需要 root 权限,建议被管服务器允许中控机以 root 登录,或配置 sudo 免密。
  • 日志与回滚:每次自动修复执行前,先备份状态(如保存进程列表),修复失败时能手动回滚。

效果验证:让故障自己修复

在任意被管服务器上模拟磁盘使用率过高:

dd if=/dev/zero of=/tmp/bigfile bs=1M count=500

等待 Prometheus 告警触发(默认规则如 disk_usage > 80%),Alertmanager 会 POST 到自愈脚本,脚本执行清理命令,几秒后告警自动消除。
查看中控机日志可确认脚本执行记录。

如果你已经完成上述步骤,现在你的服务器已经可以自动处理常见告警了。
后续可以根据业务需要补充更多修复动作,比如重启 Nginx、扩容磁盘等。
建议从简单的告警开始,逐步完善自愈规则,避免误操作。

常见问题 FAQ

Q:自愈脚本没有执行怎么办?
A:检查 Webhook 端口是否开放,Alertmanager 网络是否可达,以及脚本是否打印了错误日志。

Q:告警只触发一次,但脚本执行了多次?
A:检查 Alertmanager 的 repeat_intervalgroup_interval,可能重复发送。可在脚本内用缓存去重。

Q:如何查看自愈记录?
A:自愈脚本可以写入日志文件,或发送到 Elasticsearch。简单做法:脚本内 print 输出并重定向到文件。

分享到:
上一篇
闲置住宅算力出租AI中转副业完整教程:手把手教你赚点电费
下一篇
容器横向渗透攻击防护加固服务器配置:容器横向渗透攻击防护
1
系统公告

机房迁移升级通知

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