大模型AIOps实战:用开源模型搭建日志异常检测流水线
大模型AIOps实战的核心不是把模型接进监控就完事,而是让模型稳定地读日志、给出可核验的判断,并把结果送到值班人员能看到的地方。
下面这套流程适合已经有一台 Linux 服务器、希望用本地开源模型做日志异常初筛的运维新手,不依赖云厂商付费接口。
先明确适用条件与准备清单
这套方案适合日志量中等(每天几十 MB 到几百 MB)、已有基础监控但缺少语义级告警的场景。
如果日志量特别大,建议先做采样再送模型,否则推理成本会明显上升。
准备条件:
- 一台 4 核 8G 以上 Linux 服务器,磁盘预留 20G 以上给模型文件
- 已安装 Docker,用于运行本地模型服务
- Python 3.9 以上,用于写采集和调用脚本
- 一个能接收告警的渠道,例如企业微信机器人或邮件
部署本地模型服务
这里用 Ollama 作为模型运行环境,它把模型下载和接口暴露做了封装,适合快速验证。
在服务器上执行:
curl -fsSL https://ollama.com/install.sh | sh
systemctl enable --now ollama
ollama pull qwen2.5:7b
拉取完成后验证接口是否正常:
curl http://127.0.0.1:11434/api/tags
返回 JSON 中能看到模型名称,说明服务已就绪。
如果拉取很慢,可以先换用更小的模型做流程验证,确认链路通了再换大模型。
编写日志采集与模型调用脚本
核心思路是:定时读取新增日志,截取最近一段窗口,拼成提示词发给模型,让模型只回答是否存在异常及原因。
新建脚本 /opt/aiops/check_log.py:
import json, subprocess, urllib.request
LOG_FILE = "/var/log/nginx/error.log"
PROMPT_TPL = "你是运维助手,只判断下面日志是否存在异常,异常则输出异常级别和一句话原因,正常则只输出 NORMAL:\n{log}"
def tail_log(path, lines=80):
return subprocess.check_output(["tail", "-n", str(lines), path], text=True)
def ask_model(text):
payload = json.dumps({
"model": "qwen2.5:7b",
"prompt": PROMPT_TPL.format(log=text),
"stream": False
}).encode()
req = urllib.request.Request(
"http://127.0.0.1:11434/api/generate",
data=payload,
headers={"Content-Type": "application/json"}
)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.loads(resp.read())["response"].strip()
if __name__ == "__main__":
log_text = tail_log(LOG_FILE)
result = ask_model(log_text)
print(result)
先手动运行一次:
python3 /opt/aiops/check_log.py
预期结果是模型返回 NORMAL 或一段异常描述。
如果返回空内容或超时,先检查模型服务是否在运行、日志路径是否存在。
接入定时任务与告警
脚本能跑通后,用 cron 每 10 分钟执行一次,并把异常结果推送到告警渠道。
编辑 crontab:
crontab -e
加入一行:
*/10 * * * * /usr/bin/python3 /opt/aiops/check_log.py >> /var/log/aiops_check.log 2>&1
然后在脚本中判断结果,如果不等于 NORMAL 就调用 webhook。
推送部分建议单独封装函数,避免把密钥写死在主逻辑里。
验证方式:手动制造一条错误日志,观察 /var/log/aiops_check.log 是否出现异常描述,并确认告警渠道收到消息。
避坑与常见问题
- 模型响应慢导致任务堆积:cron 不会等上一次执行完,可在脚本开头加文件锁,例如
flock -n /tmp/aiops.lock。 - 日志截取窗口过大:一次送太多行会拖慢推理,建议先用
tail控制行数,再逐步调整。 - 模型输出不稳定:提示词里明确要求“只输出 NORMAL 或异常描述”,减少自由发挥。
- 权限问题:cron 运行用户可能读不到日志文件,确保执行用户对日志路径有读权限。
效果验证与后续优化
验证分三步:先看脚本单次输出是否符合预期,再看 cron 日志是否按时产生记录,最后确认告警渠道能收到异常通知。
三步都通过,说明大模型AIOps实战的最小闭环已经跑通。
后续可以把日志来源从单文件扩展到多个服务,并为不同服务设置不同的提示词模板,减少误报。