飞牛NAS日志管理与清理策略
日志为何物,又为何要管?
很多朋友在刚接触飞牛NAS(fnOS)时,往往只关注存储、影音和Docker应用,却忽略了系统日志。日志是系统的“黑匣子”,记录着内核、服务、应用和登录行为。但日志也是“碎纸机”,如果不加控制,它们会以惊人的速度占满你的系统盘或存储空间,尤其是当你频繁使用Docker、部署了多个服务时,/var/log 目录的体积可能轻松突破几十GB。
更严重的是,过量的日志会导致磁盘I/O压力增大,影响SMB传输速度和应用的响应时间。因此,一套合理的日志管理与清理策略,是飞牛NAS长期稳定运行的必修课。
第一步:了解日志都藏在哪里
在飞牛NAS中,日志主要分布在以下位置:
- 系统日志:
/var/log/下的syslog、messages、kern.log - 飞牛应用日志:
/vol1/@app_data/下各应用目录内的logs文件夹 - Docker容器日志:
/var/lib/docker/containers/下每个容器ID对应的*-json.log文件 - 登录与安全日志:
/var/log/auth.log或btmp、wtmp
你可以通过SSH登录飞牛NAS(默认端口22,需要先在控制台开启SSH功能),执行以下命令快速查看日志占用:
sudo du -sh /var/log
sudo du -sh /var/lib/docker/containers
第二步:制定日志轮转策略(核心步骤)
飞牛NAS基于Debian,自带 logrotate 工具,但默认配置可能不够激进。我们需要手动调整,让日志自动切割、压缩并删除旧文件。
首先,编辑主配置文件:
sudo nano /etc/logrotate.conf
确保以下参数存在且未被注释:
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
这表示日志每天轮转一次,保留7份,压缩旧日志(延迟压缩一天,方便排查当天问题)。
然后,为飞牛和Docker定制一个专门的文件:
sudo nano /etc/logrotate.d/fnos
写入如下内容:
/var/log/syslog /var/log/messages /var/log/kern.log {
daily
rotate 14
compress
missingok
notifempty
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/lib/docker/containers/*/*-json.log {
daily
rotate 3
size 50M
compress
missingok
copytruncate
}
保存后,先测试配置是否正确:
sudo logrotate -d /etc/logrotate.d/fnos
如果输出没有报错,再执行一次强制轮转验证效果:
sudo logrotate -f /etc/logrotate.d/fnos
注意,Docker容器日志我们限制了单个文件达到50M才轮转,每天最多保留3个压缩包,这样既能排查问题,又不会占用大量空间。
第三步:手动清理已有的大日志文件
如果你发现日志已经占用很大空间,需要立即清理,可以按以下方式操作。
对于系统日志,使用 truncate 而非 rm,这样可以避免进程因文件句柄丢失而异常:
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/messages
sudo truncate -s 0 /var/log/kern.log
对于Docker容器日志,最稳妥的方式是重启容器后再删除文件,或者使用在线截断命令:
sudo sh -c "truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名或ID)"
如果你不确定容器ID,可以用 docker ps 查看。更推荐的做法是直接使用 docker container logs --tail 100 容器名 查看日志,避免频繁读取大文件。
第四步:限制Docker容器日志的生成上限
除了依赖系统轮转,我们还可以从源头限制Docker容器日志的大小。修改 /etc/docker/daemon.json 文件:
sudo nano /etc/docker/daemon.json
添加或修改为:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
}
}
保存后重启Docker服务:
sudo systemctl restart docker
注意,这个配置只对新建或重启后的容器生效,已有容器需要手动重建或重启才会应用。
第五步:飞牛应用日志的定期清理
飞牛影音、相册、下载器等应用日志位于 /vol1/@app_data/ 下。你可以编写一个简单的定时任务来清理超过7天的日志文件。
创建清理脚本:
sudo nano /usr/local/bin/clean_fnos_logs.sh
内容如下:
#!/bin/bash
find /vol1/@app_data -type f -name "*.log" -mtime +7 -delete
find /vol1/@app_data -type f -name "*.log.*" -mtime +7 -delete
赋予执行权限并加入crontab:
sudo chmod +x /usr/local/bin/clean_fnos_logs.sh
sudo crontab -e
添加一行:
0 3 * * * /usr/local/bin/clean_fnos_logs.sh
这将在每天凌晨3点自动删除飞牛应用下7天前的日志文件。
第六步:开启日志监控与告警
清理是事后补救,最好能提前发现日志异常增长。飞牛NAS自带“通知中心”,我们可以在其中配置存储空间告警,但针对日志目录的监控需要借助 du 配合脚本。
你可以将以下命令加入crontab,每天检查日志总大小是否超过1GB,若超过则发送通知(这里以飞牛的curl webhook为例):
0 0 * * * /bin/bash -c 'size=$(du -sm /var/log | cut -f1); if [ $size -gt 1024 ]; then curl -X POST -H "Content-Type: application/json" -d "{\"message\":\"日志超1GB\"}" http://127.0.0.1:端口/api/通知; fi'
总结
日志管理不是一次性的工作,而是一个持续的习惯。通过 logrotate 自动轮转、Docker日志限流、应用日志定期清理、以及定时监控,你可以让飞牛NAS的日志始终维持在一个健康的体积范围内。这样不仅释放了存储空间,还能显著提升系统响应速度,让飞牛NAS更稳定地为你服务。建议每季度检查一次 /var/log 和Docker日志目录的实际占用,并根据你的使用强度动态调整轮转参数。
暂无评论,来说两句吧