1. 首页 > 技术教程 > 正文

AI 工具日志爆盘怎么办?日志轮转、清理和磁盘监控

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

zhujixuan TASK 166

一、先确认是不是日志撑爆了磁盘

不管你是跑 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