AI 工具跑起来之后,最容易被忽略的就是日志。Ollama 拉模型时的输出、n8n 工作流的执行记录、Open WebUI 的访问日志、AI Agent 每次调用 API 的 debug 信息……几天不管,/var 分区就满了,服务直接挂掉。别急着重装系统,先搞清楚日志爆盘怎么处理,再配上轮转和监控,才能让 VPS 稳定跑 AI 工具。

一、先确认是不是日志撑爆了磁盘
不管你是跑 Claude Code、Codex、Hermes Agent 还是 MCP 服务,第一步都是查磁盘占用:
df -h
然后定位大目录:
du -sh /var/log
du -sh /var/lib/docker
du -sh /home/*/.local/share # 有些 AI 工具把日志写在家目录
常见爆盘元凶:
•Docker 容器日志(尤其是 n8n、Open WebUI 长期不重启)
•systemd journal(journalctl 默认不限制大小)
•Ollama 服务日志(如果开了 debug 模式)
•AI Agent 框架日志(如 AutoGPT、CrewAI 的 stdout/stderr 重定向文件)
二、手动清理:先腾出空间让服务恢复
2.1 清理 systemd journal(最容易被忽略)
journalctl –disk-usage
sudo journalctl –vacuum-time=3d
sudo journalctl –vacuum-size=200M
2.2 清理 Docker 容器日志
Docker 默认不轮转,容器长期运行日志能撑爆几十 G。
sudo sh -c 'du -sh /var/lib/docker/containers/*/*-json.log'
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
注意:不要直接 `rm` 日志文件,否则 Docker 进程还在写入,空间不会释放。`truncate` 是安全做法。
2.3 清理 AI 工具自己的日志
•Ollama:默认日志在 `~/.ollama/logs/`,可以手动删除旧文件
•n8n:日志路径取决于启动方式,Docker 版看 `docker logs`,直接删容器日志即可
•Open WebUI:后端日志通常在 `~/.open-webui/logs/`,前端日志在浏览器端,不影响磁盘
•AI Agent 脚本:如果你自己写了 `nohup python agent.py > agent.log 2>&1 &`,这个 log 会无限增长,手动 truncate 或加轮转
三、配置日志轮转:让 AI 工具自动管理日志
3.1 为 systemd journal 设置上限
编辑 `/etc/systemd/journald.conf`:
ini
SystemMaxUse=200M
MaxFileSec=7day
然后重启服务:
sudo systemctl restart systemd-journald
3.2 Docker 容器日志轮转(推荐)
创建或修改 `/etc/docker/daemon.json`:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启 Docker:
sudo systemctl restart docker
生效前提:重启后新启动的容器才会走新配置。已有容器需要重建或手动清理一次。
3.3 使用 logrotate 管理应用日志
对于 n8n、Open WebUI 等写日志到固定路径的应用,可以写 logrotate 配置。
以 n8n 的 Docker 版为例,其实 Docker 日志已托管,不需要单独配置。但如果是用 `pm2` 或直接 `npx n8n start` 启动,日志可能输出到 `~/.n8n/logs/`。写一个 logrotate 配置:
sudo vim /etc/logrotate.d/n8n
内容:
/home/n8n/.n8n/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
`copytruncate` 很关键:先复制日志再截断,保证正在写入的进程不受影响。
四、磁盘监控:别等爆了才处理
4.1 简单监控:crontab + df
每天凌晨检查一次,超过阈值发邮件或 Webhook 通知:
crontab -e
0 6 * * * /usr/local/bin/disk-check.sh
`disk-check.sh` 示例:
#!/bin/bash
THRESHOLD=85
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
echo "磁盘使用率 ${USAGE}% 超过阈值 ${THRESHOLD}%" | mail -s "磁盘告警" admin@example.com
fi
4.2 集成到 n8n 工作流
如果你已经在用 n8n 做自动化,可以加一个“磁盘监控”节点:用 SSH 或 HTTP API 获取 VPS 磁盘信息,超过阈值则发通知(邮件、Telegram、钉钉等)。这样不用单独维护脚本。
4.3 使用第三方监控工具
Netdata、Prometheus + Node Exporter 都可以实时看磁盘。但 VPS 内存有限,推荐轻量级方案:`du-dust` 或者 `ncdu` 交互式查看大文件,结合 cron 脚本即可。
老鸟叮嘱
1.不要直接 rm 日志文件,尤其是 Docker 容器日志和正在写入的 log。用 `truncate -s 0` 或 `copytruncate`。
2.AI Agent 的 debug 日志可能包含 API Key、对话内容,清理时注意安全,不要随便把日志文件公开。
3.日志轮转配置后要测试:`sudo logrotate -d /etc/logrotate.d/n8n` 先 dry-run,确认语法正确。
4.Docker 日志配置只对新容器生效,部署 AI 工具时一开始就配好 `docker-compose.yml` 里的 `logging` 字段,避免事后重建。
5.不要为了省空间把日志全关,出问题查不了原因。合理设置轮转周期(7-14 天)比直接禁用更靠谱。
FAQ
Q:清理完日志,df 显示空间没释放?
A:常见原因:有进程还在写被删除的日志文件。重启相关服务(如 Docker、应用)或用 `lsof | grep deleted` 找到占用进程,杀掉或重启。
Q:Docker 容器的日志怎么限制大小?
A:在 `docker run` 时加 `–log-opt max-size=10m –log-opt max-file=3`,或者写在 `docker-compose.yml` 的 `logging` 配置里。已运行的容器需要重建。
Q:logrotate 不生效怎么办?
A:检查配置文件的权限(必须是 644,owner root),运行 `sudo logrotate -f /etc/logrotate.conf` 强制轮转,看报错信息。
Q:AI 工具日志里有很多敏感信息,怎么处理?
A:不要在日志里打印 API Key、Token、数据库密码。如果框架默认打印,改 log level 为 WARNING 或 ERROR。清理时用 red` 命令覆盖删除,防止恢复。
Q:VPS 内存小,跑监控会不会增加负担?
A:cron + df 脚本几乎无开销。Netdata 大约占用 100MB 内存,如果 VPS 只有 1G 内存,建议只用脚本告警。
Q:日志轮转后,旧的压缩日志怎么处理?
A:logrotate 默认会删除超过 `rotate` 数量的旧日志。也可以配置 `maxage 30` 保留 30 天。定期检查压缩包大小,避免备份占满磁盘。
日志管理是 AI 工具部署的必修课。配置好轮转、定期清理、加上磁盘告警,就能避免服务半夜挂掉。别等爆盘了才去查日志,提前设置好,跑起来才省心。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9946.html 商家投稿邮箱:zhujixuanblog@qq.com
