很多站长每天都要面对 Nginx 访问日志、SSH 登录记录、系统安全日志,手动翻 grep 查异常太费时间。本文直接给出一套用 AI 自动整理服务器日志的流程,结合 n8n 工作流和本地大模型(Ollama),把 Nginx、SSH、安全日志的分析变成定时任务,异常告警直接推送到钉钉或企业微信。不需要 GPU,普通 2 核 4G 的 VPS 就能跑起来。

为什么需要 AI 自动整理服务器日志
服务器日志量一大,人工排查就是体力活。Nginx 日志里混着爬虫、扫描器、正常流量;SSH 日志里爆破尝试和正常登录混在一起;系统安全日志(auth.log、secure)更是每天几千行。用正则写死规则,遇到新攻击模式就漏。AI 模型(比如通过 Ollama 部署的 Qwen2.5 或 Llama 3)能理解上下文,把“多次尝试密码失败后成功登录”这类模式识别出来,比固定规则灵活得多。
环境准备:VPS 上部署必要组件
安装 Ollama 和拉取模型
Ollama 是本地运行大模型最简单的方式。以 Ubuntu 22.04 为例:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:7b
ollama list
如果 VPS 内存只有 4G,可以换 qwen2.5:3b 或 llama3.2:3b,分析速度更快。
安装 n8n 用于编排工作流
n8n 是开源自动化工具,用来定时读取日志、调用 Ollama 接口、发送通知。
docker run -d –restart unless-stopped \
–name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n
部署后访问 `http://你的VPS IP:5678`,设置管理员账号。注意:端口不要直接暴露公网,用 Nginx 反代加 HTTPS。
确保日志可读
默认 Nginx 日志在 `/var/log/nginx/access.log` 和 `error.log`,SSH 日志在 `/var/log/auth.log`(Debian/Ubuntu)或 `/var/log/secure`(CentOS)。n8n 容器默认无法读取宿主机日志,需要把日志目录挂载到容器内。
docker stop n8n
docker rm n8n
docker run -d –restart unless-stopped \
–name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-v /var/log:/host/logs:ro \
n8nio/n8n
这样 n8n 就能通过 `/host/logs/nginx/access.log` 读取日志了。
核心流程:用 n8n 调度 AI 分析日志
第一步:定时读取最新日志行
在 n8n 中创建一个 Workflow:
• 触发器:Cron 节点,每 10 分钟执行一次。
• 读取日志:用 Execute Command 节点执行 `tail -n 200 /host/logs/nginx/access.log`,只取最近 200 行,避免一次性送太多 token 给模型。
第二步:构造 Prompt 并调用 Ollama
用 HTTP Request 节点调用 Ollama 的 API:
POST http://宿主IP:11434/api/generate
Headers: Content-Type: application/json
Body (JSON):
{
"model": "qwen2.5:7b",
"prompt": "你是一个服务器安全分析专家。以下是最新的 Nginx 访问日志(最近200行),请识别出可疑请求(如 SQL 注入尝试、路径遍历、大量 404、扫描工具特征),并给出简要分析。日志内容:\n{{ $json["output"] }}",
"stream": false
}
注意:Ollama 默认监听 localhost,n8n 容器要访问宿主机,需要把 Ollama 绑定到 `0.0.0.0` 并限制防火墙。安全做法是让 n8n 和 Ollama 运行在同一网络(docker compose 或 host 网络)。
第三步:判断异常并发送告警
用 IF 节点判断返回结果中是否包含“可疑”“攻击”“异常”等关键词。若有,用 Webhook 节点或钉钉机器人发送消息。以钉钉为例:
https://oapi.dingtalk.com/robot/send?access_token=你的token
{"msgtype": "text", "text": {"content": "⚠️ Nginx 日志异常:\n{{ $json["response"] }}"}}
SSH 日志和安全日志的分析流程完全一样,只需换日志路径和 Prompt 描述。建议三个日志分别建 Workflow,或用一个 Workflow 循环处理三个文件。
老鸟叮嘱:避坑指南
1.Ollama 内存占用:7B 模型大约需要 4-6G 内存,3B 模型需要 2-3G。如果 VPS 只有 2G 内存,建议用 `qwen2.5:1.5b` 或 `llama3.2:1b`,分析速度更快,但准确性略有下降。可以在 Ollama 启动时加参数 `OLLAMA_NUM_PARALLEL=1` 限制并发。
2.日志量过大:不要直接把整个日志文件喂给模型。单次请求的 token 数有限,建议每次只取最近 100-500 行,或者用 `grep -E '403|404|500|Failed password'` 先过滤异常行再送给 AI。
3.Prompt 优化:不要只说“分析日志”,要明确告诉模型关注什么。例如“请重点识别 SSH 爆破尝试(连续失败后成功登录)、Nginx 路径遍历、SQL 注入关键词(union, select, drop)”。
4.安全风险:n8n 和 Ollama 的端口不要暴露公网。Ollama API 没有认证,建议用 Nginx 反向代理加 IP 白名单,或者让 n8n 和 Ollama 在同一个 Docker 网络内通信。
5.误报处理:AI 分析不是 100% 准确。建议在告警后加一个“人工确认”环节,比如把可疑日志存到数据库,每天汇总一次,避免半夜被误报警吵醒。
FAQ
Q1:没有 GPU 能不能跑?
能。7B 以下模型在 CPU 上也能运行,只是速度慢一些。2 核 4G 的 VPS 跑 3B 模型,分析 200 行日志大约需要 10-20 秒,完全够用。
Q2:必须用 n8n 吗?有没有更轻量的方案?
也可以用 Python 脚本 + cron 定时任务,直接调用 Ollama 的 Python 库(ollama-python)。但 n8n 的可视化界面更方便调整流程,也方便对接钉钉、企业微信等通知渠道。
Q3:AI 分析日志会泄露敏感信息吗?
模型是本地部署的,日志数据不会上传到外网。但注意日志中如果包含用户 IP、密码(极少情况),建议在 Prompt 中要求模型“不要输出原始 IP,只输出分析结论”。
Q4:怎么测试流程是否正常?
手动在 n8n 中执行一次 Workflow,查看 Execute Command 节点输出是否包含日志内容,再检查 HTTP Request 节点返回的 AI 分析结果。如果 Ollama 返回空,检查模型名是否写对,或者用 `curl` 测试 API 连通性。
Q5:日志文件轮转后怎么办?
n8n 的 tail 命令不受影响,因为 tail 跟踪的是文件名而非 inode。如果日志被清空或重建,tail 会继续读新文件。但建议把 Workflow 触发间隔设为 5-10 分钟,避免漏掉轮转期间的数据。
Q6:多个 VPS 的日志怎么集中分析?
可以用 rsyslog 把所有 VPS 的日志集中到一台日志服务器,然后在这台服务器上部署 n8n + Ollama 进行分析。或者使用 Loki + Grafana 做日志聚合,再通过 Webhook 触发 n8n 工作流。
总结
这套 AI 自动整理服务器日志的流程,把 Nginx、SSH、安全日志的重复排查工作交给了本地大模型,配合 n8n 实现定时分析 + 告警。不需要昂贵的 GPU,普通 VPS 就能跑,而且数据不出本地,安全性有保障。实际部署中注意内存占用和 Prompt 设计,就能稳定运行。如果遇到误报,微调 Prompt 或增加过滤规则即可。
—
**相关阅读:**
– [n8n VPS 部署教程:搭建自己的自动化工作流平台](https://www.zhujixuan.com/jishujiaocheng/9892.html)
– [VPS部署AI工具100讲:AI Agent、Codex、Claude Code、Hermes Agent、Ollama与自动化工作流实战教程](https://www.zhujixuan.com/jishujiaocheng/9606.html)
– [Hermes Agent VPS 部署教程:Docker Compose 安装和初始化配置](https://www.zhujixuan.com/jishujiaocheng/9872.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9908.html 商家投稿邮箱:zhujixuanblog@qq.com
