AI Agent自动处理服务器故障根因分析
场景与价值:为什么要用AI Agent处理服务器故障
服务器故障时,人工翻日志、查监控、定位根因往往耗时且依赖经验。
AI Agent可以自动接收告警、读取系统日志、调用大模型分析根因,并尝试执行预设修复命令,把排查时间从小时级压缩到分钟级。
本文基于开源工具(Prometheus + Alertmanager + LangChain + Ollama)搭建完整链路,零基础也能跟着做完。
准备工作:服务器环境与工具清单
你需要一台Linux服务器(CentOS 7+或Ubuntu 20.04+),并确认已安装Python 3.8+和Docker(可选)。
准备以下工具:
- Prometheus + Alertmanager:负责采集服务器指标并触发告警。
- Ollama:本地运行开源大模型(如qwen2:7b),避免数据外泄。
- LangChain + Python脚本:作为Agent核心,接收告警、查询日志、调用LLM分析。
安装命令示例:
# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2:7b
# 安装LangChain相关库
pip install langchain langchain-community requests pyyaml
如果使用Prometheus,建议用Docker快速部署:
docker run -d --name prometheus -p 9090:9090 prom/prometheus
实战配置:让Agent自动读取告警并调用大模型分析
核心流程:Alertmanager收到告警后,通过webhook转发给Agent脚本;
Agent脚本解析告警内容,拉取关联日志,构造Prompt发给Ollama,得到根因分析;
最后根据分析结果执行修复或发送通知。
1. 配置Alertmanager webhook
修改 alertmanager.yml,添加receivers:
receivers:
- name: 'agent-webhook'
webhook_configs:
- url: 'http://localhost:5000/alert'
2. 编写Agent脚本(agent.py)
from flask import Flask, request, jsonify
from langchain_community.llms import Ollama
import subprocess, json
app = Flask(__name__)
llm = Ollama(model="qwen2:7b")
@app.route('/alert', methods=['POST'])
def handle_alert():
data = request.json
alert_name = data['alerts'][0]['labels']['alertname']
# 根据告警名称拉取日志(示例:磁盘使用率告警查看df -h)
log = subprocess.getoutput("df -h | tail -5")
prompt = f"服务器告警:{alert_name}。当前磁盘使用情况:{log}。请分析可能的根因并给出修复建议。"
result = llm.invoke(prompt)
# 这里可根据result内容自动执行修复(如清理日志),需谨慎
return jsonify({"analysis": result})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
3. 启动Agent
python agent.py &
当Prometheus触发磁盘告警时,Alertmanager会自动调用此Agent,Agent分析日志后返回根因分析结果。
关键避坑:权限、幻觉与执行安全
- 权限控制:Agent如果有自动执行修复能力,务必用最小权限用户运行,且只允许执行白名单命令(如清理/tmp下临时文件),绝不能允许rm -rf /这类危险操作。
- LLM幻觉:大模型可能给出不存在的命令或错误分析。建议对LLM输出做正则或关键词校验,例如只执行匹配“清理日志”格式的指令。
- 日志拉取范围:不要一次拉取全部系统日志,避免Agent过载。应该只拉取告警对应时间窗口内的日志(使用journalctl --since)。
- 网络隔离:Agent、Alertmanager和Ollama最好在同一内网,避免API暴露到公网。
验证与排错:从模拟故障到正常应答
- 模拟磁盘告警:手动占用磁盘空间
dd if=/dev/zero of=/tmp/test bs=1M count=100。等待Prometheus检测到告警。 - 查看Agent日志:检查Agent是否收到webhook请求(Flask控制台输出)。
- 确认分析结果:访问Agent返回的analysis内容,看是否准确指出了磁盘满的根因(如/tmp文件占满)。
- 常见问题:
- Agent未收到告警:检查Alertmanager webhook配置是否正确,防火墙是否放通5000端口。
- Ollama响应慢:首次加载模型需时间,确保服务器内存充足(8GB以上)。
- 分析结果不准:调整Prompt模板,加入更具体的日志上下文,或尝试切换更大模型如qwen2:14b。
如果你正在处理AI Agent自动处理服务器故障根因分析,建议先按本文步骤完整执行,再根据自己的环境微调告警规则和修复脚本;
遇到异常时优先回看避坑和高频问题部分,通常能快速定位问题。